#include <iostream>
using namespace std;
int main()
{
int s[20], f[301];
int j, i, n;
for(i = 0; i < 17; i++)
{
s[i] = (i+1)*(i+1);
}
for(i = 1; i < 301; i++)
{
f[i] = 0;
}
f[0] = 1;
for(i = 0; i < 17; i++)
{
for(j = s[i]; j < 301; j++)
{ // if(f[j-s[i]] + weight[i] > f[j]) f[j] += f[j-s[i]] + weight[i]
f[j] += f[j - s[i]]; // 完全背包 母函数
}
}
while ( cin >> n, n)
{
cout << f[n] << endl;
}
return 0;
}
using namespace std;
int main()
{
int s[20], f[301];
int j, i, n;
for(i = 0; i < 17; i++)
{
s[i] = (i+1)*(i+1);
}
for(i = 1; i < 301; i++)
{
f[i] = 0;
}
f[0] = 1;
for(i = 0; i < 17; i++)
{
for(j = s[i]; j < 301; j++)
{ // if(f[j-s[i]] + weight[i] > f[j]) f[j] += f[j-s[i]] + weight[i]
f[j] += f[j - s[i]]; // 完全背包 母函数
}
}
while ( cin >> n, n)
{
cout << f[n] << endl;
}
return 0;
}