#include <bits/stdc++.h>   #pragma GCC optimize( Ofast )   using namespace std;   long long n, k;   long long p[200005];   long long md = 998244353;   long long binpow(long long a, long long b) {     if (b == 1) {       return a % md;     }     long long z = binpow(a, b / 2);     if (b & 1) {       return z * z % md * a % md;     }     return z * z % md;   }   long long C(long long n, long long m) {     return p[n] * binpow(p[m] * p[n - m] % md, md - 2) % md;   }   int main() {     p[0] = 1;     for (long long i = 1; i <= 200000; i++) {       p[i] = p[i - 1] * i % md;     }     cin >> n >> k;     if (k >= n) {       cout << 0;       return 0;     }     long long c = n - k;     long long ans = 0;     long long x = 1;     for (long long i = c; i >= 0; i--) {       if (x == -1) {         ans = (ans + md - C(c, i) * binpow(i, n) % md) % md;         x = 1;       } else {         ans = (ans + C(c, i) * binpow(i, n) % md) % md;         x = -1;       }     }     ans = ans * C(n, c) % md;     if (k > 0) ans = ans * 2 % md;     cout << ans;   }   