#include <bits/stdc++.h>
using namespace std;
const int N = 6e5, mod = 998244353;
int b[N], pw[N], n, prime_cnt, prime[N], rev[N], w[N], a[N], fac[N], ifac[N],
    inv[N], p[N], limn;
long long m;
int qpower(int a, int b) {
  int ans = 1;
  for (; b; b >>= 1, a = 1ll * a * a % mod)
    if (b & 1) ans = 1ll * ans * a % mod;
  return ans;
}
void make(int n) {
  pw[1] = 1;
  for (int i = 2; i <= n; i++) {
    if (!p[i]) prime[++prime_cnt] = i, pw[i] = qpower(i, mod - 1 - m);
    for (int j = 1; j <= prime_cnt && i * prime[j] <= n; j++) {
      int x = i * prime[j];
      pw[x] = 1ll * pw[i] * pw[prime[j]] % mod;
      if (i % prime[j] == 0) break;
    }
  }
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
  inv[1] = 1;
  for (int i = 2; i <= n; i++)
    inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
  ifac[0] = 1;
  for (int i = 1; i <= n; i++) ifac[i] = 1ll * ifac[i - 1] * inv[i] % mod;
}
void prework(int n) {
  limn = 1;
  while (limn <= n) limn <<= 1;
  for (int i = 1; i < limn; i++)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) ? (limn >> 1) : 0);
  for (int i = 1; i < limn; i <<= 1) {
    int omg = qpower(3, (mod - 1) / (i << 1));
    w[i] = 1;
    for (int j = 1; j < i; j++) w[i + j] = 1ll * w[i + j - 1] * omg % mod;
  }
}
void DFT(int a[]) {
  static unsigned long long tmp[N];
  for (int i = 0; i < limn; i++) tmp[i] = a[rev[i]];
  for (int i = 1; i < limn; i <<= 1)
    for (int j = 0; j < limn; j += i << 1)
      for (int k = 0; k < i; k++) {
        unsigned t = w[i + k] * tmp[i + j + k] % mod;
        tmp[i + j + k] = tmp[j + k] + mod - t, tmp[j + k] += t;
      }
  for (int i = 0; i < limn; i++) a[i] = tmp[i] % mod;
}
void IDFT(int a[]) {
  reverse(a + 1, a + limn);
  DFT(a);
  int iv = mod - (mod - 1) / limn;
  for (int i = 0; i < limn; i++) a[i] = 1ll * a[i] * iv % mod;
}
int main() {
  scanf("%d%lld", &n, &m);
  m %= mod - 1;
  make(n + 1);
  prework(n << 1);
  for (int i = 0; i <= n; i++)
    scanf("%d", a + i), a[i] = 1ll * a[i] * fac[i] % mod;
  copy(ifac, ifac + n + 1, b);
  reverse(b, b + n + 1);
  DFT(a), DFT(b);
  for (int i = 0; i < limn; i++) a[i] = 1ll * a[i] * b[i] % mod;
  IDFT(a);
  copy(a + n, a + (n << 1 | 1), a);
  fill(a + n + 1, a + limn, 0);
  for (int i = 0; i <= n; i++) a[i] = 1ll * a[i] * pw[i + 1] % mod;
  fill(b, b + limn, 0);
  for (int i = 0; i <= n; i++) b[i] = (i & 1) ? mod - ifac[i] : ifac[i];
  reverse(b, b + n + 1);
  DFT(a), DFT(b);
  for (int i = 0; i < limn; i++) a[i] = 1ll * a[i] * b[i] % mod;
  IDFT(a);
  copy(a + n, a + (n << 1 | 1), a);
  for (int i = 0; i <= n; i++) a[i] = 1ll * a[i] * ifac[i] % mod;
  for (int i = 0; i <= n; i++) printf("%d ", a[i]);
  puts("");
}
