#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
const double pi = acos(0) * 2;
template <class T>
inline T abs1(T a) {
  return a < 0 ? -a : a;
}
template <class T>
inline T max1(T a, T b) {
  return a > b ? a : b;
}
template <class T>
inline T min1(T a, T b) {
  return a < b ? a : b;
}
template <class T>
inline T gcd1(T a, T b) {
  if (a < b) swap(a, b);
  if (a % b == 0) return b;
  return gcd1(b, a % b);
}
template <class T>
inline T lb(T num) {
  return num & (-num);
}
template <class T>
inline int bitnum(T num) {
  int ans = 0;
  while (num) {
    num -= lb(num);
    ans++;
  }
  return ans;
}
void gcd(long long num1, long long num2, long long &a, long long &b) {
  long long i, j;
  if (!(num1 % num2)) {
    a = 1;
    b = -num1 / num2 + 1;
    return;
  }
  gcd(num2, num1 % num2, i, j);
  a = j;
  b = i - j * (num1 / num2);
}
template <class c>
inline c div1(c bei, c chu) {
  long long a, b;
  gcd(mod, chu, a, b);
  b *= bei;
  if (b < 0)
    b = -((-b) % mod) + mod;
  else
    b = b % mod;
  return b;
}
const int maxn = 2100;
long long n, nro;
long long orig[maxn];
long long mult[maxn];
int main() {
  scanf("%I64d%I64d", &n, &nro);
  for (int i = 0; i < n; i++) scanf("%I64d", orig + i);
  if (nro == 0) {
    for (int i = 0; i < n; i++) printf("%I64d ", orig[i]);
    return 0;
  } else if (nro == 1)
    for (int i = 0; i < n; i++) mult[i] = 1;
  else {
    mult[0] = 1;
    mult[1] = nro;
    for (long long i = 2; i < n; i++) {
      mult[i] = (mult[i - 1] * (nro + i - 1)) % mod;
      mult[i] = div1(mult[i], i);
    }
  }
  long long ans[maxn];
  memset(ans, 0, sizeof(ans));
  for (int i = 0; i < n; i++)
    for (int j = 0; j <= i; j++) {
      ans[i] += (orig[j] * mult[i - j]) % mod;
      ans[i] %= mod;
    }
  for (int i = 0; i < n; i++) printf("%I64d ", ans[i]);
  return 0;
}
