#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define mk make_pair
#define v_sort(x) sort(x.begin(),x.end())
#define v_gsort(x) sort(x.begin(),x.end(),greater<int>())
#define v_find(x,num) find(x.begin(),x.end(),num)
#define PI 3.14159265
#define MOD 998244353
#define MOD1 1000000007

using namespace std;

const int N=3500,K=3500;
int dp[N][K];

void Solve(){
  int n,k;
  cin>>n>>k;
  vector<ll>a(n);
  for(int i=0;i<n;i++) cin>>a[i];
  for(int i=1;i<=n;i++) dp[i][0]=0,dp[i][1]=n-i+1;
  dp[n][0]=1;
  ll sm=0;
  for(int i=2;i<=k;i++){
    for(int j=n;j>=1;j--){
      for(int p=n;p>=j;p--) sm=(sm%MOD1+((p-j+1)*dp[p][i-1])%MOD1)%MOD1;
  //    sm+=(dp[j][1])%MOD1;
      dp[j][i]=sm;
      sm=0;
    }
  }
  ll ans=0;
  for(int i=1;i<=n;i++) cout<<dp[i][k]<<' ';
  cout<<'\n';
  for(int i=1;i<=n;i++){
    for(int j=1;j<=n;j++){
      int x=min({j,n-j+1,i});
      ans=(ans%MOD1+((((dp[i][k])/k)*x)*a[i])%MOD1)%MOD1;
    }
    cout<<ans<<'-';
  }
  cout<<ans<<'\n';
}

int main(){
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int t=1;
//  cin>>t;
  while(t--){
    Solve();
  }
  return 0;
}