#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
//因为我们要求的方案数,可以借用离散的思想——
//不用考虑每个数组中具体是那个数
//只需要按照方案数来做即可
//DFS返回的是在此状态下未来将有的方案数
int f[1005][1005];//i表示初始剩余,j表示中间栈里的数
//f[][]表示在这个状态之下“未来”再进行讨论的情况数
int DFS(int i,int j)
{
if(f[i][j]) return f[i][j];
if(i==0) return 1;//边界
//i==0时数据全部在栈里,此时输出顺序唯一
//j=1.j=2,j=3时,只要i==0那么方案数就是1
if(j==0)//栈空时的未来方案数
f[i][j]+=DFS(i-1,j+1);//只能进一下
else //栈非空时的未来方案数
{
f[i][j]+=DFS(i-1,j+1);//进一下
f[i][j]+=DFS(i,j-1);//或者出一下
}
return f[i][j];//递归回来就是i=n,j=0了
}
int main()
{
int n=0;
cin>>n;
cout<<DFS(n,0);
return 0;
}