func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 998244353;   const int N = 132007;   int n, a, b;   int rev[N], fac[N], finv[N], f[N], g[N], h[N];   inline int qpow(int x, int k, int r = 1) {     for (; k; k >>= 1, x = 1ll * x * x % mod)       if (k & 1) r = 1ll * r * x % mod;     return r;   }   inline void ntt(int *a, int len, int opt) {     for (int i = 0; i < len; ++i)       if (i < rev[i]) swap(a[i], a[rev[i]]);     for (int i = 1; i < len; i <<= 1) {       int wn = qpow(3, (mod - 1) / (i << 1));       for (int j = 0; j < len; j += i << 1) {         int w = 1;         for (int k = 0; k < i; ++k, w = 1ll * w * wn % mod) {           int x = a[j + k], y = 1ll * a[j + k + i] * w % mod;           a[j + k] = (x + y) % mod;           a[j + k + i] = (x - y + mod) % mod;         }       }     }     if (~opt) return;     reverse(a + 1, a + len);     const int inv = qpow(len, mod - 2);     for (int i = 0; i < len; ++i) a[i] = 1ll * a[i] * inv % mod;   }   void solve(int n) {     if (!n) return g[1] = 1, void();     int t = n - 1 >> 1, mid = n + 1 >> 1, len = 1, bit = 0;     for (; len <= n + 2; len <<= 1, ++bit)       ;     solve(t);     for (int i = 0; i < len; ++i) rev[i] = rev[i >> 1] >> 1 | (i & 1) << bit - 1;     for (int i = f[0] = 1; i <= mid; ++i) f[i] = 1ll * f[i - 1] * mid % mod;     for (int i = 0; i <= mid; ++i)       f[i] = 1ll * f[i] * finv[i] % mod, h[i] = 1ll * g[i] * fac[i] % mod;     for (int i = mid + 1; i < len; ++i) f[i] = h[i] = 0;     reverse(f, f + mid + 2);     ntt(f, len, 1);     ntt(h, len, 1);     for (int i = 0; i < len; ++i) h[i] = 1ll * f[i] * h[i] % mod;     ntt(h, len, -1);     for (int i = 0; i <= mid; ++i) h[i] = 1ll * h[i + mid + 1] * finv[i] % mod;     for (int i = mid + 1; i < len; ++i) h[i] = 0;     ntt(g, len, 1);     ntt(h, len, 1);     for (int i = 0; i < len; ++i) g[i] = 1ll * g[i] * h[i] % mod;     ntt(g, len, -1);     if (n & 1) return;     for (int i = mid + mid + 1; i < len; ++i) g[i] = 0;     for (int i = len - 1; i; --i) g[i] = (g[i - 1] + 1ll * g[i] * n) % mod;   }   inline int C(int n, int m) {     return 1ll * fac[n] * finv[m] % mod * finv[n - m] % mod;   }   int main() {     scanf( %d%d%d , &n, &a, &b);     long long ans = 0;     if (a == b && a == 1) return printf( %d n , n == 1) & 0;     if (a + b > n + 1 || !a || !b) return printf( %d n , 0) & 0;     for (int i = fac[0] = 1; i <= n; ++i) fac[i] = 1ll * fac[i - 1] * i % mod;     finv[n] = qpow(fac[n], mod - 2);     for (int i = n; i; --i) finv[i - 1] = 1ll * finv[i] * i % mod;     solve(n - 2);     return printf( %lld n , 1ll * g[a + b - 2] * C(a + b - 2, a - 1) % mod) & 0;   }   