#include <bits/stdc++.h>
using namespace std;
int ksm(int a, long long b = 998244353 - 2) {
  int r = 1;
  for (; b; b >>= 1) {
    if (b & 1) r = 1ll * r * a % 998244353;
    a = 1ll * a * a % 998244353;
  }
  return r;
}
int rev[800010];
int get_rev(int n) {
  int lim = 1, l = 0;
  while (lim <= n * 2) lim <<= 1, l++;
  for (int i = 0; i < lim; i++)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (l - 1));
  return lim;
}
void ntt(int f[], int lim, int opt) {
  for (int i = 0; i < lim; i++)
    if (i < rev[i]) swap(f[i], f[rev[i]]);
  for (int mid = 1; mid < lim; mid <<= 1) {
    int r =
        ksm(opt == 1 ? 3 : ((998244353 + 1) / 3), (998244353 - 1) / (mid * 2));
    for (int i = 0; i < lim; i += mid * 2)
      for (int j = 0, o = 1; j < mid; j++, o = 1ll * o * r % 998244353) {
        int x = f[i + j], y = 1ll * f[i + j + mid] * o % 998244353;
        f[i + j] = (x + y) % 998244353;
        f[i + j + mid] = (x - y + 998244353) % 998244353;
      }
  }
  if (opt == -1) {
    int r = ksm(lim);
    for (int i = 0; i < lim; i++) f[i] = 1ll * f[i] * r % 998244353;
  }
}
int p[800010], fac[800010], inv[800010], f[800010], g[800010], h[800010];
int main() {
  int n;
  long long m;
  scanf("%d%lld", &n, &m);
  for (int i = 0; i <= n; i++) scanf("%d", &p[i]);
  fac[0] = 1;
  for (int i = 1; i <= n + 1; i++) fac[i] = 1ll * fac[i - 1] * i % 998244353;
  inv[n + 1] = ksm(fac[n + 1]);
  for (int i = n; i >= 0; i--) inv[i] = 1ll * inv[i + 1] * (i + 1) % 998244353;
  for (int i = 0; i <= n; i++)
    f[i] = inv[i], g[i] = 1ll * fac[n - i] * p[n - i] % 998244353;
  int lim = get_rev(n);
  ntt(f, lim, 1), ntt(g, lim, 1);
  for (int i = 0; i < lim; i++) f[i] = 1ll * f[i] * g[i] % 998244353;
  ntt(f, lim, -1);
  for (int i = 0; i <= n; i++)
    h[i] = 1ll * inv[i] * f[n - i] % 998244353 * ksm(ksm(i + 1, m)) % 998244353;
  for (int i = 0; i <= n; i++) {
    f[i] = ((i & 1) ? 998244353 - 1 : 1) * 1ll * inv[i] % 998244353;
    g[i] = 1ll * fac[n - i] * h[n - i] % 998244353;
  }
  for (int i = n + 1; i < lim; i++) f[i] = g[i] = 0;
  ntt(f, lim, 1), ntt(g, lim, 1);
  for (int i = 0; i < lim; i++) f[i] = 1ll * f[i] * g[i] % 998244353;
  ntt(f, lim, -1);
  for (int i = 0; i <= n; i++)
    printf("%lld ", 1ll * inv[i] * f[n - i] % 998244353);
  return 0;
}
