func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MOD = 998244353;   inline int qpow(int a, int p) {     int ans = 1;     while (p) {       if (p & 1) ans = (long long)ans * a % MOD;       a = (long long)a * a % MOD;       p >>= 1;     }     return ans;   }   inline int add(const int& x, const int& y) {     return x + y >= MOD ? x + y - MOD : x + y;   }   inline int dec(const int& x, const int& y) {     return x < y ? x - y + MOD : x - y;   }   int rt[2][24], r[262144], l, lim;   inline void init() {     lim = 1 << l;     for (int i = 0; i < lim; i++) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1));   }   inline void NTT(int* a, int type) {     for (int i = 0; i < lim; i++)       if (i < r[i]) swap(a[i], a[r[i]]);     for (int L = 0; L < l; L++) {       int mid = 1 << L, len = mid << 1;       long long Wn = rt[type][L + 1];       for (int s = 0; s < lim; s += len)         for (int k = 0, w = 1; k < mid; k++, w = w * Wn % MOD) {           int x = a[s + k], y = (long long)w * a[s + mid + k] % MOD;           a[s + k] = add(x, y), a[s + mid + k] = dec(x, y);         }     }     if (type) {       int t = qpow(lim, MOD - 2);       for (int i = 0; i < lim; i++) a[i] = (long long)a[i] * t % MOD;     }   }   int fac[262144], finv[262144];   int f[262144], g[262144], t[262144];   void solve(int n) {     if (n == 0) return (void)(f[0] = 1);     int m = n >> 1;     solve(m);     for (l = 0; (1 << l) <= (m << 1); l++)       ;     init();     for (int i = 0; i <= m; i++)       t[i] = f[i], f[i] = (long long)f[i] * fac[i] % MOD;     g[m] = 1;     for (int i = m - 1; i >= 0; i--) g[i] = (long long)g[i + 1] * m % MOD;     for (int i = 0; i <= m; i++) g[i] = (long long)g[i] * finv[m - i] % MOD;     for (int i = m + 1; i < lim; i++) g[i] = 0;     NTT(f, 0), NTT(g, 0);     for (int i = 0; i < lim; i++) g[i] = (long long)f[i] * g[i] % MOD;     NTT(g, 1);     for (int i = 0; i <= m; i++) g[i] = (long long)g[i + m] * finv[i] % MOD;     for (int i = m + 1; i < lim; i++) g[i] = 0;     for (int i = 0; i <= m; i++) f[i] = t[i];     for (int i = m + 1; i < lim; i++) f[i] = 0;     NTT(f, 0), NTT(g, 0);     for (int i = 0; i < lim; i++) f[i] = (long long)f[i] * g[i] % MOD;     NTT(f, 1);     if (n & 1) {       for (int i = n; i >= 1; i--) f[i] = ((n - 1ll) * f[i] + f[i - 1]) % MOD;       f[0] = (n - 1ll) * f[0] % MOD;     }   }   int main() {     rt[0][23] = qpow(3, 119), rt[1][23] = qpow(rt[0][23], MOD - 2);     for (int i = 22; i >= 0; i--) {       rt[0][i] = (long long)rt[0][i + 1] * rt[0][i + 1] % MOD;       rt[1][i] = (long long)rt[1][i + 1] * rt[1][i + 1] % MOD;     }     int n, a, b;     scanf( %d%d%d , &n, &a, &b);     --n, --a, --b;     if (a < 0 || b < 0 || n < a + b) return puts( 0 ), 0;     fac[0] = 1;     for (int i = 1; i <= n; i++) fac[i] = (long long)fac[i - 1] * i % MOD;     finv[n] = qpow(fac[n], MOD - 2);     for (int i = n - 1; i >= 0; i--)       finv[i] = (long long)finv[i + 1] * (i + 1) % MOD;     solve(n);     int ans =         (long long)f[a + b] * fac[a + b] % MOD * finv[a] % MOD * finv[b] % MOD;     cout << ans;     return 0;   }   