/* Tue Mar 16 17:24:43 JST 2004 */ #include int rec(int depth, int left, int *c) { int i; if (left == 0) { (*c)++; return *c; } if (depth == 17) { return *c; } for (i = 0; left - (depth+1)*(depth+1) * i >= 0; i++) { rec(depth+1, left-(depth+1)*(depth+1)*i, c); } return *c; } int main() { int n, c; while (1) { scanf("%d", &n); if (n == 0) { break; } c = 0; printf("%d\n", rec(0, n, &c)); } return 0; } /* Tue Mar 16 17:32:02 JST 2004 */