code:
#include<bits/stdc++.h>
using namespace std;
struct bigint{
int len;
int a[5000];
};
void set1(bigint &a,bigint b){
a.len=b.len;
memset(a.a,0,sizeof(a.a));
for(int i=1;i<=a.len;i++){
a.a[i]=b.a[i];
}
}
void set2(bigint &a,int b){
a.len=0;
memset(a.a,0,sizeof(a.a));
while(b){
a.a[++a.len]=b%10;
b/=10;
}
}
void set3(bigint &a,string b){
a.len=b.size();
memset(a.a,0,sizeof(a.a));
for(int i=1;i<=a.len;i++){
a.a[i]=b[a.len-i]-'0';
}
}
void print(bigint k){
if(k.len==0){
cout<<0;
return;
}
for(int i=k.len;i>=1;i--){
cout<<k.a[i];
}
}
bigint add(bigint a,bigint b){
bigint res;
res.len=0;
int jw=0;
while(res.len<=a.len||res.len<=b.len){
res.a[++res.len]=a.a[res.len]+b.a[res.len]+jw;
jw=res.a[res.len]/10;
res.a[res.len]%=10;
}
res.a[++res.len]=jw;
while(res.len>=1&&res.a[res.len]==0)--res.len;
return res;
}
int main(){
int n;
cin>>n;
bigint a,b,c;
if(n==1)cout<<0;
else if(n==2)cout<<1;
else if(n==3)cout<<2;
else{
set2(a,1);
set2(b,2);
for(int i=3;i<=n;i++){
set1(c,add(a,b));
set1(a,b);
set1(b,c);
}
print(c);
}
}