/*母函数G(x)=(1+x+x2+x3+x4+…)(1+x4+x8+x12+…)(1+x9+x18+x27+…)… hdu1398 */ #include <iostream> using namespace std; const int lmax=330; int c1[lmax+1],c2[lmax+1]; //下标表示x的几次方,c1[i]的值表示x的系数,即多少种; int main(void) { int n,i,j,k; n=300; for (i=0;i<=n;i++) { c1[i]=1; c2[i]=0; } for (i=2;i<=17;i++) { for (j=0;j<=n;j++) for (k=0;k+j<=n;k+=i*i) { c2[j+k]+=c1[j]; } for (j=0;j<=n;j++) { c1[j]=c2[j]; c2[j]=0; } } while (cin>>n,n) { cout<<c1[n]<<endl; } return 0; }