#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; const ll MOD=998244353; ll powmod(ll a, ll k){ ll ap=a, ans=1; while(k){ if(k&1){ ans*=ap; ans%=MOD; } ap=ap*ap; ap%=MOD; k>>=1; } return ans; } ll inv(ll a){ return powmod(a, MOD-2); } const ll r=3; struct NTT{ ll zeta[24]; NTT(){ zeta[23]=powmod(r, (MOD-1)>>23); for(int i=22; i>=0; i--) zeta[i]=zeta[i+1]*zeta[i+1]%MOD; } vector fft(vector a, int k, bool inverse=false){ int n=a.size(); vector tmp(n); for(int t=1; t<=k; t++){ ll w=1, z=zeta[t]; if(inverse) z=inv(z); for(int i=0; i multiply(vector a, vector b){ int n=a.size()+b.size()-1, k=0; while((1< c(n); for(int i=0; i inverse(vector a){ ll a0=a[0], a0inv=inv(a0); int n=a.size(); for(int i=0; i b(1, 1); for(int i=1; i<=k; i++){ vector a1(1< b1=multiply(b, b); b1=multiply(b1, a1); b.resize(1< log(vector a){ int n=a.size(); if(n==1){ vector c(1); return c; } vector da(n); for(int i=0; i b=inverse(a); vector c=multiply(da, b); c.resize(n); vector invs(n); invs[1]=1; for(int i=2; i=1; i--) c[i]=c[i-1]*invs[i]%MOD; c[0]=0; return c; } }; ll a[100010]; NTT ntt; vector calc(int l, int r){ if(l==r){ return vector{1, (MOD-a[l])%MOD}; } int m=(l+r)/2; auto pl=calc(l, m), pr=calc(m+1, r); auto ret=ntt.multiply(pl, pr); ret.resize(r-l+2); return ret; } int main() { int n, m; cin>>n>>m; for(int i=0; i>a[i]; auto v=calc(0, n-1); v.resize(m+1); v=ntt.log(v); for(int i=1; i<=m; i++){ cout<<(MOD-v[i])*i%MOD<<" "; } cout<