#include <bits/stdc++.h>
using namespace std;
vector<long long> q;
long long i, j, n, k, m = 1000000007, ww = 1, a[20005], b[20005], c[20005],
                      w[20005];
bool flag;
bool otv(int n, bool sign) {
  long long t = n;
  for (long long j = 0; j < q.size(); j++) {
    if (t % q[j] == 0) {
      t /= q[j];
      if (sign)
        w[j]++;
      else
        w[j]--;
      j--;
    }
    if (t == 1) break;
  }
  if (t > 1) ww = (ww * t) % m;
  return 0;
}
long long ans() {
  long long i, j, first = 1;
  for (i = 0; i < q.size(); i++)
    for (j = 0; j < w[i]; j++) first = (first * q[i]) % m;
  first = (ww * first) % m;
  return first;
}
int main() {
  cin >> n >> k;
  for (i = 1; i <= n; i++) cin >> a[i];
  if (k == 0) {
    for (i = 1; i <= n; i++) cout << a[i] << " ";
    return 0;
  }
  for (i = 2; i <= 30000; i++) {
    flag = 0;
    for (j = 0; j < q.size(); j++)
      if (i % q[j] == 0) {
        flag = 1;
        break;
      }
    if (!flag) q.push_back(i);
  }
  b[1] = 1;
  k--;
  for (i = 2; i <= n; i++) {
    otv(i + k - 1, 1);
    otv(i - 1, 0);
    b[i] = ans();
  }
  for (i = 1; i <= n; i++)
    for (j = 0; j < i; j++) c[i] = ((a[i - j] * b[j + 1]) % m + c[i]) % m;
  for (i = 1; i <= n; i++) cout << c[i] << " ";
  return 0;
}
