#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
****************************************************************/