#include <bits/stdc++.h>
using i64 = long long;
const int N = 262144, P = 998244353;
char ibuf[(1 << 20) + 1], *iS = ibuf;
int lim, rev[N], w[N], p[N], fac[N], ifac[N], f[N], g[N];
i64 read() {
  i64 x = 0;
  while (isspace(*iS)) ++iS;
  while (isdigit(*iS)) (x *= 10) += *iS++ & 15;
  return x;
}
int inc(int a, int b) { return a += b - P, a + (a >> 31 & P); }
int dec(int a, int b) { return a -= b, a + (a >> 31 & P); }
int mul(int a, int b) { return 1ll * a * b % P; }
int pow(int a, int k) {
  int r = 1;
  for (; k; k >>= 1, a = mul(a, a))
    if (k & 1) r = mul(a, r);
  return r;
}
void init(int n) {
  int p = (lim = 1 << (33 - __builtin_clz(n))) >> 1, g = pow(3, (P - 1) / lim);
  w[p] = 1, fac[0] = ifac[0] = fac[1] = ifac[1] = 1;
  for (int i = 1; i < lim; ++i) rev[i] = (rev[i >> 1] >> 1) | (i & 1 ? p : 0);
  for (int i = p + 1; i < lim; ++i) w[i] = mul(w[i - 1], g);
  for (int i = p - 1; i; --i) w[i] = w[i << 1];
  for (int i = 1; i <= n; ++i) fac[i] = mul(fac[i - 1], i);
  ifac[n] = pow(fac[n], P - 2);
  for (int i = n; i; --i) ifac[i - 1] = mul(ifac[i], i);
}
void NTT(int* a, int f) {
  if (!~f) std::reverse(a + 1, a + lim);
  for (int i = 1; i < lim; ++i)
    if (i < rev[i]) std::swap(a[i], a[rev[i]]);
  for (int i = 1; i < lim; i <<= 1)
    for (int j = 0, d = i << 1; j < lim; j += d)
      for (int k = 0, x; k < i; ++k)
        x = mul(a[i + j + k], w[i + k]), a[i + j + k] = dec(a[j + k], x),
        a[j + k] = inc(a[j + k], x);
  if (!~f)
    for (int i = 0, x = P - (P - 1) / lim; i < lim; ++i) a[i] = mul(a[i], x);
}
int main() {
  fread(ibuf, 1, 1 << 20, stdin);
  int n = read() + 1, m = read() % (P - 1);
  init(n - 1);
  for (int i = 0; i < n; ++i) p[i] = read();
  for (int i = 0; i < n; ++i)
    f[i] = ifac[i], g[i] = mul(fac[n - i - 1], p[n - i - 1]);
  NTT(f, 1), NTT(g, 1);
  for (int i = 0; i < lim; ++i) f[i] = mul(f[i], g[i]);
  NTT(f, -1);
  for (int i = 0; i < n; ++i)
    g[i] = mul(f[i], pow(pow(n - i, m), P - 2)),
    f[i] = i & 1 ? P - ifac[i] : ifac[i];
  memset(f + n, 0, (lim - n) << 2), memset(g + n, 0, (lim - n) << 2), NTT(f, 1),
      NTT(g, 1);
  for (int i = 0; i < lim; ++i) f[i] = mul(f[i], g[i]);
  NTT(f, -1);
  for (int i = 0; i < n; ++i) printf("%d ", mul(ifac[i], f[n - i - 1]));
}
