# 栈是计算机中经典的数据结构，简单的说，栈就是限制在一端进行插入删除操作的线性表。
#
# 栈有两种最重要的操作，即pop（从栈顶弹出一个元素）和push（将一个元素进栈）。 
#
# 栈的重要性不言自明，任何一门数据结构的课程都会介绍栈。
#
# 宁宁同学在复习栈的基本概念时，想到了一个书上没有讲过的问题，而他自己无法给出答案，所以需要你的帮忙。
#
# 宁宁考虑的是这样一个问题：一个操作数序列，从1，2，一直到n，栈A的深度大于n。 
#
# 现在可以进行两种操作， 
#
# 1、将一个数，从操作数序列的头端移到栈的头端（对应数据结构栈的push操作）。
# 2、将一个数，从栈的头端移到输出序列的尾端（对应数据结构栈的pop操作）。
#
# 使用这两种操作，由一个操作数序列就可以得到一系列的输出序列。
#
# 你的程序将对给定的n，计算并输出由操作数序列1，2，…，n经过操作可能得到的输出序列的总数。
#
# 输入格式
# 输入文件只含一个整数 n。
#
# 输出格式
# 输出文件只有一行，即可能输出序列的总数目。
#
# 数据范围
# 1≤n≤18
# 输入样例：
# 3
# 输出样例：
# 5

N = 40
n = int(input())
c = [[0] * N for _ in range(N)]

for i in range(N):
    for j in range(i + 1):
        if j == 0:
            c[i][j] = 1
        else:
            c[i][j] = c[i - 1][j] + c[i - 1][j - 1]

res = c[2 * n][n] // (n + 1)
print(res)