func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e7 + 7;   const int mod = 998244353;   const long long INF = 1e18;   long long jc[maxn];   long long n, k;   long long inv2 = 499122177;   void init() {     jc[0] = 1;     for (long long i = 1; i < maxn; i++) jc[i] = jc[i - 1] * i % mod;   }   long long exgcd(long long a, long long b, long long &x, long long &y) {     if (!b) {       x = 1;       y = 0;       return a;     }     long long d = exgcd(b, a % b, y, x);     y -= a / b * x;     return d;   }   long long inv(long long a, long long n) {     long long x, y;     exgcd(a, n, x, y);     return (x + n) % n;   }   long long C(long long n, long long m) {     return jc[n] * inv(jc[m] * jc[n - m] % mod, mod) % mod;   }   long long qpow(long long x, int n) {     long long res = 1;     while (n) {       if (n & 1) res = (res * x) % mod;       x = (x * x) % mod;       n /= 2;     }     return res;   }   void rua() {     init();     scanf( %lld%lld , &n, &k);     if (k >= n) {       printf( 0 n );       return;     }     long long ans = 0;     n -= k;     for (int i = 0; i <= n; i += 2)       ans = (ans + C(n, i) * qpow(n - i, n + k) % mod) % mod;     for (int i = 1; i <= n; i += 2)       ans = (ans - C(n, i) * qpow(n - i, n + k) % mod + mod) % mod;     ans = ans * 2ll % mod * C(n + k, n) % mod;     if (k == 0) ans = (ans * 499122177) % mod;     printf( %lld n , ans);   }   int main() {     rua();     return 0;   }   