#include <bits/stdc++.h>
using namespace std;
const int LOG = 18;
const int N = (1 << LOG);
const long long MOD = 998244353;
const long long W = 2192;
long long sum(long long a, long long b) {
  a += b;
  if (a >= MOD) a -= MOD;
  return a;
}
long long sub(long long a, long long b) {
  a -= b;
  if (a < 0) a += MOD;
  return a;
}
inline long long mult(long long a, long long b) { return (a * b) % MOD; }
long long bin_pow(long long a, long long n) {
  long long res = 1;
  for (; n; n >>= 1, a = mult(a, a))
    if (n & 1) res = mult(res, a);
  return res;
}
inline long long inv(long long a) { return bin_pow(a, MOD - 2); }
long long f[N], frev[N];
inline void init_Comba() {
  f[0] = 1;
  for (int i = 1; i < N; ++i) f[i] = mult(f[i - 1], i);
  frev[N - 1] = inv(f[N - 1]);
  for (int i = N - 2; i >= 0; --i) frev[i] = mult(frev[i + 1], i + 1);
}
long long C(long long n, long long k) {
  if (k < 0 || k > n) return 0;
  return mult(f[n], mult(frev[n - k], frev[k]));
}
long long w[N], F[2][N];
int rev[N + 5];
inline void init_FFT() {
  w[0] = 1;
  for (int i = 1; i < N; i++) w[i] = mult(w[i - 1], W);
  rev[0] = 0;
  for (int mask = 1; mask < N; mask++) {
    int k = 0;
    while (((mask >> k) & 1) == 0) k++;
    rev[mask] = rev[mask ^ (1 << k)] ^ (1 << (LOG - 1 - k));
  }
}
void oldFFT(long long* A, int k) {
  int L = (1 << k);
  for (int mask = 0; mask < L; ++mask) F[0][rev[mask] >> (LOG - k)] = A[mask];
  long long add;
  int t = 0, nt = 1, len;
  for (int lvl = 0; lvl < k; ++lvl) {
    len = (1 << lvl);
    for (int bl = 0; bl < L; bl += (len << 1)) {
      for (int i = 0; i < len; ++i) {
        add = mult(F[t][bl + len + i], w[i << (LOG - 1 - lvl)]);
        F[nt][bl + i] = sum(F[t][bl + i], add);
        F[nt][bl + len + i] = sub(F[t][bl + i], add);
      }
    }
    swap(t, nt);
  }
  for (int i = 0; i < L; ++i) A[i] = F[t][i];
}
void FFT(long long* A, int k) {
  int L = (1 << k);
  for (int mask = 0; mask < L; ++mask) {
    if (rev[mask] >> (LOG - k) > mask) swap(A[rev[mask] >> (LOG - k)], A[mask]);
  }
  long long add;
  int len;
  for (int lvl = 0; lvl < k; ++lvl) {
    len = (1 << lvl);
    for (int bl = 0; bl < L; bl += (len << 1)) {
      for (int i = 0; i < len; ++i) {
        add = mult(A[bl + len + i], w[i << (LOG - 1 - lvl)]);
        A[bl + i] = sum(A[bl + i], add);
        A[bl + len + i] = sub(A[bl + i], sum(add, add));
      }
    }
  }
}
int getLOG(int a) {
  int res = 0;
  while ((1 << res) < a) ++res;
  return res;
}
long long A[N], B[N];
long long p[N];
void multByMatrix(long long* p, int n) {
  int logN = getLOG(n + n + 2);
  int L = (1 << logN);
  long long revL = inv(L);
  for (int i = 0; i < L; ++i) A[i] = B[i] = 0;
  for (int i = 0; i <= n; ++i) {
    A[i] = mult(p[n - i], f[n - i]);
    B[i] = frev[i];
  }
  FFT(A, logN);
  FFT(B, logN);
  for (int i = 0; i < L; ++i) A[i] = mult(A[i], B[i]);
  FFT(A, logN);
  for (int i = 0; i < L; ++i) p[i] = mult(A[i], revL);
  reverse(p + 1, p + L);
  reverse(p, p + n + 1);
  for (int i = 0; i <= n; ++i) {
    if (i & 1) p[i] = MOD - p[i];
    p[i] = mult(p[i], frev[i]);
  }
}
int main() {
  init_Comba();
  init_FFT();
  int n;
  long long m;
  scanf("%d%lld", &n, &m);
  m = m % (MOD - 1);
  for (int i = 0; i <= n; ++i) scanf("%lld", p + i);
  multByMatrix(p, n);
  for (int i = 0; i <= n; ++i) p[i] = mult(p[i], bin_pow(inv(i + 1), m));
  multByMatrix(p, n);
  for (int i = 0; i <= n; ++i) printf("%lld ", p[i]);
}
