详见:http://blog.csdn.net/acdreamers/article/details/12259815
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=50005;
const int P=1e9+7;
ll F[N],f[N];
int n;
int main(){
int t=1000;
for(int i=-1000;i<=1000;i++) f[i+t]=i*(3*i-1)/2;
scanf("%d",&n);
F[0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=i && (f[t+j]<=i || f[t-j]<=i);j++){
if (f[t+j]<=i)
F[i]+=P+((j&1)?1:-1)*F[i-f[t+j]],F[i]%=P;
if (f[t-j]<=i)
F[i]+=P+((j&1)?1:-1)*F[i-f[t-j]],F[i]%=P;
}
}
printf("%lld\n",F[n]);
return 0;
}