#include <bits/stdc++.h>
using namespace std;
const int maxn = (1 << 19) + 5;
const int LIMIT = 1 << 19;
long long int n, k, a[maxn], tmp1[maxn], tmp2[maxn];
long long int pre[maxn], prei[maxn], fac[maxn], inv[maxn];
inline long long int qpow(long long int x, long long int y) {
  long long int ans = 1, base = x;
  while (y) {
    if (y & 1) ans = ans * base % 998244353;
    base = base * base % 998244353;
    y >>= 1;
  }
  return ans;
}
inline void init() {
  pre[0] = prei[0] = 1;
  pre[1] = qpow(3, (998244353 - 1) / LIMIT);
  prei[1] = qpow((998244353 + 1) / 3, (998244353 - 1) / LIMIT);
  for (int i = 2; i < LIMIT; ++i)
    pre[i] = pre[i - 1] * pre[1] % 998244353,
    prei[i] = prei[i - 1] * prei[1] % 998244353;
  fac[0] = 1;
  for (int i = 1; i <= n; ++i) fac[i] = fac[i - 1] * i % 998244353;
  for (int i = 0; i <= n; ++i) inv[i] = qpow(fac[i], 998244353 - 2);
}
int r[maxn];
inline void DFT(long long int* A, int limit, long long int* omg) {
  for (int i = 1; i < limit; ++i) {
    r[i] = (r[i >> 1] >> 1) | ((i & 1) ? (limit >> 1) : 0);
    if (i < r[i]) swap(A[i], A[r[i]]);
  }
  for (int len = 2; len <= limit; len <<= 1)
    for (int i = 0; i < limit; i += len)
      for (int j = 0, p1 = i, p2 = i + len / 2; j < len / 2; ++j, ++p1, ++p2) {
        long long int a = A[p1], b = A[p2] * omg[LIMIT / len * j] % 998244353;
        A[p1] = a + b >= 998244353 ? a + b - 998244353 : a + b;
        A[p2] = a - b < 0 ? a - b + 998244353 : a - b;
      }
}
inline void FFT(long long int* A, long long int* B, int len1, int len2,
                long long int* to) {
  int limit = 1;
  while (limit < len1 + len2 + 1) limit <<= 1;
  for (int i = 0; i < limit; ++i) tmp1[i] = tmp2[i] = 0;
  for (int i = 0; i <= len1; ++i) tmp1[i] = A[i];
  for (int i = 0; i <= len2; ++i) tmp2[i] = B[i];
  DFT(tmp1, limit, pre);
  DFT(tmp2, limit, pre);
  for (int i = 0; i < limit; ++i) tmp1[i] = tmp1[i] * tmp2[i] % 998244353;
  DFT(tmp1, limit, prei);
  long long int base = qpow(limit, 998244353 - 2);
  for (int i = 0; i <= len1 + len2; ++i) to[i] = tmp1[i] * base % 998244353;
}
long long int A[maxn], B[maxn], C[maxn], ans[maxn];
inline void solve() {
  for (int i = 0; i <= n; ++i)
    A[i] = inv[i], B[i] = a[n - i] * fac[n - i] % 998244353;
  FFT(A, B, n, n, C);
  for (int i = 0; i <= n; ++i)
    ans[i] = C[n - i] * inv[i] % 998244353 *
             qpow(qpow(i + 1, 998244353 - 2), k) % 998244353;
  for (int i = 0; i <= n; ++i)
    B[i] = (ans[n - i] * fac[n - i] % 998244353 * qpow(-1, n - i) % 998244353 +
            998244353) %
           998244353;
  FFT(A, B, n, n, C);
  for (int i = 0; i <= n; ++i)
    cout << (C[n - i] % 998244353 * inv[i] % 998244353 * qpow(-1, i) %
                 998244353 +
             998244353) %
                998244353
         << " ";
  cout << endl;
}
int main() {
  ios::sync_with_stdio(false);
  init();
  cin >> n >> k;
  for (int i = 0; i <= n; ++i) cin >> a[i];
  init();
  solve();
  return 0;
}
