#include <bits/stdc++.h>
using namespace std;
const long long mod = 998244353;
const long long P = 998244353;
const int g = 3;
long long fac[100005], ifac[100005];
long long a[400005], b[400005], c[400005];
long long qpower(long long, long long);
long long inline inv(long long x) { return qpower(x, mod - 2); }
void NTT(long long *, int, int);
long long n, m;
void init() {
  fac[0] = 1;
  ifac[0] = 1;
  fac[0] = 1;
  ifac[1] = 1;
  for (int i = 1; i <= 100005 - 1; ++i)
    fac[i] = (long long)fac[i - 1] * i % mod;
  for (int i = 2; i <= 100005 - 1; ++i)
    ifac[i] = -(mod / i) * ifac[mod % i] % mod;
  for (int i = 2; i <= 100005 - 1; ++i) (ifac[i] *= ifac[i - 1]) %= mod;
}
signed main() {
  cin >> n >> m;
  init();
  for (int i = 0; i <= n; i++) {
    scanf("%lld", &a[n - i]);
    a[n - i] *= fac[i];
    a[n - i] %= mod;
    b[i] = ifac[i];
  }
  int len = 1;
  while (len < (n + 1) * 2) len <<= 1;
  NTT(a, len, 1);
  NTT(b, len, 1);
  for (int i = 0; i < len; i++) {
    b[i] *= a[i];
    b[i] %= mod;
  }
  NTT(b, len, -1);
  for (int i = 0; i <= n; i++) {
    b[n - i] *= qpower(qpower(i + 1, m), mod - 2);
    b[n - i] %= mod;
  }
  for (int i = n + 1; i < len; i++) b[i] = 0;
  NTT(b, len, 1);
  memset(a, 0, sizeof(a));
  for (int i = 0; i <= n; i++) {
    a[i] = ifac[i] * (i & 1 ? -1 : 1);
  }
  NTT(a, len, 1);
  for (int i = 0; i < len; i++) {
    a[i] *= b[i];
    a[i] %= mod;
  }
  NTT(a, len, -1);
  for (int i = 0; i <= n; ++i)
    printf("%lld ", (a[n - i] * ifac[i] % mod + mod) % mod);
}
long long qpower(long long a, long long p) {
  long long ans = 1;
  ((p %= (mod - 1)) += mod - 1) %= mod - 1;
  for (; p > 0; p >>= 1, (a *= a) %= mod)
    if (p & 1) (ans *= a) %= mod;
  return ans;
}
void NTT(long long *A, int len, int opt) {
  for (int i = 1, j = 0; i < len; ++i) {
    for (int k = len; ~j & k; j ^= (k >>= 1))
      ;
    if (i < j) std::swap(A[i], A[j]);
  }
  for (int h = 2; h <= len; h <<= 1) {
    long long wn = qpower(g, (mod - 1) / h * opt);
    for (int j = 0; j < len; j += h) {
      long long w = 1;
      for (int i = 0; i < h >> 1; ++i) {
        long long _t1 = A[i + j], _t2 = A[i + j + (h >> 1)] * w;
        A[i + j] = (_t1 + _t2) % mod;
        A[i + j + (h >> 1)] = (_t1 - _t2) % mod;
        (w *= wn) %= mod;
      }
    }
  }
  if (opt == -1)
    for (int i = 0, inv = -(mod - 1) / len; i < len; ++i) (A[i] *= inv) %= mod;
}
