structBigint { int len_; int arr_[1050]; Bigint(int x = 0) { memset(arr_, 0, sizeof(arr_)); len_ = 0; do { arr_[++len_] = x % 10; x /= 10; } while (x); } int &operator[](int x) { return arr_[x]; } voidflatten(int len){ len_ = len; for (int i = 1; i <= len_; ++i) { if (arr_[i] >= 10) { arr_[i + 1] += arr_[i] / 10; arr_[i] %= 10; } } while (!arr_[len_] && len_) --len_; } voidprint(){ for (int i = max(1, len_); i >= 1; --i) { cout << arr_[i]; } } } C[51][51];
Bigint operator+(Bigint a, Bigint b) { Bigint c; int len = max(a.len_, b.len_); for (int i = 1; i <= len; ++i) { c[i] += a[i] + b[i]; } c.flatten(len + 1); return c; }
Bigint operator*(Bigint a, Bigint b) { Bigint c; for (int i = 1; i <= a.len_; ++i) { for (int j = 1; j <= b.len_; ++j) { c[i + j - 1] += a[i] * b[j]; } } c.flatten(a.len_ + b.len_); return c; }
voidf(){ for (int i = 0; i <= 50; ++i) { C[i][0] = C[i][i] = Bigint(1); for (int j = 1; j < i; ++j) { C[i][j] = C[i - 1][j - 1] + C[i - 1][j]; } } }
intmain(){ int n, a, b; cin >> n >> a >> b; f(); Bigint ans; for (int i = 0; i <= a; ++i) { for (int j = 0; j <= b; ++j) { ans = ans + (C[n + i - 1][i] * C[n + j - 1][j]); } } ans.print(); return0; }