func_code_string: #include <bits/stdc++.h>   using namespace std;   inline int read() {     register int X = 0;     register char ch = 0;     while (ch < 48 || ch > 57) ch = getchar();     while (ch >= 48 && ch <= 57) X = X * 10 + (ch ^ 48), ch = getchar();     return X;   }   long long powM(long long a, int t = 998244353 - 2) {     long long ans = 1;     while (t) {       if (t & 1) ans = ans * a % 998244353;       a = a * a % 998244353;       t >>= 1;     }     return ans;   }   int r[135000 << 2];   long long invG = powM(3), fac[135000], inv[135000];   void NTT(long long *f, bool op, int n) {     for (int i = 0; i < n; i++)       if (r[i] < i) swap(f[r[i]], f[i]);     for (int len = 1; len < n; len <<= 1) {       int w = powM(op == 1 ? 3 : invG, (998244353 - 1) / len / 2);       for (int p = 0; p < n; p += len + len) {         long long buf = 1;         for (int i = p; i < p + len; i++) {           int sav = f[i + len] * buf % 998244353;           f[i + len] = f[i] - sav;           if (f[i + len] < 0) f[i + len] += 998244353;           f[i] = f[i] + sav;           if (f[i] >= 998244353) f[i] -= 998244353;           buf = buf * w % 998244353;         }       }     }   }   long long g[135000 << 1];   void times(long long *f, long long *gg, int len, int lim) {     int m = len + len, n;     for (int i = 0; i < len; i++) g[i] = gg[i];     for (n = 1; n < m; n <<= 1)       ;     for (int i = len; i < n; i++) g[i] = 0;     for (int i = 0; i < n; i++) r[i] = (r[i >> 1] >> 1) | ((i & 1) ? n >> 1 : 0);     NTT(f, 1, n);     NTT(g, 1, n);     for (int i = 0; i < n; ++i) f[i] = f[i] * g[i] % 998244353;     NTT(f, 0, n);     long long invn = powM(n);     for (int i = 0; i < lim; ++i) f[i] = f[i] * invn % 998244353;     for (int i = lim; i < n; ++i) f[i] = 0;   }   long long f[135000 << 1], p[135000 << 1], m;   int n;   int main() {     n = read() + 1;     scanf( %I64d , &m);     m %= (998244353 - 1);     fac[0] = 1;     for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % 998244353;     inv[n] = powM(fac[n]);     for (int i = n; i; i--) inv[i - 1] = inv[i] * i % 998244353;     for (int i = 0; i < n; i++) f[i] = read();     for (int i = 0; i < n; i++) p[n - i - 1] = f[i] * fac[i] % 998244353;     for (int i = 0; i < n; i++) f[i] = inv[i] % 998244353;     times(p, f, n, n);     for (int i = 0; i < n; i++) f[n - i - 1] = p[i] * inv[n - i - 1] % 998244353;     for (int i = 0; i < n; i++)       f[i] = f[i] * powM(i + 1, 998244353 - 1 - m) % 998244353;     for (int i = 0; i < n; i++)       if (i & 1)         p[n - i - 1] = 998244353 - (f[i] * fac[i] % 998244353);       else         p[n - i - 1] = f[i] * fac[i] % 998244353;     for (int i = 0; i < n; i++) f[i] = inv[i] % 998244353;     times(p, f, n, n);     for (int i = 0; i < n; i++) f[n - i - 1] = p[i] * inv[n - i - 1] % 998244353;     for (int i = 0; i < n; i++)       printf( %I64d  , (i & 1) ? (998244353 - f[i]) % 998244353 : f[i]);     puts(  );     return 0;   }   