#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline bool upmin(T &x, T y) {
  return y < x ? x = y, 1 : 0;
}
template <typename T>
inline bool upmax(T &x, T y) {
  return x < y ? x = y, 1 : 0;
}
const long double pi = acos(-1);
const int oo = 1 << 30;
const long long OO = 1e18;
const int N = 1 << 18 | 2;
int gi() {
  int w = 0;
  bool q = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') q = 0, c = getchar();
  while (c >= '0' && c <= '9') w = w * 10 + c - '0', c = getchar();
  return q ? w : -w;
}
namespace io {
const int L = (1 << 21) + 1;
char ibuf[L], *iS, *iT, obuf[L], *oS = obuf, *oT = obuf + L - 1, c, st[55];
int f, tp;
inline void flush() {
  fwrite(obuf, 1, oS - obuf, stdout);
  oS = obuf;
}
inline void putc(char x) {
  *oS++ = x;
  if (oS == oT) flush();
}
template <class I>
inline void gi(I &x) {
  for (f = 1, c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                              (iS == iT ? EOF : *iS++))
                            : *iS++);
       c < '0' || c > '9';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    if (c == '-') f = -1;
  for (x = 0; c <= '9' && c >= '0';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    x = x * 10 + (c & 15);
  x *= f;
}
template <class I>
inline void print(I x) {
  if (!x) putc('0');
  if (x < 0) putc('-'), x = -x;
  while (x) st[++tp] = x % 10 + '0', x /= 10;
  while (tp) putc(st[tp--]);
}
inline void gs(char *s, int &l) {
  for (c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++);
       c < 'a' || c > 'z';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    ;
  for (l = 0; c <= 'z' && c >= 'a';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    s[l++] = c;
}
inline void ps(const char *s) {
  for (int i = 0, n = strlen(s); i < n; i++) putc(s[i]);
}
};  // namespace io
using io::gi;
using io::gs;
using io::print;
using io::ps;
using io::putc;
const int mod = 998244353;
int R[N], *w0[20], *w1[20], W[N << 1];
int fac[N], inv[N];
int a[N], b[N];
int qpow(int x, int y) {
  int ans = 1;
  while (y) {
    if (y & 1) ans = 1LL * ans * x % mod;
    x = 1LL * x * x % mod;
    y >>= 1;
  }
  return ans;
}
void DFT(int *a, int n, int f) {
  int i, o, k, *wn, *w, x, y, t;
  for (i = 0; i < n; i++)
    if (R[i] > i) swap(a[i], a[R[i]]);
  for (i = 1, t = 0; i < n; i <<= 1, t++)
    for (o = 0, wn = f == 1 ? w0[t] : w1[t]; o < n; o += i << 1)
      for (k = 0, w = wn; k < i; k++, w++) {
        x = a[o + k], y = 1LL * a[o + k + i] * *w % mod;
        a[o + k] = (x + y) % mod;
        a[o + k + i] = (x - y) % mod;
      }
}
int main() {
  int n, i, len, Len, t, *cur = W, G;
  long long m;
  gi(n);
  gi(m);
  n++;
  m %= mod - 1;
  for (len = 1, t = 0; len <= n * 2; len <<= 1, t++) {
    w0[t] = cur;
    G = qpow(3, (mod - 1) / (len << 1));
    for (i = cur[0] = 1; i < len; i++) cur[i] = 1LL * cur[i - 1] * G % mod;
    cur += len;
    w1[t] = cur;
    G = qpow(G, mod - 2);
    for (i = cur[0] = 1; i < len; i++) cur[i] = 1LL * cur[i - 1] * G % mod;
    cur += len;
  }
  Len = qpow(len, mod - 2);
  for (i = 0, t--; i < len; i++) R[i] = R[i >> 1] >> 1 | (i & 1) << t;
  for (i = fac[0] = 1; i <= n; i++) fac[i] = 1LL * fac[i - 1] * i % mod;
  for (i = 2, inv[0] = inv[1] = 1; i <= n; i++)
    inv[i] = -1LL * (mod / i) * inv[mod % i] % mod;
  for (i = 3; i <= n; i++) inv[i] = 1LL * inv[i] * inv[i - 1] % mod;
  for (i = 1; i <= n; i++) gi(a[i]);
  reverse(a + 1, a + n + 1);
  for (i = 1; i <= n; i++) a[i] = 1LL * a[i] * fac[n - i] % mod;
  for (i = 0; i <= n; i++) b[i] = inv[i];
  DFT(a, len, 1);
  DFT(b, len, 1);
  for (i = 0; i < len; i++) a[i] = 1LL * a[i] * b[i] % mod;
  DFT(a, len, -1);
  for (i = 1; i <= n; i++) a[i] = 1LL * a[i] * inv[n - i] % mod * Len % mod;
  for (i = 1; i <= n; i++)
    a[i] = 1LL * a[i] * qpow(qpow(n + 1 - i, mod - 2), m) % mod;
  for (i = 1; i <= n; i++) a[i] = 1LL * a[i] * fac[n - i] % mod;
  for (i = 0; i <= n; i++) b[i] = i & 1 ? -inv[i] : inv[i];
  for (; i < len; i++) a[i] = b[i] = 0;
  DFT(a, len, 1);
  DFT(b, len, 1);
  for (i = 0; i < len; i++) a[i] = 1LL * a[i] * b[i] % mod;
  DFT(a, len, -1);
  for (i = n; i; i--)
    print((1LL * a[i] * Len % mod * inv[n - i] % mod + mod) % mod), putc(' ');
  io::flush();
  return 0;
}
