#include <bits/stdc++.h>
using namespace std;
inline int read_int() {
  int t = 0;
  bool sign = false;
  char c = getchar();
  while (!isdigit(c)) {
    sign |= c == '-';
    c = getchar();
  }
  while (isdigit(c)) {
    t = (t << 1) + (t << 3) + (c & 15);
    c = getchar();
  }
  return sign ? -t : t;
}
inline long long read_LL() {
  long long t = 0;
  bool sign = false;
  char c = getchar();
  while (!isdigit(c)) {
    sign |= c == '-';
    c = getchar();
  }
  while (isdigit(c)) {
    t = (t << 1) + (t << 3) + (c & 15);
    c = getchar();
  }
  return sign ? -t : t;
}
inline void write(long long x) {
  register char c[21], len = 0;
  if (!x) return putchar('0'), void();
  if (x < 0) x = -x, putchar('-');
  while (x) c[++len] = x % 10, x /= 10;
  while (len) putchar(c[len--] + 48);
}
inline void space(long long x) { write(x), putchar(' '); }
inline void enter(long long x) { write(x), putchar('\n'); }
const int MAXN = 1e5 + 5, Mod = 998244353;
int quick_pow(int a, int b) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = 1LL * ans * a % Mod;
    a = 1LL * a * a % Mod;
    b >>= 1;
  }
  return ans;
}
namespace Poly {
const int G = 3;
int rev[MAXN << 2], Wn[30][2];
void init() {
  int m = Mod - 1, lg2 = 0;
  while (m % 2 == 0) m >>= 1, lg2++;
  Wn[lg2][1] = quick_pow(G, m);
  Wn[lg2][0] = quick_pow(Wn[lg2][1], Mod - 2);
  while (lg2) {
    m <<= 1, lg2--;
    Wn[lg2][0] = 1LL * Wn[lg2 + 1][0] * Wn[lg2 + 1][0] % Mod;
    Wn[lg2][1] = 1LL * Wn[lg2 + 1][1] * Wn[lg2 + 1][1] % Mod;
  }
}
int build(int k) {
  int n, pos = 0;
  while ((1 << pos) <= k) pos++;
  n = 1 << pos;
  for (int i = (0); i < (n); ++i)
    rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (pos - 1));
  return n;
}
void NTT(int *f, int n, bool type) {
  for (int i = (0); i < (n); ++i)
    if (i < rev[i]) swap(f[i], f[rev[i]]);
  int t1, t2;
  for (int i = 1, lg2 = 0; i < n; i <<= 1, lg2++) {
    int w = Wn[lg2 + 1][type];
    for (int j = 0; j < n; j += (i << 1)) {
      int cur = 1;
      for (int k = (j); k < (j + i); ++k) {
        t1 = f[k], t2 = 1LL * cur * f[k + i] % Mod;
        f[k] = (t1 + t2) % Mod, f[k + i] = (t1 - t2) % Mod;
        cur = 1LL * cur * w % Mod;
      }
    }
  }
  if (!type) {
    int div = quick_pow(n, Mod - 2);
    for (int i = (0); i < (n); ++i) f[i] = (1LL * f[i] * div % Mod + Mod) % Mod;
  }
}
void Mul(int *f, int _n, int *g, int _m, int xmod = 0) {
  int n = build(_n + _m - 2);
  for (int i = (_n); i < (n); ++i) f[i] = 0;
  for (int i = (_m); i < (n); ++i) g[i] = 0;
  NTT(f, n, true);
  NTT(g, n, true);
  for (int i = (0); i < (n); ++i) f[i] = 1LL * f[i] * g[i] % Mod;
  NTT(f, n, false);
  if (xmod)
    for (int i = (xmod); i < (n); ++i) f[i] = 0;
}
void Inv(const int *f, int *g, int _n) {
  static int temp[MAXN << 2];
  if (_n == 1) return g[0] = quick_pow(f[0], Mod - 2), void();
  Inv(f, g, (_n + 1) >> 1);
  int n = build((_n - 1) << 1);
  for (int i = ((_n + 1) >> 1); i < (n); ++i) g[i] = 0;
  for (int i = (0); i < (_n); ++i) temp[i] = f[i];
  for (int i = (_n); i < (n); ++i) temp[i] = 0;
  NTT(g, n, true);
  NTT(temp, n, true);
  for (int i = (0); i < (n); ++i)
    g[i] = (2 - 1LL * temp[i] * g[i] % Mod) * g[i] % Mod;
  NTT(g, n, false);
  for (int i = (_n); i < (n); ++i) g[i] = 0;
}
}  // namespace Poly
int a[MAXN << 2], b[MAXN << 2], c[MAXN << 2], frac[MAXN], invfrac[MAXN];
int main() {
  Poly::init();
  frac[0] = 1;
  for (int i = (1); i < (MAXN); ++i) frac[i] = 1LL * frac[i - 1] * i % Mod;
  invfrac[MAXN - 1] = quick_pow(frac[MAXN - 1], Mod - 2);
  for (int i = MAXN - 1; i; i--) invfrac[i - 1] = 1LL * invfrac[i] * i % Mod;
  int n = read_int(), m = read_LL() % (Mod - 1) * (Mod - 2) % (Mod - 1);
  for (int i = (0); i <= (n); ++i) a[n - i] = 1LL * read_int() * frac[i] % Mod;
  for (int i = (0); i <= (n); ++i) b[i] = invfrac[i];
  Poly::Mul(a, n + 1, b, n + 1);
  for (int i = (0); i <= (n); ++i)
    a[i] = 1LL * a[i] * quick_pow(n - i + 1, m) % Mod, b[i] = invfrac[i];
  Poly::Inv(b, c, n + 1);
  Poly::Mul(a, n + 1, c, n + 1);
  for (int i = (0); i <= (n); ++i) a[i] = 1LL * a[i] * invfrac[n - i] % Mod;
  reverse(a, a + n + 1);
  for (int i = (0); i <= (n); ++i) space(a[i]);
  return 0;
}
