#include <bits/stdc++.h>
using namespace std;
int n, a[4 * 100000 + 1], b[4 * 100000 + 1], fac[100000 + 1], inv[100000 + 1];
int g = 3, ig;
int to[4 * 100000 + 1], lim, L, INV;
;
long long m;
template <class T>
void read(T &x) {
  char ch;
  bool ok;
  for (ok = 0, ch = getchar(); !isdigit(ch); ch = getchar())
    if (ch == '-') ok = 1;
  for (x = 0; isdigit(ch); x = x * 10 + ch - '0', ch = getchar())
    ;
  if (ok) x = -x;
}
int fp(int x, long long y) {
  int ansi = 1;
  while (y) {
    if (y & 1) ansi = 1ll * ansi * x % 998244353;
    x = 1ll * x * x % 998244353;
    y >>= 1;
  }
  return ansi;
}
void ntt_pre(int x) {
  lim = 1;
  L = 0;
  while (lim < x) lim <<= 1, L++;
  for (int i = 0; i <= lim; ++i) to[i] = (to[i >> 1] >> 1) + ((i & 1) << L - 1);
  INV = fp(lim, 998244353 - 2);
}
void ntt(int *x, int gi) {
  for (int i = 0; i < lim; ++i)
    if (i < to[i]) swap(x[i], x[to[i]]);
  for (int i = 2; i <= lim; i <<= 1) {
    int w = fp(gi, (998244353 - 1) / i), ii = i >> 1;
    for (int j = 0; j < lim; j += i) {
      int wn = 1;
      for (int p = j; p < j + ii; ++p, wn = 1ll * wn * w % 998244353) {
        int tem1 = x[p], tem2 = 1ll * wn * x[p + ii] % 998244353;
        x[p] = (tem1 + tem2) % 998244353;
        x[p + ii] = (tem1 - tem2 + 998244353) % 998244353;
      }
    }
  }
  if (gi == ig)
    for (int i = 0; i < lim; ++i) x[i] = 1ll * x[i] * INV % 998244353;
}
int main() {
  read(n);
  read(m);
  ig = fp(g, 998244353 - 2);
  fac[0] = fac[1] = inv[0] = inv[1] = 1;
  for (int i = 2; i <= n; ++i)
    inv[i] = 1ll * (998244353 - 998244353 / i) * inv[998244353 % i] % 998244353;
  for (int i = 2; i <= n; ++i) {
    fac[i] = 1ll * fac[i - 1] * i % 998244353;
    inv[i] = 1ll * inv[i - 1] * inv[i] % 998244353;
  }
  for (int i = 0; i <= n; ++i)
    read(a[n - i]), a[n - i] = 1ll * a[n - i] * fac[i] % 998244353;
  for (int i = 0; i <= n; ++i) b[i] = inv[i];
  ntt_pre(2 * n + 1);
  ntt(a, g);
  ntt(b, g);
  for (int i = 0; i < lim; ++i) a[i] = 1ll * a[i] * b[i] % 998244353;
  ntt(a, ig);
  for (int i = 0; 2 * i <= n; ++i) {
    swap(a[n - i], a[i]);
    a[i] = 1ll * a[i] * inv[i] % 998244353;
    if (n - i != i) a[n - i] = 1ll * a[n - i] * inv[n - i] % 998244353;
  }
  for (int i = n + 1; i < lim; ++i) a[i] = b[i] = 0;
  for (int i = 0; i <= n; ++i)
    a[i] = 1ll * a[i] * fp(fp(i + 1, 998244353 - 2), m) % 998244353;
  for (int i = 0; 2 * i <= n; ++i) {
    swap(a[i], a[n - i]);
    a[i] = 1ll * a[i] * fac[n - i] % 998244353;
    if (i != n - i) a[n - i] = 1ll * a[n - i] * fac[i] % 998244353;
  }
  for (int i = 0; i <= n; ++i) b[i] = (i & 1 ? 998244353 - inv[i] : inv[i]);
  ntt(a, g);
  ntt(b, g);
  for (int i = 0; i < lim; ++i) a[i] = 1ll * a[i] * b[i] % 998244353;
  ntt(a, ig);
  for (int i = 0; 2 * i <= n; ++i) {
    swap(a[n - i], a[i]);
    a[i] = 1ll * a[i] * inv[i] % 998244353;
    if (n - i != i) a[n - i] = 1ll * a[n - i] * inv[n - i] % 998244353;
  }
  for (int i = 0; i <= n; ++i) printf("%d ", a[i]);
  return 0;
}
