#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 21
#define MAXV 10001
int coin[MAXN];
unsigned long long dp[MAXV];
void complete_knapsack(void)
{
for(int i = 0; i < MAXN; i ++) {
for(int v = coin[i]; v < MAXV; v ++) {
if( dp[v-coin[i]] ) {
dp[v] += dp[v-coin[i]];
}
}
}
}
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("test.in", "r", stdin);
#endif
int n;
for(int i = 0; i < MAXN; i ++) {
coin[i] = (i+1)*(i+1)*(i+1);
}
memset(dp, 0, sizeof(dp)); dp[0] = 1;
complete_knapsack();
while( ~scanf("%d", &n) ) {
printf("%llu\n", dp[n]);
}
return 0;
}