#include <bits/stdc++.h>
using namespace std;
inline int read() {
  register int X = 0;
  register char ch = 0;
  while (ch < 48 || ch > 57) ch = getchar();
  while (ch >= 48 && ch <= 57) X = X * 10 + (ch ^ 48), ch = getchar();
  return X;
}
long long powM(long long a, int t = 998244353 - 2) {
  long long ans = 1;
  while (t) {
    if (t & 1) ans = ans * a % 998244353;
    a = a * a % 998244353;
    t >>= 1;
  }
  return ans;
}
int r[135000 << 2];
long long invG = powM(3), fac[135000], inv[135000];
void NTT(long long *f, bool op, int n) {
  for (int i = 0; i < n; i++)
    if (r[i] < i) swap(f[r[i]], f[i]);
  for (int len = 1; len < n; len <<= 1) {
    int w = powM(op == 1 ? 3 : invG, (998244353 - 1) / len / 2);
    for (int p = 0; p < n; p += len + len) {
      long long buf = 1;
      for (int i = p; i < p + len; i++) {
        int sav = f[i + len] * buf % 998244353;
        f[i + len] = f[i] - sav;
        if (f[i + len] < 0) f[i + len] += 998244353;
        f[i] = f[i] + sav;
        if (f[i] >= 998244353) f[i] -= 998244353;
        buf = buf * w % 998244353;
      }
    }
  }
}
long long g[135000 << 1];
void times(long long *f, long long *gg, int len, int lim) {
  int m = len + len, n;
  for (int i = 0; i < len; i++) g[i] = gg[i];
  for (n = 1; n < m; n <<= 1)
    ;
  for (int i = len; i < n; i++) g[i] = 0;
  for (int i = 0; i < n; i++) r[i] = (r[i >> 1] >> 1) | ((i & 1) ? n >> 1 : 0);
  NTT(f, 1, n);
  NTT(g, 1, n);
  for (int i = 0; i < n; ++i) f[i] = f[i] * g[i] % 998244353;
  NTT(f, 0, n);
  long long invn = powM(n);
  for (int i = 0; i < lim; ++i) f[i] = f[i] * invn % 998244353;
  for (int i = lim; i < n; ++i) f[i] = 0;
}
long long f[135000 << 1], p[135000 << 1], m;
int n;
int main() {
  n = read() + 1;
  scanf("%I64d", &m);
  m %= (998244353 - 1);
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % 998244353;
  inv[n] = powM(fac[n]);
  for (int i = n; i; i--) inv[i - 1] = inv[i] * i % 998244353;
  for (int i = 0; i < n; i++) f[i] = read();
  for (int i = 0; i < n; i++) p[n - i - 1] = f[i] * fac[i] % 998244353;
  for (int i = 0; i < n; i++) f[i] = inv[i] % 998244353;
  times(p, f, n, n);
  for (int i = 0; i < n; i++) f[n - i - 1] = p[i] * inv[n - i - 1] % 998244353;
  for (int i = 0; i < n; i++)
    f[i] = f[i] * powM(i + 1, 998244353 - 1 - m) % 998244353;
  for (int i = 0; i < n; i++)
    if (i & 1)
      p[n - i - 1] = 998244353 - (f[i] * fac[i] % 998244353);
    else
      p[n - i - 1] = f[i] * fac[i] % 998244353;
  for (int i = 0; i < n; i++) f[i] = inv[i] % 998244353;
  times(p, f, n, n);
  for (int i = 0; i < n; i++) f[n - i - 1] = p[i] * inv[n - i - 1] % 998244353;
  for (int i = 0; i < n; i++)
    printf("%I64d ", (i & 1) ? (998244353 - f[i]) % 998244353 : f[i]);
  puts("");
  return 0;
}
