#include #include #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; using namespace atcoder; typedef long long ll; typedef pair P; using mint=modint998244353; mint f[2000010], invf[2000010]; mint p2[2000020], i2[2000020]; void fac(int n){ f[0]=1; for(ll i=1; i<=n; i++) f[i]=f[i-1]*i; invf[n]=f[n].inv(); for(ll i=n-1; i>=0; i--) invf[i]=invf[i+1]*(i+1); p2[1]=2, i2[1]=mint(2).inv(); p2[0]=1, i2[0]=1; for(int i=2; i<=n; i++){ p2[i]=p2[i-1]*2; i2[i]=i2[i-1]*i2[1]; } } mint comb(int x, int y){ if(!(0<=y && y<=x)) return 0; return f[x]*invf[y]*invf[x-y]; } int main() { int n; cin>>n; fac(2*n); mint a[100010]; for(int i=0; i>a1; a[i]=a1; } vector s(n); s[0]=i2[1]; for(int i=1; i va(3*n); for(int i=0; i v2(n+1); // vector v0(3); v0[0]=v0[2]=1; // for(int k=0; k<=n; k++){ // v2[k]=v1[2*n-1+k]; // v1=convolution(v1, v0); // } { const int d=1000; vector v0(2*d+1); for(int k=0; k<=d; k++){ v0[2*k]=comb(d, k); } for(int k=0; k<=n; k+=d){ for(int i=0; i+k<=n && i=0){ v2[k+i]+=comb(i, j)*v1[l]; } } } v1=convolution(v1, v0); v1.resize(3*n); } } for(int k=0; k<=n; k++){ v2[k]*=invf[k]; } vector v3(n+1); for(int k=0; k<=n; k++){ v3[k]=mint(n-3).pow(k)*invf[k]; } v3=convolution(v3, v2); mint c=p2[2*(n-1)]*f[n-1]; for(int k=0; k<=n; k++){ mint ans=v3[k]*f[k]*c; printf("%d\n", ans.val()); } // mint ans=0; // for(int i=0; i