bool vis[maxk]; int pr[maxk / 10]; inttot(0); int pwxk[maxk], cnx[maxk], inv[maxk], f[maxk], px[maxk], cnxkx[maxk]; int p, n, m, k; constint mod = 998244353;
intksm(int x,int mi){ intres(1); x %= mod; while(mi) { if(mi & 1) res = 1ll * res * x % mod; mi >>= 1; x = 1ll * x * x % mod; } return res; }
voidouler(int k){ pwxk[1] = 1; for(int i = 2; i <= k; ++ i) { if(!vis[i]) pr[++ tot] = i, pwxk[i] = ksm(i, k); for(int j = 1; j <= tot && i * pr[j] <= k; ++ j) { vis[i * pr[j]] = 1; pwxk[i * pr[j]] = 1ll * pwxk[i] * pwxk[pr[j]] % mod; if(!(i % pr[j])) break; } // ok } // printf("tot = %d\n", tot); } voidinit(){ ouler(k); int i, j; cnx[0] = 1, f[0] = 0, px[0] = 1; int dp = - p + mod, fc(1); for(i = 1; i <= k; ++ i) fc = 1ll * fc * i % mod; inv[k] = ksm(fc, mod - 2); for(i = k - 1; ~ i; -- i) inv[i] = 1ll * inv[i + 1] * (i + 1) % mod; fc = 1; for(i = 1; i <= k; ++ i) { inv[i] = 1ll * inv[i] * fc % mod; fc = 1ll * fc * i % mod; }// OK