#include #include #include #include "atcoder/modint.hpp" using namespace std; using mint = atcoder::modint998244353; struct Binomial { vector fac_, finv_, inv_; Binomial(int MAX = 0) : fac_(MAX + 10), finv_(MAX + 10), inv_(MAX + 10) { assert(mint::mod() != 0); MAX += 9; fac_[0] = finv_[0] = inv_[0] = 1; for (int i = 1; i <= MAX; i++) fac_[i] = fac_[i - 1] * i; finv_[MAX] = fac_[MAX].inv(); for (int i = MAX - 1; i > 0; i--) finv_[i] = finv_[i + 1] * (i + 1); for (int i = 1; i <= MAX; i++) inv_[i] = finv_[i] * fac_[i - 1]; } void extend() { int n = fac_.size(); mint fac = fac_.back() * n; mint inv = (-inv_[mint::mod() % n]) * (mint::mod() / n); mint finv = finv_.back() * inv; fac_.push_back(fac); finv_.push_back(finv); inv_.push_back(inv); } mint fac(int i) { if (i < 0) return mint(0); while (i >= (int)fac_.size()) extend(); return fac_[i]; } mint finv(int i) { if (i < 0) return mint(0); while (i >= (int)finv_.size()) extend(); return finv_[i]; } mint inv(int i) { if (i < 0) return mint(0); while (i >= (int)inv_.size()) extend(); return inv_[i]; } mint C(int n, int r) { if (n < 0 || n < r || r < 0) return mint(0); return fac(n) * finv(n - r) * finv(r); } }; Binomial C; using vm = vector; vm fast_pow(const vm &f, long long k, int n) { if (f.size() == 0 or n == 0) return vm(n, mint(0)); int d = f.size() - 1; vm g(n); g[0] = f[0].pow(k); mint denom = f[0].inv(); k %= mint::mod(); for (int a = 1; a < n; a++) { int ie = min(a, d); for (int i = 1; i <= ie; i++) { g[a] += f[i] * g[a - i] * ((k + 1) * i - a); } g[a] *= denom * C.inv(a); } return g; } void die() { cout << "0\n"; exit(0); } int main() { int N, P; cin >> N >> P; if (N % 4 != 1) die(); int M = (N - 1) / 4; if (3 * M + 1 < P) die(); if (M - 1 - 7 * P < 0) die(); vm H(7); for (int i = 0; i < 7; i++) H[i] = C.finv(i); mint ans = fast_pow(H, 3 * M + 1 - P, M - 7 * P)[M - 1 - 7 * P]; ans *= C.C(3 * M + 1, P) * C.fac(M - 1); ans *= (C.finv(7).pow(P)) * C.finv(M - 1 - 7 * P); ans *= C.fac(N) * C.inv(3 * M + 1) * C.inv(M) * (C.finv(3).pow(M)); cout << ans.val() << "\n"; }