#include using namespace std; const long long MOD = 998244353; long long mod_pow(long long a,long long e){ long long r=1; while(e){ if(e&1) r=r*a%MOD; a=a*a%MOD; e>>=1; } return r; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N,M; cin>>N>>M; vector A(N); for(int& x:A) cin>>x; /* 差分と w 計算 */ int n=N+1; vector D(N); D[0]=A[0]; for(int i=1;i fact(n+1,1),invf(n+1,1); for(int i=1;i<=n;i++) fact[i]=fact[i-1]*i%MOD; invf[n]=mod_pow(fact[n],MOD-2); for(int i=n;i>=1;i--) invf[i-1]=invf[i]*i%MOD; auto C=[&](int a,int b)->long long{ if(b<0||b>a) return 0; return fact[a]*invf[b]%MOD*invf[a-b]%MOD; }; long long choose_n2 = 1LL*n*(n-1)/2 % MOD; vector gpow(n+1); for(int k=0;k<=n;k++){ long long g = (choose_n2 - 2LL*k%MOD*(n-k))%MOD; if(g<0) g += MOD; gpow[k]=mod_pow(g,M); } long long ans=0; for(int k=0;k<=n;k++){ long long Kw=0; int up=min(k,w); for(int s0=0;s0<=up;s0++){ long long term = C(w,s0)*C(n-w,k-s0)%MOD; if(s0&1) Kw = (Kw - term + MOD)%MOD; else Kw = (Kw + term)%MOD; } ans = (ans + gpow[k]*Kw)%MOD; } long long inv2 = mod_pow(2,MOD-2); ans = ans * mod_pow(inv2,n) % MOD; cout<