You've got an array a, consisting of n integers. The array elements are indexed from 1 to n. Let's determine a two step operation like that:

  1. First we build by the array a an array s of partial sums, consisting of n elements. Element number i (1 ≤ i ≤ n) of array s equals <image>. The operation x mod y means that we take the remainder of the division of number x by number y. 
  2. Then we write the contents of the array s to the array a. Element number i (1 ≤ i ≤ n) of the array s becomes the i-th element of the array a (ai = si). 



You task is to find array a after exactly k described operations are applied.

Input

The first line contains two space-separated integers n and k (1 ≤ n ≤ 2000, 0 ≤ k ≤ 109). The next line contains n space-separated integers a1, a2, ..., an — elements of the array a (0 ≤ ai ≤ 109).

Output

Print n integers — elements of the array a after the operations are applied to it. Print the elements in the order of increasing of their indexes in the array a. Separate the printed numbers by spaces.

Examples

Input

3 1
1 2 3


Output

1 3 6


Input

5 0
3 14 15 92 6


Output

3 14 15 92 6
import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class C {

	BufferedReader in;
	StringTokenizer st;
	PrintWriter out;

	String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(in.readLine());
		return st.nextToken();
	}

	int nextInt() throws Exception {
		return Integer.parseInt(next());
	}

	long nextLong() throws Exception {
		return Long.parseLong(next());
	}

	double nextDouble() throws Exception {
		return Double.parseDouble(next());
	}

	long mod = 1000 * 1000 * 1000 + 7;

	long rev(long x) {
		return BigInteger.valueOf(x).modInverse(BigInteger.valueOf(mod)).longValue();
	}

	void solve() throws Exception {
		long n = nextInt(), k = nextInt();

		long a[] = new long[(int) n];
		for (int i = 0; i < n; i++)
			a[i] = nextInt();

		if (k == 0) {
			for (int i = 0; i < n; i++)
				out.print(a[i] + " ");
			return;
		}

		long c[] = new long[(int) n];
		c[0] = 1;
		k--;
		for (int i = 1; i < n; i++) {
			c[i] = c[i - 1] * (k + i);
			c[i] %= mod;
			c[i] *= rev(i);
			c[i] %= mod;
		}

		long[] ans = new long[(int) n];
		for (int i = 0; i < n; i++)
			for (int j = 0; j <= i; j++) {
				ans[i] += a[j] * c[i - j];
				ans[i] %= mod;
			}

		for (int i = 0; i < n; i++)
			out.print(ans[i] + " ");
		//System.err.println(Arrays.toString(ans));

	}

	void run() {
		try {
			Locale.setDefault(Locale.US);
			in = new BufferedReader(new InputStreamReader(System.in));
			out = new PrintWriter(new OutputStreamWriter(System.out));
			solve();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		}
	}

	public static void main(String[] args) {
		new C().run();
	}

}
