#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void init(T &x) {
  x = 0;
  char ch = getchar();
  bool t = 0;
  for (; ch > '9' || ch < '0'; ch = getchar())
    if (ch == '-') t = 1;
  for (; ch >= '0' && ch <= '9'; ch = getchar())
    x = (x << 1) + (x << 3) + (ch - 48);
  if (t) x = -x;
  return;
}
const int mod = 998244353, G = 3, phi = 998244352;
template <class T>
inline void Inc(T &x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
template <class T>
inline void Dec(T &x, int y) {
  x -= y;
  if (x < 0) x += mod;
}
template <class T>
inline void Mod(T &x) {
  if (x >= mod)
    x -= mod;
  else if (x < 0)
    x += mod;
}
template <class T>
inline int fpow(int x, T k) {
  int ret = 1;
  for (; k; k >>= 1, x = (long long)x * x % mod)
    if (k & 1) ret = (long long)ret * x % mod;
  return ret;
}
const int N = 2e5 + 10;
int n;
long long m;
int A[N << 1], B[N << 1], rader[N << 1], fac[N], inv[N], finv[N], invn;
inline void NTT(int *A, int n, int f) {
  for (int i = 0; i < n; ++i)
    if (rader[i] > i) swap(A[i], A[rader[i]]);
  for (int i = 1; i < n; i <<= 1) {
    int W = fpow(G, phi / (i << 1));
    if (f) W = fpow(W, mod - 2);
    for (int p = i << 1, j = 0; j < n; j += p) {
      int w = 1;
      for (int k = 0; k < i; ++k, w = (long long)w * W % mod) {
        int X = A[j | k], Y = (long long)w * A[j | k | i] % mod;
        Inc(A[j | k], Y), A[j | k | i] = X, Dec(A[j | k | i], Y);
      }
    }
  }
  if (f)
    for (int i = 0; i < n; ++i) A[i] = (long long)A[i] * invn % mod;
  return;
}
int main() {
  init(n);
  init(m);
  fac[0] = finv[0] = inv[1] = 1;
  if (!n) {
    puts("1");
    return 0;
  }
  for (int i = 0; i <= n; ++i) {
    init(A[i]);
    if (i > 1) inv[i] = (long long)(mod - mod / i) * inv[mod % i] % mod;
    if (i > 0)
      fac[i] = (long long)fac[i - 1] * i % mod,
      finv[i] = (long long)finv[i - 1] * inv[i] % mod;
    A[i] = (long long)fac[i] * A[i] % mod;
    B[i] = finv[i];
  }
  m %= phi;
  reverse(B, B + 1 + n);
  int len = 1, L = (n << 1) + 1, up = -1;
  for (; len <= L; len <<= 1) ++up;
  for (int i = 1; i < len; ++i)
    rader[i] = (rader[i >> 1] >> 1) | ((i & 1) << up);
  invn = fpow(len, mod - 2);
  NTT(A, len, 0);
  NTT(B, len, 0);
  for (int i = 0; i < len; ++i) A[i] = (long long)A[i] * B[i] % mod;
  NTT(A, len, n);
  for (int i = 0; i < len; ++i) {
    if (i > n)
      A[i] = 0;
    else
      A[i] = (long long)A[i + n] * fpow(i + 1, (long long)(mod - 2) * m % phi) %
             mod;
  }
  memset(B, 0, sizeof(B));
  for (int i = 0; i <= n; ++i) B[i] = (i & 1) ? (mod - finv[i]) : finv[i];
  reverse(B, B + 1 + n);
  NTT(A, len, 0);
  NTT(B, len, 0);
  for (int i = 0; i < len; ++i) A[i] = (long long)A[i] * B[i] % mod;
  NTT(A, len, n);
  for (int i = 0; i <= n; ++i)
    A[i] = (long long)A[i + n] * finv[i] % mod, printf("%d ", A[i]);
  puts("");
  return 0;
}
