#include using namespace std; using ll = long long; #include using namespace atcoder; using mint = modint998244353; #include vector inv_table; vector fps_inv(vector f , int d = -1){ assert(f[0].val() != 0); int N = (int)f.size(); if(d == -1)d = N; vector g(1); g[0] = mint(1) / f[0]; for(int i = 0; (1< tmp(len); for(int j = 0; j < min(N , len); j++)tmp[j] = -f[j]; tmp = convolution(g , tmp); tmp[0] += 2; g = convolution(g , tmp); g.resize(len); } return g; } vector fps_diff(vector f , int d = -1){ int N = (int)f.size(); if(d == -1)d = N-1; vector g(d); for(int i = 1; i < min(d , N); i++){ g[i-1] = f[i] * i; } return g; } vector fps_integral(vector f , int d = -1){ int N = (int)f.size(); if(d == -1)d = N; vector g(d); for(int i = 0; i < d-1; i++){ g[i+1] = f[i] * inv_table[i+1]; } return g; } vector fps_log(vector f , int d = -1){ assert(f[0].val() == 1); int N = (int)f.size(); if(d == -1)d = N; vector f_p = fps_diff(f , d); vector g = convolution(f_p , fps_inv(f , d)); g.resize(d); g = fps_integral(g , d); g.resize(d); return g; } vector fps_exp(vector f , int d = -1){ assert(f[0].val() == 0); int N = (int)f.size(); if(d == -1)d = N; vector g(1); g[0] = 1; for(int i = 0; (1< tmp = fps_log(g , d); tmp.resize(len); for(int j = 0; j < len; j++)tmp[j] = f[j] - tmp[j]; tmp[0] += 1; g = convolution(g , tmp); g.resize(len); } return g; } // Σ(A_i)^j (j = 0,..,K-1) vector fps_powers_sum(vector A , int K){ int N = (int)A.size(); vector> f(N); for(int i = 0; i < N; i++){ f[i] = {1 , -A[i]}; } queue q; for(int i = 0; i < N; i++)q.push(i); while(q.size() > 1){ int x = q.front(); q.pop(); int y = q.front(); q.pop(); if(x > y)swap(x , y); f[x] = convolution(f[x] , f[y]); q.push(x); } f[0].resize(K); vector ret = fps_log(f[0] , K); for(int i = 1; i < K; i++){ ret[i] = -ret[i] * i; } ret[0] = N; return ret; } int main(){ int N; cin >> N; int K; cin >> K; vector A(N); for(int i = 0; i < N; i++){ int a; cin >> a; A[i] = a; } inv_table.resize(K+2); for(int i = 1; i <= K+1; i++)inv_table[i] = mint(1) / i; vector ans = fps_powers_sum(A , K+1); for(int i = 1; i <= K; i++)cout << ans[i].val() << ' '; cout << endl; }