func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename Elem>   int quick_power(int a, Elem b, int Mod) {     int ans = 1;     while (b) {       if (b & 1) {         ans = 1ll * ans * a % Mod;       }       b >>= 1;       a = 1ll * a * a % Mod;     }     return ans;   }   const int Maxn = 100000;   const int Mod = 998244353;   const int G = 3;   int p[Maxn + 5];   int n;   long long m;   int frac[Maxn + 5], inv_f[Maxn + 5], inv[Maxn + 5];   void init() {     frac[0] = 1;     for (int i = 1; i <= Maxn + 1; i++) {       frac[i] = 1ll * frac[i - 1] * i % Mod;     }     inv_f[Maxn + 1] = quick_power(frac[Maxn + 1], Mod - 2, Mod);     for (int i = Maxn; i >= 0; i--) {       inv_f[i] = 1ll * inv_f[i + 1] * (i + 1) % Mod;     }     inv[1] = 1;     for (int i = 2; i <= Maxn + 1; i++) {       inv[i] = 1ll * (Mod - Mod / i) * inv[Mod % i] % Mod;     }   }   void NTT(int *a, int flag, int n) {     static int R[Maxn << 2 | 5], last_len;     int len = 1, L = 0;     while (len < n) {       len <<= 1;       L++;     }     if (len != last_len) {       for (int i = 0; i < len; i++) {         R[i] = (R[i >> 1] >> 1) | ((i & 1) << (L - 1));       }       last_len = len;     }     for (int i = 0; i < len; i++) {       if (i < R[i]) {         swap(a[i], a[R[i]]);       }     }     for (int j = 1; j < len; j <<= 1) {       int T = quick_power(G, (Mod - 1) / (j << 1), Mod);       for (int k = 0; k < len; k += (j << 1)) {         for (int l = 0, t = 1; l < j; l++, t = 1ll * t * T % Mod) {           int Nx = a[k + l], Ny = 1ll * t * a[j + k + l] % Mod;           a[k + l] = (Nx + Ny) % Mod;           a[j + k + l] = (Nx - Ny + Mod) % Mod;         }       }     }     if (flag == -1) {       reverse(a + 1, a + len);       for (int i = 0, t = quick_power(len, Mod - 2, Mod); i < len; i++) {         a[i] = 1ll * a[i] * t % Mod;       }     }   }   int a[Maxn << 2 | 5], b[Maxn << 2 | 5], f[Maxn << 2 | 5], g[Maxn << 2 | 5];   int main() {     init();     scanf( %d%lld , &n, &m);     for (int i = 0; i <= n; i++) {       scanf( %d , &p[i]);     }     for (int i = 0; i <= n; i++) {       a[i] = inv_f[i];       b[i] = 1ll * frac[n - i] * p[n - i] % Mod;     }     int len = 1;     while (len <= (n << 1)) {       len <<= 1;     }     NTT(a, 1, len);     NTT(b, 1, len);     for (int i = 0; i < len; i++) {       a[i] = 1ll * a[i] * b[i] % Mod;     }     NTT(a, -1, len);     for (int i = 0; i <= n; i++) {       g[i] = 1ll * a[n - i] * inv_f[i] % Mod;       g[i] = 1ll * g[i] * quick_power(inv[i + 1], m, Mod) % Mod;     }     for (int i = 0; i < len; i++) {       a[i] = b[i] = 0;     }     for (int i = 0; i <= n; i++) {       if (i & 1) {         a[i] = Mod - inv_f[i];       } else {         a[i] = inv_f[i];       }       b[i] = 1ll * frac[n - i] * g[n - i] % Mod;     }     NTT(a, 1, len);     NTT(b, 1, len);     for (int i = 0; i < len; i++) {       a[i] = 1ll * a[i] * b[i] % Mod;     }     NTT(a, -1, len);     for (int i = 0; i <= n; i++) {       f[i] = 1ll * a[n - i] * inv_f[i] % Mod;     }     for (int i = 0; i <= n; i++) {       printf( %d  , f[i]);     }     puts(  );     return 0;   }   