#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

const int MAX_N = 301;
vector<int> item;
int T[MAX_N];

void init() {
  for(int i = 1; i <= 17; ++i) item.push_back(i*i);
  fill(T, T+MAX_N, 0);
  T[0] = 1;
  for(int j = 0; j < item.size(); ++j) {
    for(int i = item[j]; i <= 300; ++i) {
      T[i] += T[i-item[j]];
    }
  }
}

int main() {
  int n;
  init();
  while(cin >> n && n) cout << T[n] << endl;
}