#include #include #include using namespace std; struct bignum{ int a[100],N; void init(){ N=0,memset(a,0,sizeof(a)); } bignum operator + (const bignum an){ bignum x; x.init(); x.N=max(N,an.N); for (int i=1;i<=x.N;i++){ x.a[i]=x.a[i]+a[i]+an.a[i]; if (x.a[i]>=10){ x.a[i]-=10,x.a[i+1]++; } } if (x.a[x.N+1]) x.N++; return x; } void print(){ for (int i=N;i>=1;i--){ putchar(a[i]+48); } putchar(10); } }ans[209],C[209][209]; bool vis[209]; int n; int main(){ C[0][0].N=1,C[0][0].a[1]=1; n=200; for (int i=1;i<=n;i++){ C[i][0].N=1,C[i][0].a[1]=1; for (int j=1;j<=i;j++){ C[i][j]=C[i-1][j]+C[i-1][j-1]; } } while(~scanf("%d",&n)){ if (vis[n]){ ans[n].print(); continue; } vis[n]=1; for (int i=0;i<=n/2;i++){ //C[n-i][n-i-i].print(); ans[n]=ans[n]+C[n-i][n-2*i]; } ans[n].print(); } }