func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 400005;   const long long MOD = 998244353;   const long long g = 3;   int n, N;   int rev[MAXN];   long long m, Inv;   long long f[MAXN];   long long A[MAXN];   long long B[MAXN];   long long fac[MAXN];   long long inv[MAXN];   long long wn[2][MAXN];   long long power(long long a, long long b) {     long long res = 1;     while (b) {       if (b & 1) (res *= a) %= MOD;       (a *= a) %= MOD;       b >>= 1;     }     return res;   }   void init(int l) {     N = 1;     while (N < l) N <<= 1;     int half = N >> 1;     Inv = power(N, MOD - 2);     for (int i = 1; i < N; i++) rev[i] = (rev[i >> 1] >> 1) + (i & 1) * half;     for (int i = 0; i < half; i++) {       wn[0][i + half] = power(g, (MOD - 1) * i / N);       wn[1][i + half] = power((MOD + 1) / g, (MOD - 1) * i / N);     }     for (int i = half - 1; i >= 0; i--) {       wn[0][i] = wn[0][i << 1];       wn[1][i] = wn[1][i << 1];     }     fac[0] = 1;     for (int i = 1; i <= l; i++) fac[i] = fac[i - 1] * i % MOD;     inv[l] = power(fac[l], MOD - 2);     for (int i = l; i >= 1; i--) inv[i - 1] = inv[i] * i % MOD;   }   void NTT(long long *v, bool inv) {     for (int i = 0; i < N; i++)       if (i < rev[i]) swap(v[i], v[rev[i]]);     for (int i = 1; i < N; i <<= 1)       for (int j = 0; j < N; j += i << 1) {         long long *l = v + j, *r = v + j + i, *w = wn[inv] + i, A;         for (int k = 0; k < i; k++, l++, r++, w++) {           A = *r * *w;           *r = (*l - A) % MOD;           *l = (*l + A) % MOD;         }       }     if (inv) {       for (int i = 0; i < N; i++) (v[i] *= Inv) %= MOD;     }   }   int main() {     scanf( %d%lld , &n, &m);     init(n << 1 | 1);     for (int i = 0; i <= n; i++) scanf( %lld , &f[i]);     for (int i = 0; i <= n; i++) A[i] = inv[i];     for (int i = 0; i <= n; i++) B[i] = fac[n - i] * f[n - i] % MOD;     NTT(A, 0);     NTT(B, 0);     for (int i = 0; i < N; i++) f[i] = A[i] * B[i] % MOD;     NTT(f, 1);     reverse(f, f + n + 1);     for (int i = 0; i <= n; i++)       f[i] = f[i] * inv[i] % MOD * power(fac[i] * inv[i + 1] % MOD, m) % MOD;     memset(A, 0, sizeof(A));     memset(B, 0, sizeof(B));     for (int i = 0; i <= n; i++) A[i] = (i % 2 ? -inv[i] : inv[i]);     for (int i = 0; i <= n; i++) B[i] = fac[n - i] * f[n - i] % MOD;     NTT(A, 0);     NTT(B, 0);     for (int i = 0; i < N; i++) f[i] = A[i] * B[i] % MOD;     NTT(f, 1);     reverse(f, f + n + 1);     for (int i = 0; i <= n; i++) f[i] = f[i] * inv[i] % MOD;     for (int i = 0; i <= n; i++) printf( %lld  , (f[i] + MOD) % MOD);     printf(  n );     return 0;   }   