// [x^K] 2e^{2x} exp((2e^x+1) log(1/(1-y)) / (2e^x-1) を計算ということになり // log(1/(1-y))=z と置いて整理, ラグ反を適用すると // [x^{K-1}] exp({2x+3} z) (定数個の poly) (x の母関数) // ということになりこれは畳み込みできる // 実装 間に合いません おたすけ~~~ #include "template/template.hpp" // #include "fps/ntt-friendly-fps.hpp" #include "modint/montgomery-modint.hpp" #include "modulo/binomial.hpp" // #include "fps/multivariate-fps.hpp" // #include "fps/arbitrary-fps.hpp" // using namespace Nyaan; using mint = LazyMontgomeryModInt<998244353>; // using mint = LazyMontgomeryModInt<1000000007>; using vm = vector; using vvm = vector; Binomial C; using fps = FormalPowerSeries; using namespace Nyaan; vm naive(int N, int K) { vm ans{0}; fps f(K + 1), e(K + 1); rep(i, K + 1) e[i] = C.finv(i); rep1(a, N - 1) { f = (f * (e * 2 + a - 1) + C.fac(a - 1)).pre(K + 1); mint cur = (f * e)[K] * C.fac(K); ans.push_back(cur * C.fac(N - 1) * C.finv(a)); } return ans; } vm naive2(int N, int K) { using mfps = MultivariateFormalPowerSeries; vi base{K + 1, N}; mfps e_x(base); rep(i, K + 1) e_x(i, 0) = C.finv(i); mfps f1(base); rep(j, N) f1(0, j) = 1; f1 = (f1.log() * (e_x * 2 + 1)).exp() * e_x * 2; mfps f2(base); rep(j, N) f2(0, j) = j + 1; mfps f = (f1 - f2) * ((e_x * 2 - 1).inv()); f *= e_x; vm ans{0}; rep1(a, N - 1) { mint cur = f(K, a - 1) * C.fac(K) * C.fac(a - 1); ans.push_back(cur * C.fac(N - 1) * C.finv(a)); } return ans; } void q() { inl(N, K); auto ans = naive2(N, K); each(x, ans) out(x); } void Nyaan::solve() { int t = 1; // in(t); while (t--) q(); }