#include <iostream>
using namespace std;
using T = unsigned long long;
constexpr T gcd(T a, T b) {
return b == 0 ? a : gcd( b, a % b );
}
constexpr T binom(T n, T k) {
if ( k > n - k )
k = n - k;
T p = 1;
T nn = n;
for ( T kk = 1; kk <= k; ++kk ) {
T x = gcd( n - kk + 1, kk );
p = p / ( kk / x ) * ( ( n - kk + 1 ) / x );
}
return p;
}
constexpr T f(int n) {
if ( n == 1 )
return 1;
T sum = 0;
for ( int i = 1; i < n; ++i )
sum += binom(n,i) * f(i) * f(n-i);
return sum / 2;
}
int main() {
for (int i = 1; i < 19; ++i )
cout << i << '\t' << f(i) << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdXNpbmcgVCA9IHVuc2lnbmVkIGxvbmcgbG9uZzsKCmNvbnN0ZXhwciBUIGdjZChUIGEsIFQgYikgewoJcmV0dXJuIGIgPT0gMCA/IGEgOiBnY2QoIGIsIGEgJSBiICk7Cn0JCgpjb25zdGV4cHIgVCBiaW5vbShUIG4sIFQgaykgewoJaWYgKCBrID4gbiAtIGsgKQoJICAgIGsgPSBuIC0gazsKCVQgcCA9IDE7CglUIG5uID0gbjsKCWZvciAoIFQga2sgPSAxOyBrayA8PSBrOyArK2trICkgewoJCVQgeCA9IGdjZCggbiAtIGtrICsgMSwga2sgKTsKCSAgICBwID0gcCAvICgga2sgLyB4ICkgKiAoICggbiAtIGtrICsgMSApIC8geCApOwoJfQoJcmV0dXJuIHA7Cn0KCmNvbnN0ZXhwciBUIGYoaW50IG4pIHsKCWlmICggbiA9PSAxICkKCSAgICByZXR1cm4gMTsKICAgIFQgc3VtID0gMDsKCWZvciAoIGludCBpID0gMTsgaSA8IG47ICsraSApCiAgICAgICAgc3VtICs9IGJpbm9tKG4saSkgKiBmKGkpICogZihuLWkpOwogICAgcmV0dXJuIHN1bSAvIDI7Cn0KCmludCBtYWluKCkgewogICAgZm9yIChpbnQgaSA9IDE7IGkgPCAxOTsgKytpICkKICAgIAljb3V0IDw8IGkgPDwgJ1x0JyA8PCBmKGkpIDw8ICdcbic7Cn0=