#include using namespace std; using ll=long long; using P=pair; // mod function ll mod(ll a, ll mod) { return (a%mod+mod)%mod; } ll modpow(ll a,ll n,ll mod){ ll res=1; a%=mod; while (n>0){ if (n & 1) res*=a; a *= a; a%=mod; n >>= 1; res%=mod; } return res; } vector

prime_factorize(ll N) { vector

res; for (ll a = 2; a * a <= N; ++a) { if (N % a != 0) continue; ll ex = 0; while(N % a == 0){ ++ex; N /= a; } res.push_back({a, ex}); } if (N != 1) res.push_back({N, 1}); return res; } ll modinv(ll a, ll mod) { ll b = mod, u = 1, v = 0; while (b) { ll t = a/b; a -= t * b, swap(a, b); u -= t * v, swap(u, v); } u %= mod; if (u < 0) u += mod; return u; } ll extGcd(ll a, ll b, ll &p, ll &q) { if (b == 0) { p = 1; q = 0; return a; } ll d = extGcd(b, a%b, q, p); q -= a/b * p; return d; } P ChineseRem(const vector &b, const vector &m) { ll r = 0, M = 1; for (int i = 0; i < (int)b.size(); ++i) { ll p, q; ll d = extGcd(M, m[i], p, q); if ((b[i] - r) % d != 0) return make_pair(0, -1); ll tmp = (b[i] - r) / d * p % (m[i]/d); r += M * tmp; M *= m[i]/d; } return make_pair(mod(r, M), M); } template struct Comb{ unordered_map,vector>> mp; int n_; ll p_, pm_; vector ord_, fact_; vector

pf; Comb(int n) : n_(n), ord_(n), fact_(n){ pf=prime_factorize(m); COMinit(); } void init(int n) { ord_.resize(n); fact_.resize(n); } void init(long long p, long long pm) { p_=p,pm_=pm; ord_[0]=ord_[1]=0; fact_[0]=fact_[1]=1; auto&[pms,ord,fac]=mp[p]; pms=pm; ord.resize(n_); fac.resize(n_); ord[0]=ord[1]=0; fac[0]=fac[1]=1; for (int i=2;i vb(sz), vm(sz); for (int i=0;i struct Perm{ unordered_map,vector>> mp; int n_; ll p_, pm_; vector ord_, fact_; vector

pf; Perm(int n) : n_(n), ord_(n), fact_(n) { pf=prime_factorize(m); PERMinit(); } void init(int n) { ord_.resize(n); fact_.resize(n); } void init(long long p, long long pm) { p_=p,pm_=pm; ord_[0]=ord_[1]=0; fact_[0]=fact_[1]=1; auto&[pms,ord,fac]=mp[p]; pms=pm; ord.resize(n_); fac.resize(n_); ord[0]=ord[1]=0; fac[0]=fac[1]=1; for (int i=2;i vb, vm; for (auto ps : pf) { long long p = ps.first, e = ps.second; long long pm = pow(p,e); long long b = 1; b *= perm(n, k ,p) % pm; b %= pm; vm.push_back(pm); vb.push_back(b); } auto res = ChineseRem(vb,vm); return res.first; } }; int main(){ cout<<998244353<>a>>n; cout<