#include #include #define N 105 typedef unsigned long long ull; int jV[N]; int jL[N]; ull jP[N]; long double jDP[N]; int lS[N]; int pS[N]; long double mat[101][101]; ull mer(int i, int j){ return mat[i][j]; } void get(int i){ if(lS[i])get(lS[i]); if(pS[i])get(pS[i]); int a,b; if(lS[i])a=jL[lS[i]]; else a=0; if(pS[i])b=jL[pS[i]]; else b=0; jL[i]=a+b+1; //printf("asdf %d %d %d \n",jV[i],a,b); jP[i] = jP[lS[i]]*jP[pS[i]]*mer(jL[lS[i]],jL[pS[i]]); jDP[i] = jDP[lS[i]]*jDP[pS[i]]*mer(jL[lS[i]],jL[pS[i]]); // printf("s:%d %d\n",jL[lS[i]],jL[pS[i]]); // printf("%d %llu %llu %llu\n",jV[i],jP[lS[i]],jP[pS[i]],mer(jL[lS[i]],jL[pS[i]])); } void initM(){ int i,j; for(i=0;i<101;i++){ mat[i][0]=1; mat[0][i]=1; mat[i][1]=i+1; mat[1][i]=i+1; } for(i=2;i<101;i++){ for(j=2;j<101;j++){ mat[i][j] = mat[i-1][j] + mat[i][j-1]; } } } int main(){ initM(); // printf("a %llu %llu %llu %llu %llu %llu\n",mat[2][4],mat[4][2],mat[1][3],mat[3][1],mat[2][3],mat[3][2]); ull kl = -1; // printf("%llu\n",kl); while(1){ int n,k,i; scanf("%d",&n); if(!n)return n; for(i=0;i=jV[k]){ // printf("!"); if(pS[k])k=pS[k]; else { pS[k]=i; break;} } else{ // printf("?"); if(lS[k])k=lS[k]; else { lS[k]=i; break;} } } } get(1); printf("%.0Lf\n",jDP[1]); } }