#include <bits/stdc++.h>
using namespace std;
const int N = 262144 + 10;
const long long mod = 998244353;
inline long long po(long long a, long long p) {
  long long r = 1;
  for (; p; p >>= 1, a = a * a % mod)
    if (p & 1) r = r * a % mod;
  return r;
}
int n;
int rv[N];
long long rt[2][22];
inline void pre() {
  for (int i = 1; i < 262144; i++) rv[i] = (rv[i >> 1] >> 1) | ((i & 1) << 17);
  for (int i = 1, t = ((mod - 1) >> 1); i <= 20; i++, t >>= 1)
    rt[0][i] = po(3, t);
  for (int i = 1, t = ((mod - 1) >> 1); i <= 20; i++, t >>= 1)
    rt[1][i] = po(332748118, t);
}
inline void ntt(long long* a, int len, int d, int o) {
  for (int i = 1; i < len; i++)
    if (i < rv[i]) swap(a[i], a[rv[i]]);
  for (int k = 1, j = 1; k < len; k <<= 1, j++)
    for (int s = 0; s < len; s += (k << 1))
      for (int i = s, w = 1; i < s + k; i++, w = w * rt[o][j] % mod) {
        long long a1 = a[i + k] * w % mod;
        a[i + k] = a[i] + mod - a1;
        (a[i + k] = ((a[i + k] > mod) ? a[i + k] - mod : a[i + k]));
        a[i] += a1;
        (a[i] = ((a[i] > mod) ? a[i] - mod : a[i]));
      }
  if (o) {
    long long iv = po(len, mod - 2);
    for (int i = 0; i < len; i++) (a[i] *= iv) %= mod;
  }
}
long long f[N];
long long g[N];
long long fac[N];
long long ifac[N];
long long m;
int main() {
  pre();
  scanf("%d%I64d", &n, &m);
  for (int i = 0; i <= n; i++) scanf("%I64d", &f[i]);
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = (fac[i - 1] * i) % mod;
  ifac[0] = ifac[1] = 1;
  for (int i = 2; i <= n; i++) ifac[i] = (mod - mod / i) * ifac[mod % i] % mod;
  for (int i = 1; i <= n; i++) (ifac[i] *= ifac[i - 1]) %= mod;
  for (int i = 0; i <= n; i++) (f[i] *= fac[i]) %= mod;
  reverse(f, f + n + 1);
  for (int i = 0; i <= n; i++) g[i] = ifac[i];
  ntt(g, 262144, 18, 0);
  ntt(f, 262144, 18, 0);
  for (int i = 0; i < 262144; i++) (f[i] *= g[i]) %= mod;
  ntt(f, 262144, 18, 1);
  reverse(f, f + n + 1);
  for (int i = n + 1; i < 262144; i++) f[i] = 0;
  for (int i = 0; i <= n; i++) (f[i] *= ifac[i]) %= mod;
  for (int i = 0; i <= n; i++) (f[i] *= po(po(i + 1, mod - 2), m)) %= mod;
  for (int i = 0; i <= n; i++)
    f[i] = (i & 1) ? (mod - fac[i]) * f[i] % mod : fac[i] * f[i] % mod;
  reverse(f, f + n + 1);
  ntt(f, 262144, 18, 0);
  for (int i = 0; i < 262144; i++) (f[i] *= g[i]) %= mod;
  ntt(f, 262144, 18, 1);
  reverse(f, f + n + 1);
  for (int i = 0; i <= n; i++)
    f[i] = (i & 1) ? (mod - ifac[i]) * f[i] % mod : ifac[i] * f[i] % mod;
  for (int i = 0; i <= n; i++) printf("%I64d ", f[i]);
  printf("\n");
  return 0;
}
