func_code_string: #include <bits/stdc++.h>   const int mod = 998244353, g = 3, _g = 332748118, maxn = 2e5 + 9;   inline int Pow(int base, int b) {     int ret(1);     while (b) {       if (b & 1) ret = 1ll * ret * base % mod;       base = 1ll * base * base % mod;       b >>= 1;     }     return ret;   }   int r[maxn], W[maxn];   inline int Fir(int n) {     int limit(1), len(0), up(n << 1);     while (limit < up) {       limit <<= 1;       ++len;     }     for (int i = 0; i < limit; ++i)       r[i] = (r[i >> 1] >> 1) | ((i & 1) << len - 1);     return limit;   }   inline void NTT(int *a, int n, int type) {     for (int i = 0; i < n; ++i)       if (i < r[i]) std::swap(a[i], a[r[i]]);     for (int mid = 1; mid < n; mid <<= 1) {       int wn(Pow(type ? g : _g, (mod - 1) / (mid << 1)));       W[0] = 1;       for (int i = 1; i < mid; ++i) W[i] = 1ll * W[i - 1] * wn % mod;       for (int R = mid << 1, j = 0; j < n; j += R)         for (int k = 0; k < mid; ++k) {           int x(a[j + k]), y(1ll * W[k] * a[j + mid + k] % mod);           a[j + k] = 1ll * (x + y) % mod;           a[j + mid + k] = 1ll * (x - y + mod) % mod;         }     }   }   int T[maxn], F[maxn], H[maxn], G[maxn], fac[maxn], fav[maxn], tmp[maxn],       sum[maxn], B[maxn];   inline int Mul(int n, int *a, int *b, int *ans) {     int limit(Fir(n));     NTT(a, limit, 1);     NTT(b, limit, 1);     for (int i = 0; i < limit; ++i) ans[i] = 1ll * a[i] * b[i] % mod;     NTT(ans, limit, 0);     for (int i = ((n - 1) << 1) + 1; i < limit; ++i) a[i] = b[i] = 0;     return Pow(limit, mod - 2);   }   inline void Solve(int n, int *a) {     if (!n) {       a[0] = 1;       return;     }     if (n == 1) {       a[1] = 1;       return;     }     int len(n / 2);     Solve(len, a);     for (int i = 0; i <= len; ++i) {       F[i] = 1ll * Pow(len, i) * fav[i] % mod;       H[i] = 1ll * fac[i] * a[i] % mod;     }     for (int i = 0; i <= (len >> 1); ++i) std::swap(H[i], H[len - i]);     int limit(Fir(len + 1));     for (int i = len + 1; i < limit; ++i) F[i] = H[i] = 0;     NTT(F, limit, 1);     NTT(H, limit, 1);     for (int i = 0; i < limit; ++i) G[i] = 1ll * F[i] * H[i] % mod;     NTT(G, limit, 0);     int ty(Pow(limit, mod - 2));     for (int i = 0; i <= len; ++i)       tmp[i] = 1ll * G[len - i] * ty % mod * Pow(fac[i], mod - 2) % mod;     int val(Mul(len + 1, a, tmp, B));     for (int i = 0; i <= (len << 1); ++i) a[i] = 1ll * B[i] * val % mod;     if (n & 1) {       for (int i = 0; i < n; ++i) T[i] = a[i];       for (int i = 1; i <= n; ++i)         a[i] = 1ll * (T[i - 1] + 1ll * (n - 1) * T[i] % mod) % mod;     }   }   inline int Get_c(int n, int m) {     return 1ll * fac[n] * fav[m] % mod * fav[n - m] % mod;   }   int n, a, b;   int ans[maxn];   int main() {     scanf( %d%d%d , &n, &a, &b);     fac[0] = fac[1] = 1;     for (int i = 2; i <= n; ++i) fac[i] = 1ll * fac[i - 1] * i % mod;     fav[n] = Pow(fac[n], mod - 2);     for (int i = n; i >= 1; --i) fav[i - 1] = 1ll * fav[i] * i % mod;     Solve(n - 1, ans);     printf( %d n , 1ll * ans[a + b - 2] * Get_c(a + b - 2, a - 1) % mod);   }   