import java.util.Scanner;
// OJ平台通过率低,小数据测试没有问题,如发现代码问题,欢迎下方留言
// 大体思路为 n个节点,必然有一个为根节点,剩余n-1个要分配到左子树和有子树中
// 从左子树为0个开始,一直到左右子树的个数相等,不用在增加左子树的节点,因为
// 左右为对称结构,乘以二可以了
// 输入8,结果为1430没有问题
class Main{
public static int function(int n){
if(n <= 0) return 0;
if(n == 1) return 1;
if(n == 2) return 2;
int[] temp = new int[n+1];
temp[0] = 1;
temp[1] = 1;
temp[2] = 2;
// 有n个节点的树就存放在数组temp[n]的位置
for(int i=3; i<=n; i++){
int value = 0;
int left = 0;
// 除了根节点外,只有number个节点
int number = i-1;
// 从左边为0个开始分
// 左子树可能性情况 * 右子树可能情况
while(left <= (number-left)){
// 如果left = right 这个时候不能 * 2,因为和right = left排布没有区别
if(left == (number-left))
value += temp[left] * temp[number-left];
else
value += temp[left] * temp[number-left] * 2;
left ++;
}
temp[i] = value;
}
return temp[n];
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int number = scan.nextInt();
System.out.println(function(number));
}
}