#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int i, j;
int n;
cin >> n;
long long c[20][20];//c[i][j]即出棧i個,進棧j個
for (j = 0; j <= n; j++)
c[0][j] = 1;
for (i = 1; i <= n; i++)
for (j = i; j <= n; j++)
{
if (i == j) c[i][j] = c[i - 1][j];
else c[i][j] = c[i - 1][j] + c[i][j - 1];
}
printf("%d\n", c[n][n]);
return 0;
}
/*
分析:運用dp的思想
①:狀態:c[i][j]表示有i個出棧的,有j個進棧的
②:再找出狀態邊界,轉移公式。
當出棧的個數爲0時,只有唯一的結果,就是逐個出棧形成的序列
當出棧等於進棧個數的時候,就是棧爲空,它的子狀態必然是唯一一種,棧裏只有一個數,而出棧了i-1個
當出棧不等於進棧時,子狀態有兩種,其一爲進棧少一個,出棧不變,另一個則是進棧不少,但出棧少一個
*/