#이항 계수 2
# n, k = map(int, input().split())
# if n - k < k:
# k = n - k
# dp = []
# for i in range(n+1):
# dp.append([1]*(i+1))
# for i in range(2, n+1):
# for j in range(1, i):
# dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) % 10007
# print(dp[n][k])
#동전 1
# n, k = map(int, input().split())
# data = [0] * n
# for i in range(n):
# data[i] = int(input())
# dp = [0 for i in range(k+1)]
# dp[0] = 1
# for i in data:
# for j in range(i, k+1):
# if j-i >= 0:
# dp[j] += dp[j-i]
# print(dp[k])
#피보나치 수 7
# import sys
# sys.setrecursionlimit(10**8)
#
# memo = [0]*1000000
#
#
# def fibo(k):
# global memo
# if memo[k] != 0:
# return memo[k]
# elif k == 0:
# return 0
# elif k == 1:
# return 1
# else:
# memo[k] = (fibo(k-1) + fibo(k-2)) % 1000000007
# return memo[k]
#
#
# n = int(input())
# print(fibo(n))
#파스칼의 삼각형
# n, k = map(int, input().split())
# dp = []
# for i in range(n+1):
# dp.append([1]*(i+1))
# for i in range(2, n+1):
# for j in range(1, i):
# dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j])
# print(dp[n-1][k-1])
#이항계수 4
# def lu(n, k):
# if n < k:
# return 0
# elif n == k:
# return 1
# a = 1
# for i in range(1, k + 1):
# a *= n - i + 1
# a //= i
# return a
#
#
# n, k, m = map(int, input().split())
# N = []
# M = []
# cnt = 0
# while n or k:
# N.append(n % m)
# M.append(k % m)
# n //= m
# k //= m
# r = 1
# for i in range(len(N)):
# r *= lu(N[i], M[i])
# r %= m
# print(r)
#피보나치 수 4
# import sys
# sys.setrecursionlimit(10**6)
#
# memo = [0]*1000000
#
#
# def fibo(k):
# global memo
# if memo[k] != 0:
# return memo[k]
# elif k == 0:
# return 0
# elif k == 1:
# return 1
# else:
# memo[k] = (fibo(k-1) + fibo(k-2))
# return memo[k]
#
#
# n = int(input())
# print(fibo(n))
#신나는 함수 실행
# def w(a, b, c):
# if a <= 0 or b <= 0 or c <= 0:
# return 1
# elif a > 20 or b > 20 or c > 20:
# return w(20, 20, 20)
# if dp[a][b][c]:
# return dp[a][b][c]
# if a < b < c:
# dp[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c)
# return dp[a][b][c]
# else:
# dp[a][b][c] = w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1)
# return dp[a][b][c]
#
#
# dp = [[[0] * (21) for i in range(21)] for j in range(21)]
# while 1:
# a, b, c = map(int, input().split())
# if a == -1 and b == -1 and c == -1:
# break
# print("w(", a, ",", " ", b, ",", " ", c, ")", " ", '=', " ", w(a, b, c), sep = "")
#피보나치 비스무리한 수열
#
# memo = [0] * 10000
#
#
# def simfibo(n):
# global memo
# if n == 1 or n == 2 or n == 3:
# return 1
# if memo[n]:
# return memo[n]
# memo[n] = simfibo(n-1) + simfibo(n-3)
# return memo[n]
#
#
# n = int(input())
# print(simfibo(n))
# 다이나믹이 뭐예요?
# n, m = map(int, input().split())
# dp = [[0 for i in range(m+1)] for j in range(n+1)]
# dp[0][0] = 1
# for i in range(1, n + 1):
# for j in range(1, m + 1):
# dp[i][j] = (dp[i-1][j] + dp[i][j-1] + dp[i-1][j-1]) % 1000000007
# print(dp[n][m])
#피보나치는 지겨웡~
# n = int(input())
# dp = [0] * (n+1)
# if n <= 1:
# print(1)
# else:
# dp[0] = 1
# dp[1] = 1
# for i in range(2, n+1):
# dp[i] = dp[i-1] + dp[i-2] + 1
# print(dp[n] % 1000000007)
# import sys
# sys.setrecursionlimit(10**6)
# memo = [0]*10000000
#
#
# def fibo(p):
# global memo
# if memo[p] != 0:
# return memo[p]
# elif p == 1 or p == 2:
# return 1
# else:
# memo[p] = fibo(p-1) + fibo(p-2)
# return memo[p]
#
#
# t = int(input())
# k = t
# while t > 0:
# t -= 1
# p, q = map(int, input().split())
# print("Case #", k - t, ":", " ", fibo(p) % q, sep='')
#타일 채우기
# t = int(input())
# dp = [1, 1, 5]
# cnt = [0, 1, 4]
# for i in range(t):
# n = int(input())
# if n < len(dp):
# print(dp[n])
# continue
# idx = len(dp)
# while n >= idx:
# cnt.append(2 if idx % 2 else 3)
# tmp = 0
# for j in range(idx):
# tmp += dp[j] * cnt[-j-1]
# dp.append(tmp)
# idx += 1
# print(dp[n])
import sys
sys.setrecursionlimit(10**6)
memo = [0] * 100000
def t(n):
global memo
if n == 0:
return 1
if memo[n] != 0:
return memo[n]
for i in range(n):
for j in range(n, -1, -1):
memo[n] += t(i) * t(j)
print(memo[n])
return memo[n]
n = int(input())
print(t(n))