#include<bits/stdc++.h>
using namespace std;
#define M 998244353
#define N 200000
typedef long long int LL;
LL fact[301],invfact[301],sum[301],sum2[301];
LL ap[N][301],p2[301];
LL mult(LL a, LL b){
    return a*b%M;
}
LL add(LL a, LL b){
    return (a+b+M)%M;
}
LL c(LL n, LL k){
    return mult(fact[n],mult(invfact[k],invfact[n-k]));
}
LL p(LL b, LL x){
    if(x==0) return 1LL;
    LL sub=p(b,x/2);
    sub=mult(sub,sub);
    if(x&1) sub=mult(sub,b);
    return sub;
}
int main(){
#ifndef ONLINE_JUDGE
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
#endif
    int n,k;
    cin>>n>>k;
    int a[n];
    for(LL i=0;i<n;i++){
        scanf("%d",a+i);
    }
    for(LL i=0;i<n;i++){
        ap[i][0]=1;
    }
    for(LL i=0;i<n;i++){
        for(LL j=1;j<=k;j++){
            ap[i][j]=mult(ap[i][j-1],a[i]);
        } 
    } 
    fact[0]=invfact[0]=1;
    for(LL i=1;i<301;i++){
        fact[i]=mult(fact[i-1],i),invfact[i]=p(fact[i],M-2);
    } 
    p2[0]=1;
    for(LL i=1;i<301;i++){
        p2[i]=mult(2,p2[i-1]);
    } 
    for(LL i=0;i<n;i++){
        for(LL j=0;j<=k;j++){
            sum[j]=add(sum[j],ap[i][j]);
        } 
    } 
    LL tinv=p(2,M-2);
    for(LL X=1;X<=k;X++){
        LL ans=0;
        for(LL x=0;x<=X;x++){
            ans=add(ans,mult(c(X,x),mult(sum[X-x],sum[x])));
        }
        ans=add(ans,-mult(p2[X],sum[X]));
        ans=mult(ans,tinv);
        cout<<ans<<"\n";
    }
}


#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

#define rep(i,n) for (long long i = 0; i < (n); ++i)
#define DIV 998244353
#define INF LONG_MAX/3
#define bit(n) (1LL<<(n))

template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};

ll memo1[305];
ll memo2[305];

long long kaidan[10000000];

void kaical(long long n){
	kaidan[0] = 1;
	for(long long i = 1; i < n; i++){
		kaidan[i] = kaidan[i-1] * i;
		kaidan[i] %= DIV;
	}
}

long long modpow(long long ori, long long po){
	long long res = 1;
	while(po > 0){
		if(po&1){
			res *= ori;
			res %= DIV;
		}
		ori *= ori;
		ori %= DIV;
		po >>= 1;
	}
	return res;
}


int main(){
	ll N, K;
	cin >> N >> K;
	vector<ll> A(N);
	rep(i, N) scanf("%lld", &A[i]);

	kaical(K+5);

	for(ll k = 0; k <= K; k++) {
		ll cur = 0;
		ll kai = modpow(kaidan[k], DIV-2);
		rep(i, N) {
			ll tmp = modpow(A[i], k);
			tmp *= kai;
			tmp %= DIV;
			cur += tmp;
			cur %= DIV;
		}
		memo1[k] = cur;

		cur = 0;
		rep(i, N) {
			cur -= modpow(2*A[i], k);
			cur += DIV;
			cur %= DIV;
		}
		memo2[k] = cur;
	}

	ll mm = modpow(2, DIV-2);
	for(ll X = 1; X <= K; X++) {
		ll ans = kaidan[X];
		
		//1こうめ
		ll tmp = 0;
		for(ll i = 0; i <= X; i++) {
			tmp += memo1[i] * memo1[X-i];
			tmp %= DIV;
		}
		ans *= tmp;
		ans %= DIV;


		ans += memo2[X];
		ans %= DIV;

		ans *= mm;
		ans %= DIV;
		cout << ans << endl;
	}
}
