#include #include using namespace std; using namespace atcoder; //const long nPrime = 1000000007; const long nPrime = 998244353; typedef long long ll; long Inverse(const long &n){ //nPrime = 1000000007 if (n % nPrime == 0){ return 0; } long a = n, b = nPrime, u = 1, v = 0; while (b > 0) { long t = a / b; a -= t * b; swap(a, b); u -= t * v; swap(u, v); } u %= nPrime; if (u < 0){ u += nPrime; } return u; } int main() { long n,k; cin >> n >> k; if(k == 0){ cout << 1 << endl; return 0; } if(k == 1){ if((n&1)==1){ cout << n-2 << endl; } else { cout << 2 << endl; } return 0; } vector viTable(200001,1), viTableInv(200001,1); for(long i = 1; i <= 200000; i++){ viTable[i] = viTable[i-1]*i; viTable[i] %= nPrime; } viTableInv[200000] = Inverse(viTable[200000]); for(long i = 199999; i > 0; i--){ viTableInv[i] = viTableInv[i+1] * (i+1); viTableInv[i] %= nPrime; } long nAns = 0; for(long i = 0; i <= n-k; i+=2){ long iThis = (viTable[n-i-2] * viTableInv[k-2])%nPrime; iThis *= viTableInv[n-k-i]; iThis %= nPrime; iThis *= (i+1); nAns += iThis; nAns %= nPrime; } cout << nAns << endl; return 0; }