#include <iostream>
using namespace std;
// 显然100已经超出了int的范围 1000肯定超过了long long的范围 而用一维数组也比较难存储 所以改为二维数组 分为三部分 整合在一起代码重复性不高 容易出错
int main(){
int n,m=2,k=0,j;
scanf("%d",&n);
long long dp[n+1][1000];
//先把不大于long long 的前90位算出来
for(int i=1;i<=90;i++){
if(i<=3)
dp[i][1] = 1ll*1;
else
dp[i][1] = dp[i-2][1]+dp[i-3][1];
}
//再将前三位用数组存储
for(int i=88;i<=90;i++)
{
long long inter = dp[i][1];
dp[i][1] %=10000000;
dp[i][2] =inter/10000000;
}
//最后用数组存储的三位大数进行动态求值
for(int i=91;i<=n;i++)
{
for(j=1;j<=m;j++)
{
dp[i][j] = dp[i-2][j]+dp[i-3][j]+k;
k = dp[i][j]/10000000;
dp[i][j]%=10000000;
}
if(k){
dp[i][j] = k;
m++;
k=0;
}
}
printf("%d",dp[n][m]);
for(int i=m-1;i>=1;i--)
{
printf("%07d",dp[n][i]);
}
}