#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<cmath> using namespace std; typedef long long ll; ll n, m; ll h[1005]; const ll mod = 1e9+7; int cmb[1005][1005]; void getc() { for(int i=0;i<1005;i++) { cmb[i][0] = cmb[i][i] = 1; for(int j = 1;j<i;j++) { cmb[i][j] = cmb[i-1][j]+cmb[i-1][j-1]; cmb[i][j]%=mod; } } } ll power(ll a, ll k) { ll p,q; p = a%mod; q = 1; while(k!=1) { if(k & 1) { k--; q = ((p%mod)*(q%mod))%mod; } else { k/=2; p = ((p%mod)*(p%mod))%mod; } } return ((p%mod)*(q%mod))%mod; } int main() { int t; scanf("%d",&t); getc(); while(t--) { scanf("%lld%lld",&n,&m); for(int i=0;i<n;i++) { scanf("%lld",&h[i]); ll tmp; tmp = h[i]/6; if(h[i]%6>0)tmp++; h[i] = tmp; } ll tmp2[1005],tmp3[1005]; tmp2[0] =tmp3[m] = 1; for(int j = 1;j<=m;j++) { //tmp2[j] = (tmp2[j-1]*(m-j+1)/j)%mod; tmp3[m-j] = (tmp3[m-j+1]*(n-1))%mod; } ll tmp; tmp = power(n,m); tmp = power(tmp,1e9+5); for(int i=0;i<n;i++) { ll sum = 0; for(int j = m;j>=h[i];j--) { //sum+=(tmp2[j]*tmp3[j])%mod; sum+=(tmp3[j]*cmb[m][j])%mod; sum%=mod; } h[i]=(sum*tmp)%mod; printf("%lld",h[i]); if(i==n-1) printf("\n"); else printf(" "); } } } |
Double click to view unformatted code.