250731
//#include<stdio.h>
//
//
//
//int main() {
//
// int n, a,b, sum=0;
// int arr[100] = {0}, count[100] = {0}, start[100] = {0};
//
// scanf("%d", &n);
//
// for (int i=0; i<2*(n-1); i=i+2) {
// scanf("%d %d", &a, &b);
// arr[i] = a;
// arr[i+1] = b;
// count[a]++;
// count[b]++;
// }
//
// 연결된 노드를 찾기 위해 시작 지점 인덱스 만들기
// for (int i=1; i<=n; i++) {
// sum += count[i];
// start[i] = sum;
// }
//
//
// for (int i=0; i<2*(n-1); i++) {
//
// }
//
// for (int i=1; i<=n; i++) {
// printf("%d ", start[i]);
// }
//
//
//
//
//
//
// return 0;
//
//}
//
//
//#include<stdio.h>
//
//int cnt1=0, cnt2=0;
//int memo[99] = {1,1,1};
//
//int fib(int n);
//
//int main() {
// int v;
// scanf("%d", &v);
//
// fib(v);
// fibonacci(v);
//
// printf("%d %d", cnt1, cnt2);
//
// return 0;
//}
//
//int fib(int n) {
// //printf("n: %d\n",n);
// if (n==1 || n==2) {
// cnt1++;
// return 1;
// }
//
//
// return fib(n-1) + fib(n-2);
//}
//
//
//int fibonacci(int n) {
//
// for (int i=3; i<=n; i++) {
// memo[i] = memo[i-1] + memo[i-2];
//
// cnt2++;
// }
//
// return memo[n];
//
//
//}
#include<stdio.h>
int memo[99999] = {0};
int main() {
int a,b,c, temp;
scanf("%d %d %d", &a, &b, &c);
while (a!=-1 || b!=-1 || c!=-1) {
temp = w(a,b,c);
printf("w(%d, %d, %d) = %d\n", a,b,c,temp);
scanf("%d %d %d", &a, &b, &c);
}
return 0;
}
int w(int a, int b, int c) {
int v, d,e,f,g;
if (a<=0 || b<=0 || c<=0) {
return 1;
}
v = a*10000+b*10+c;
if (memo[v]!=0) {
printf("v:%d abc: %d %d %d\n",v,a,b,c);
return memo[v];
}
else if (a>20 || b>20 || c>20) {
memo[20220] = w(20, 20, 20);
return memo[2220];
}
else if (a<b && b<c) {
d = a*10000+b*10+(c-1);
e = a*10000+(b-1)*100+(c-1);
f = a*10000+(b-1)*100+c;
memo[d] = w(a,b,c-1);
memo[e] = w(a,b-1,c-1);
memo[f] = w(a,b-1,c);
return memo[d] + memo[e] - memo[f];
}
else {
d = (a-1)*10000+b*10+c;
e = (a-1)*10000+(b-1)*10+c;
f = (a-1)*10000+b*10+(c-1);
g = (a-1)*10000+(b-1)*10+(c-1);
memo[d] = w(a-1, b, c);
memo[e] = w(a-1, b-1, c);
memo[f] = w(a-1, b, c-1);
memo[g] = w(a-1, b-1, c-1);
// printf("m: %d\n", memo[d] + memo[e] + memo[f] + memo[g]);
return memo[d] + memo[e] + memo[f] - memo[g];
}
}
int getIdx(int n1, int n2, int n3) {
}




