#include <bits/stdc++.h>
const long long mod = 119 << 23 | 1;
long long qpow(long long x, long long k) {
  long long r = 1;
  for (; k; k >>= 1, (x *= x) %= mod)
    if (k & 1) (r *= x) %= mod;
  return r;
}
int n, rv[1111111];
long long m, p[1111111], q[1111111], fc[1111111], iv[1111111],
    V = 1 << 18, IV = qpow(V, mod - 2);
void swap(register long long& x, register long long& y) {
  long long t = x;
  x = y, y = t;
}
void NTT(long long* x, int op) {
  register int i, ii, iii;
  if (!rv[1])
    for (i = 0; i < V; i++) rv[i] = (rv[i >> 1] >> 1) + (V >> 1) * (i & 1);
  for (i = 1; i < V; i++)
    if (rv[i] > i) swap(x[rv[i]], x[i]);
  for (i = 1; i < V; i <<= 1) {
    long long w = qpow(3, (mod - 1) / (i << 1)), wi;
    if (op < 0) w = qpow(w, mod - 2);
    for (ii = 0; ii < V; ii += (i << 1))
      for (iii = 0, wi = 1; iii < i; iii++, (wi *= w) %= mod) {
        int px = ii + iii, py = px + i;
        long long tp = wi * x[py] % mod;
        (x[py] = mod + x[px] - tp) %= mod, (x[px] += tp) %= mod;
      }
  }
  if (op < 0)
    for (i = 0; i < V; i++) x[i] = x[i] * IV % mod;
}
void flush(long long* x) {
  for (register int i = n + 1; i < V; i++) x[i] = 0;
}
int main() {
  scanf("%d%lld", &n, &m);
  register int i;
  for (i = fc[0] = 1; i <= 1e6; i++) fc[i] = fc[i - 1] * i % mod;
  for (i--, iv[i] = qpow(fc[i], mod - 2); i; i--) iv[i - 1] = iv[i] * i % mod;
  for (i = 0; i <= n; i++)
    scanf("%lld", p + n - i), (p[n - i] *= fc[i]) %= mod, q[i] = iv[i];
  NTT(p, 1), NTT(q, 1);
  for (i = 0; i < V; i++) (p[i] *= q[i]) %= mod;
  NTT(p, -1), flush(p);
  for (i = 0; i <= n; i++)
    (p[i] *= qpow(n - i + 1, mod - 1 - m % (mod - 1))) %= mod;
  for (i = V >> 1; i < V; i++) swap(q[i], q[i - (V >> 1)]);
  NTT(p, 1);
  for (i = 0; i < V; i++) (p[i] *= q[i]) %= mod;
  NTT(p, -1);
  for (i = 0; i <= n; i++) printf("%lld ", p[n - i] * iv[i] % mod);
  puts("");
}
