func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 53e4, mod = 998244353;   int n, nn, L, A, B, ans, fac[N], inv[N], a[N], b[N], c[N], R[N];   int C(int a, int b) { return 1ll * fac[a] * inv[b] % mod * inv[a - b] % mod; }   int qpow(int a, int b) {     int ret = 1;     while (b) {       if (b & 1) ret = 1ll * ret * a % mod;       a = 1ll * a * a % mod, b >>= 1;     }     return ret;   }   void init(int n) {     nn = 1, L = 0;     while (nn <= 2 * n) nn <<= 1, ++L;     for (int i = 1; i < nn; ++i) R[i] = (R[i >> 1] >> 1) | ((i & 1) << L - 1);   }   void NTT(int* a, int tp) {     for (int i = 0; i < nn; ++i)       if (i < R[i]) swap(a[i], a[R[i]]);     for (int i = 1; i < nn; i <<= 1) {       int wn = qpow(3, tp * (mod / (i * 2)) + mod - 1);       for (int j = 0; j < nn; j += i * 2)         for (int k = 0, w = 1; k < i; ++k, w = 1ll * w * wn % mod) {           int x = a[j + k], y = 1ll * w * a[j + k + i] % mod;           a[j + k] = (x + y) % mod;           a[j + k + i] = (x - y + mod) % mod;         }     }     if (tp == 1) return;     int invn = qpow(nn, mod - 2);     for (int i = 0; i < nn; ++i) a[i] = 1ll * a[i] * invn % mod;   }   void solve(int n) {     if (n == 1) {       a[1] = 1;       return;     }     if (n & 1) {       solve(n - 1);       for (int i = n - 1; ~i; --i)         a[i + 1] = (a[i + 1] + a[i]) % mod, a[i] = 1ll * (n - 1) * a[i] % mod;       return;     }     int l = n / 2;     solve(l), init(l);     for (int i = 0; i < nn; ++i) b[i] = c[i] = 0;     int tmp = 1;     for (int i = 0; i <= l; ++i)       b[i] = 1ll * a[i] * fac[i] % mod, c[i] = 1ll * tmp * inv[i] % mod,       tmp = 1ll * tmp * l % mod;     reverse(b, b + l + 1);     NTT(b, 1), NTT(c, 1);     for (int i = 0; i < nn; ++i) b[i] = 1ll * b[i] * c[i] % mod;     NTT(b, -1);     reverse(b, b + l + 1);     for (int i = 0; i <= l; ++i) b[i] = 1ll * inv[i] * b[i] % mod;     for (int i = l + 1; i < nn; ++i) b[i] = 0;     init(n);     NTT(a, 1), NTT(b, 1);     for (int i = 0; i < nn; ++i) a[i] = 1ll * a[i] * b[i] % mod;     NTT(a, -1);   }   int main() {     scanf( %d%d%d , &n, &A, &B);     if (n == 1) {       if (A == 1 && B == 1)         puts( 1 );       else         puts( 0 );       return 0;     }     if (A < 1 || B < 1 || A + B > n + 1 || A + B == 2) {       puts( 0 );       return 0;     }     fac[0] = inv[0] = 1;     for (int i = 1; i <= n; ++i) fac[i] = 1ll * fac[i - 1] * i % mod;     inv[n] = qpow(fac[n], mod - 2);     for (int i = n; i; --i) inv[i - 1] = 1ll * inv[i] * i % mod;     solve(n - 1);     ans = 1ll * a[A + B - 2] * C(A + B - 2, A - 1) % mod;     printf( %d , ans);   }   