#include <bits/stdc++.h>
int n, fac[300005], inv[300005], f[300005], g[300005];
long long m;
long long Pow(long long x, long long k) {
  long long t = 1;
  for (; k; k >>= 1, x = x * x % 998244353)
    if (k & 1) t = t * x % 998244353;
  return t;
}
class NTT {
  int len, clc, rev[300005], invn;
  void process(int L) {
    for (len = 1, clc = 0; len < L; len <<= 1, clc++)
      ;
    invn = Pow(len, 998244353 - 2);
    for (int i = 0; i < len; i++)
      rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << clc - 1);
  }
  void transform(int *s, int op) {
    for (int i = 0; i < len; i++)
      if (i < rev[i]) std::swap(s[i], s[rev[i]]);
    for (int i = 1; i < len; i <<= 1) {
      int wn = Pow(op > 0 ? 3 : 332748118, (998244353 - 1) / (i << 1));
      for (int j = 0; j < len; j += i << 1)
        for (int k = 0, w = 1; k < i; k++, w = 1ll * w * wn % 998244353) {
          int A = s[j + k], B = 1ll * s[i + j + k] * w % 998244353;
          s[j + k] = (A + B) % 998244353,
                s[i + j + k] = (A - B + 998244353) % 998244353;
        }
    }
    if (op < 0)
      for (int i = 0; i < len; i++) s[i] = 1ll * s[i] * invn % 998244353;
  }

 public:
  void times(int *a, int *b, int *c, int L) {
    process(L << 1);
    for (int i = L; i < len; i++) a[i] = b[i] = 0;
    transform(a, 1), transform(b, 1);
    for (int i = 0; i < len; i++) c[i] = 1ll * a[i] * b[i] % 998244353;
    transform(c, -1);
    for (int i = L; i < len; i++) c[i] = 0;
  }
} F;
int main() {
  scanf("%d%lld", &n, &m);
  fac[0] = inv[0] = inv[1] = 1;
  for (int i = 1; i <= n; i++) fac[i] = 1ll * fac[i - 1] * i % 998244353;
  for (int i = 2; i <= n; i++)
    inv[i] = 1ll * (998244353 - 998244353 / i) * inv[998244353 % i] % 998244353;
  for (int i = 2; i <= n; i++) inv[i] = 1ll * inv[i - 1] * inv[i] % 998244353;
  for (int i = 0; i <= n; i++)
    scanf("%d", &f[n - i]), f[n - i] = 1ll * f[n - i] * fac[i] % 998244353;
  for (int i = 0; i <= n; i++) g[i] = inv[i];
  F.times(f, g, g, n + 1);
  for (int i = 0; i <= n; i++)
    g[n - i] = 1ll * g[n - i] * Pow(Pow(i + 1, m), 998244353 - 2) % 998244353;
  for (int i = 0; i <= n; i++)
    f[i] = (1ll * (i & 1 ? -1 : 1) * inv[i] + 998244353) % 998244353;
  F.times(f, g, f, n + 1);
  for (int i = 0; i <= n; i++)
    printf("%d ",
           (1ll * f[n - i] * inv[i] % 998244353 + 998244353) % 998244353);
}
