#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iostream>
using namespace std;
#define mo 100000000;
struct node{
long long a[20];
}f[501][501];
node u;
int i,j,n;
int l[10];
bool s[501];
void cul(int x,int y){
for (int k=1;k<=20;k++)
f[i][j].a[k]+=f[x][y].a[k];
for (int k=1;k<=19;k++)
if (f[i][j].a[k]>=100000000){
f[i][j].a[k+1]+=f[i][j].a[k]/mo;
f[i][j].a[k]=f[i][j].a[k]%mo;
}
}
int main()
{
freopen("runa.in","r",stdin);
freopen("runa.out","w",stdout);
scanf("%d",&n);
memset(f,0,sizeof(f));
f[n][500].a[1]=-1;
for (i=0;i<=500;i++)
f[0][i].a[1]=1;
for (i=1;i<=n;i++)
for (j=1;j<=500;j++){
cul(i,j-1);
if (i-j>=0){
cul(i-j,j-1);
}
}
int p=20;
while (f[n][500].a[p]==0 && p!=0){
p--;
}
printf("%d",f[n][500].a[p]);
p--;
while (p!=0){
for (int i=1;i<=20;i++)
u.a[i]=f[n][500].a[i];
for (int i=1;i<=8;i++){
l[i]=u.a[p]%10;
u.a[p]/=10;
}
for (int i=8;i>=1;i--)
printf("%d",l[i]);
p--;
}
return 0;
}