#include<bits/stdc++.h>
using namespace std;
string he(string s1,string s2){
int a[2500]={0},b[2500]={0},c[2500]={0};
string r;
//逆序
for(int i=0;i<s1.size();i++) a[i]=s1[s1.size()-1-i]-'0';
for(int i=0;i<s2.size();i++) b[i]=s2[s2.size()-1-i]-'0';
//算相加的长度
int len=max(s1.size(),s2.size());
//相加
for(int i=0;i<len;i++){
c[i]=a[i]+b[i]+c[i];
if(c[i]>=10){
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
//判断第len位是不是0
if(c[len]!=0) len++;
//倒序输出
for(int i=len-1;i>=0;i--){
r=r+(char)(c[i]+'0');
}
return r;
}
string cheng (string s){
string r;
int a[2500]={0};
for(int i=0;i<s.size();i++){
a[i]=s[s.size()-1-i]-'0';
}
for(int i=0;i<s.size();i++){//逐位乘2
a[i]=a[i]*2;
}
//逐位进位
for(int i=0;i<s.size();i++){
if(a[i]>=10){
a[i+1]=a[i+1]+a[i]/10;
a[i]=a[i]%10;
}
}
//判断是否多出一位
int len=s.size();
if(a[len]!=0) len++;
for(int i=len-1;i>=0;i--){
r=r+(char)(a[i]+'0');
}
return r;
}
int main(){
long long n;
string x,y,z;
cin>>n;
x="1";//第一项
y="2";//第二项
if(n==1) cout<<x;
else if(n==2) cout<<y;
else{
for(int i=3;i<=n;i++){//从第3项开始,上一项*2,上一项是y,然后加上前第2项
z=he(cheng(y),x);
x=y;//修改x,y的值,然后逐步向后推导
y=z;
}
cout<<z;
}
return 0;
}
/**************************************************************
Problem: 1369
User: hulaoshi
Language: C++
Result: Accepted
Time:34 ms
Memory:2208 kb
****************************************************************/