import java.math.*;
import java.util.*;
/*
* 思路:
* 数列是 0 1 1 3 5 11 21 43
* 然后从第三项开始*2+1,*2-1,*2+1,*2-1,一直这么运算下去
* 发现题解竟然是 a[i]=a[i-1]+2*a[i-2],这个更具通用性
* 做法:
* 递推要记住预处理,要不然有点浪费
*
*/
public class Main {
public static void main(String []args) {
BigInteger []arr=new BigInteger[1010];
arr[1]=BigInteger.valueOf(0);
arr[2]=arr[3]=BigInteger.valueOf(1);
for(int i=4;i<=1000;i++) {
if(i%2==1)arr[i]=arr[i-1].multiply(BigInteger.valueOf(2)).subtract(BigInteger.valueOf(1));
else arr[i]=arr[i-1].multiply(BigInteger.valueOf(2)).add(BigInteger.valueOf(1));
}
Scanner cin=new Scanner(System.in);
while(cin.hasNext()) {
int n=cin.nextInt();
System.out.println(arr[n]);
}
}
}
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=b-1;i>=a;i--)
int mi[1010][100];
int ans[1010][100];
/*
C++分段模拟
通项:a[n]=a[n-2]+2^(n-3)
*/
void init(){
mi[0][0]=1;//
ans[2][0]=1;
rep(i,3,1000+1){
rep(j,0,100){
mi[i-2][j] +=mi[i-3][j]+mi[i-3][j];//前一项相对位置*2
ans[i][j]+=ans[i-2][j]+mi[i-3][j];
mi[i-2][j+1] +=mi[i-2][j]/10000; mi[i-2][j]%=10000;
ans[i][j+1]+=ans[i][j]/10000;ans[i][j]%=10000;
}
}
}
int main(){
init();
int n;
while(scanf("%d",&n)==1){
int index=99;
while(index>0&&!ans[n][index])index--;
//这两句话很牛逼
printf("%d",ans[n][index--]);
while(index>=0)printf("%04d",ans[n][index--]);
printf("\n");
}
return 0;
}