大数 卡特兰数
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <math.h>
using namespace std;
#define sf scanf
#define pf printf
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define dbg(x) cerr << "Line:" << __LINE__ << " : " << #x << " = " << (x) << endl
#define nMax 1000
#define ll long long
#define CLR(a) memset((a),0,sizeof((a)))
struct BigNum {
int a[nMax];
int n;
void clear() { CLR(a); n=0; }
int& operator [](int i) { return (int&) a[i]; }
//const int& operator [](int i) { return (const int&)this->a[i]; }
void fresh() {
int add = 0;
rep(i,n) {
add += a[i];
a[i] = add%10;
add = add/10;
}
while(add) {
a[n] = add%10;
add /= 10;
n ++;
}
}
void out() {
for(int i=n-1;i>=0;i--) pf("%d",a[i]);
pf("\n");
}
};
BigNum operator * (BigNum a,int k) {
BigNum ret;ret.clear();
ret.n = a.n;
rep(i,a.n) ret[i]=a[i]*k;
ret.fresh();
return ret;
}
BigNum operator / (BigNum a,int k) {
BigNum ret;ret.clear();
ret.n = a.n;
int add = 0;
for(int i=a.n-1;i>=0;i--) {
add = add*10 + a[i];
ret[i] = add/k;
add %= k;
}
while(ret.n>=1 && ret[ret.n-1]==0) ret.n --;
return ret;
}
BigNum temp[101],tmp;
void init(int n){
temp[0].clear();
temp[0][0]=1;temp[0].n=1;
for(int i=1;i<n;i++) {
tmp = temp[i-1]*(2*(2*i-1));
//tmp.out();
temp[i] = tmp / (i+1);
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
init(101);
int n;
while(cin >> n) {
temp[n].out();
}
return 0;
}