#include <bits/stdc++.h>
const int p = 998244353, N = 3e5 + 5;
long long P(long long x, long long y = p - 2) {
  long long z = 1;
  for (; y; y >>= 1, x = x * x % p)
    if (y & 1) z = z * x % p;
  return z;
}
int s[N], u[N], v[N];
class Polynomial {
  int f[N], g[N], r[N], t;
  void len(int x) {
    for (t = 1; t < x << 1; t <<= 1)
      ;
  }
  void pre(int x) {
    len(x);
    for (int i = 0; i < t; ++i) r[i] = r[i >> 1] >> 1 | (i & 1 ? t >> 1 : 0);
  }
  void dft(int l[], int x = 1) {
    int y, u, v;
    for (int i = 0; i < t; ++i)
      if (i < r[i]) std::swap(l[i], l[r[i]]);
    for (int i = 1; i < t; i <<= 1) {
      y = P(x > 0 ? 3 : 332748118, (p - 1) / (i << 1));
      for (int j = 0; j < t; j += i << 1)
        for (int k = 0, z = 1; k < i; ++k, z = (long long)z * y % p) {
          u = l[j + k], v = (long long)z * l[i + j + k] % p;
          l[j + k] = (u + v) % p, l[i + j + k] = (u - v + p) % p;
        }
    }
    if (x > 0) return;
    for (int i = 0, x = P(t); i < t; ++i) l[i] = (long long)l[i] * x % p;
  }
  void clear(int a[], int x) {
    for (int i = x; i < t; ++i) a[i] = 0;
  }
  void mul(int a[], int b[], int x) {
    pre(x);
    dft(a);
    dft(b);
    for (int i = 0; i < t; ++i) a[i] = (long long)a[i] * b[i] % p;
    dft(a, -1);
  }

 public:
  void work() {
    int n;
    long long m;
    scanf("%d%I64d", &n, &m);
    s[0] = v[0] = u[1] = 1;
    ++n;
    for (int i = 2; i <= n; ++i) u[i] = (long long)(p - p / i) * u[p % i] % p;
    for (int i = 1; i <= n; ++i)
      s[i] = (long long)s[i - 1] * i % p, v[i] = (long long)v[i - 1] * u[i] % p;
    for (int i = n; i--;)
      scanf("%d", &f[i]), f[i] = (long long)f[i] * s[n - i - 1] % p,
                          g[i] = v[i];
    mul(g, f, n);
    clear(g, n);
    clear(f, n);
    for (int i = n; i--;)
      f[i] = (long long)(i & 1 ? p - 1 : 1) * v[i] % p,
      g[i] = g[i] * P(u[n - i], m) % p;
    mul(f, g, n);
    for (int i = n; i--;) printf("%d ", (long long)f[i] * v[n - i - 1] % p);
  }
} A;
int main() {
  A.work();
  return 0;
}
