自己手推就能发现是个斜着的杨辉三角
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long ll;
const int P=1000000007;
const int N=5005;
int n,K;
ll a[N];
ll inv[N];
inline void Pre(){
inv[1]=1;
for (int i=2;i<=5000;i++) inv[i]=(P-P/i)*inv[P%i]%P;
}
inline ll C(ll n,ll m) {
ll ret=1;
for (int i=1;i<=m;i++)
ret=ret*inv[i]%P*(n-i+1)%P;
return ret;
}
ll c[N];
int main(){
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
Pre();
while (scanf("%d%d",&n,&K)==2){
for (int i=0;i<n;i++)
scanf("%lld",a+i);
if (!K){
for(int i=0;i<n;i++) printf("%lld\n",a[i]);
continue;
}
for (int i=0;i<n;i++)
c[i]=C(i+K-1,i);
for (int i=0;i<n;i++) {
ll ret=0ll;
for (int j=0;j<=i;j++)
ret=(ret+a[j]*c[i-j]%P)%P;
printf("%lld\n",ret);
}
}
return 0;
}