#include <bits/stdc++.h>
using namespace std;
const int mo = 998244353, g = 3, N = 110000;
int n, G[30], nG[30], two[30];
int A[410000], B[410000], x[110000];
int quick(int k1, long long k2) {
  int k3 = 1;
  while (k2) {
    if (k2 & 1) k3 = 1ll * k3 * k1 % mo;
    k1 = 1ll * k1 * k1 % mo;
    k2 = k2 / 2;
  }
  return k3;
}
void fft(int *x, int n, int fl = 1) {
  for (int i = (n >> 1), j = 1; j < n; j++) {
    if (i < j) swap(x[i], x[j]);
    int k;
    for (k = (n >> 1); i & k; i ^= k, k >>= 1)
      ;
    i ^= k;
  }
  int now = 0;
  for (int m = 2; m <= n; m <<= 1) {
    int w;
    now++;
    if (fl == 1)
      w = G[now];
    else
      w = nG[now];
    for (int i = 0; i < n; i += m) {
      int cur = 1;
      for (int j = i; j < i + (m >> 1); j++) {
        int u = x[j], v = 1ll * x[j + (m >> 1)] * cur % mo;
        x[j] = (u + v) % mo;
        x[j + (m >> 1)] = (u - v + mo) % mo;
        cur = 1ll * cur * w % mo;
      }
    }
  }
}
long long m;
int inv[N], nI[N], I[N];
int main() {
  scanf("%d%lld", &n, &m);
  n++;
  int now = (mo - 1) / 2, ng = quick(g, mo - 2), len = 0;
  while (now % 2 == 0) {
    len++;
    G[len] = quick(g, now);
    nG[len] = quick(ng, now);
    two[len] = quick(1 << len, mo - 2);
    now >>= 1;
  }
  for (int i = 1; i <= n; i++) scanf("%d", &A[i]);
  len = 0;
  while ((1 << len) <= (n << 1)) len++;
  for (int i = 1; i <= n; i++) inv[i] = quick(i, mo - 2);
  I[0] = 1;
  for (int i = 1; i <= n; i++) I[i] = 1ll * I[i - 1] * i % mo;
  for (int i = 0; i <= n; i++) nI[i] = quick(I[i], mo - 2);
  for (int i = 1; i <= n; i++) A[i] = 1ll * A[i] * I[i - 1] % mo;
  for (int i = 0; i < n; i++) B[n - i] = nI[i];
  fft(A, 1 << len);
  fft(B, 1 << len);
  for (int i = 0; i < (1 << len); i++) B[i] = 1ll * B[i] * A[i] % mo;
  fft(B, 1 << len, -1);
  memset(A, 0x00, sizeof A);
  for (int i = 1; i <= n; i++) {
    int k = n - i + 1 + n;
    A[i] = 1ll * B[k] * two[len] % mo * nI[n - i] % mo;
  }
  memset(B, 0x00, sizeof B);
  for (int i = 1; i <= n; i++)
    A[i] = 1ll * A[i] * quick(inv[n - i + 1], m) % mo;
  for (int i = 1; i <= n; i++) {
    A[i] = 1ll * A[i] * I[n - i] % mo;
    if (i & 1) A[i] = (mo - A[i]) % mo;
  }
  for (int i = 0; i < n; i++) B[i] = nI[i];
  fft(A, 1 << len);
  fft(B, 1 << len);
  for (int i = 0; i < (1 << len); i++) B[i] = 1ll * B[i] * A[i] % mo;
  fft(B, 1 << len, -1);
  for (int i = 1; i <= n; i++) {
    int where = n - i + 1;
    int ans = 1ll * B[where] * two[len] % mo * nI[n - where] % mo;
    if (where & 1) ans = (mo - ans) % mo;
    printf("%d ", ans);
  }
  return 0;
}
