/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
using namespace std;
const int Maxn = 1e4 + 1, Mod = 1e9 + 7;
int fact[Maxn];
int ifact[Maxn];
int inv[Maxn];
template<typename T, typename T1>
T mod(T x, T1 p) {
x %= p;
if (x < 0)
x += p;
return x;
}
// x must be relatively prime to p
template<typename T>
T inverse(T x, T p) {
x = mod(x, p);
if (x == 1)
return x;
return mod((1LL * (-p / x) * (inv[p % x] % p)) , p);
// Since inverse of p % x is already calculated.
}
int NcR(int n, int r) {
int ret = (1LL * ifact[n - r] * ifact[r]) % Mod ;
ret = (1LL * ret * fact[n]) % Mod;
return ret;
}
int power(int x, int y, int p)
{
int res = 1; // Initialize result
x = x % p; // Update x if it is more than or
// equal to p
while (y > 0)
{
// If y is odd, multiply x with result
if (y & 1)
res = (res*x) % p;
// y must be even now
y = y>>1; // y = y/2
x = (x*x) % p;
}
return res;
}
int main()
{
fact[0] = 1;
for(int i = 1; i < Maxn; i++) {
fact[i] = 1LL * fact[i - 1] * i % Mod;
}
ifact[0] = 1;
for(int i = 1; i < Maxn; i++) {
inv[i] = inverse(i, Mod);
ifact[i] = (1LL * ifact[i - 1] * inv[i]) % Mod;
}
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++)
cin>>arr[i];
int ans[n];
for(int i=0;i<n;i++)
{
int c=0;
for(int j=i;j<n;j++)
{
int d =power(2,n-1-j,Mod);
d=(d*arr[j])%Mod;
if(i>0 and j>i)
{
d=(d*(int)NcR(j,i))%Mod;
}
c=(c+d)%Mod;
}
ans[i]=c;
}
for(int i=0;i<n;i++)
cout<<ans[i]<<" ";
cout<<endl;
}
return 0;
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25saW5lIEMrKyBDb21waWxlci4KICAgICAgICAgICAgICAgQ29kZSwgQ29tcGlsZSwgUnVuIGFuZCBEZWJ1ZyBDKysgcHJvZ3JhbSBvbmxpbmUuCldyaXRlIHlvdXIgY29kZSBpbiB0aGlzIGVkaXRvciBhbmQgcHJlc3MgIlJ1biIgYnV0dG9uIHRvIGNvbXBpbGUgYW5kIGV4ZWN1dGUgaXQuCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE1heG4gPSAxZTQgKyAxLCBNb2QgPSAxZTkgKyA3OwppbnQgZmFjdFtNYXhuXTsKIGludCBpZmFjdFtNYXhuXTsKIGludCBpbnZbTWF4bl07CnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFQxPgpUIG1vZChUIHgsIFQxIHApIHsKICAgIHggJT0gcDsKICAgIGlmICh4IDwgMCkKICAgICAgICB4ICs9IHA7CiAgICByZXR1cm4geDsKfQogCgogCi8vIHggbXVzdCBiZSByZWxhdGl2ZWx5IHByaW1lIHRvIHAKdGVtcGxhdGU8dHlwZW5hbWUgVD4KVCBpbnZlcnNlKFQgeCwgVCBwKSB7CiAgICB4ID0gbW9kKHgsIHApOwogICAgaWYgKHggPT0gMSkKICAgICAgICByZXR1cm4geDsKICAgIHJldHVybiBtb2QoKDFMTCAqICgtcCAvIHgpICogKGludltwICUgeF0gJSBwKSkgLCBwKTsgCiAgICAvLyBTaW5jZSBpbnZlcnNlIG9mIHAgJSB4IGlzIGFscmVhZHkgY2FsY3VsYXRlZC4KfQogCgppbnQgTmNSKGludCBuLCBpbnQgcikgewogICAgaW50IHJldCA9ICgxTEwgKiBpZmFjdFtuIC0gcl0gKiBpZmFjdFtyXSkgJSBNb2QgOwoJcmV0ID0gKDFMTCAqIHJldCAqIGZhY3Rbbl0pICUgTW9kOwogICAgcmV0dXJuIHJldDsKfQppbnQgcG93ZXIoaW50IHgsIGludCB5LCBpbnQgcCkgCnsgCiAgICBpbnQgcmVzID0gMTsgICAgICAvLyBJbml0aWFsaXplIHJlc3VsdCAKICAKICAgIHggPSB4ICUgcDsgIC8vIFVwZGF0ZSB4IGlmIGl0IGlzIG1vcmUgdGhhbiBvciAgCiAgICAgICAgICAgICAgICAvLyBlcXVhbCB0byBwIAogIAogICAgd2hpbGUgKHkgPiAwKSAKICAgIHsgCiAgICAgICAgLy8gSWYgeSBpcyBvZGQsIG11bHRpcGx5IHggd2l0aCByZXN1bHQgCiAgICAgICAgaWYgKHkgJiAxKSAKICAgICAgICAgICAgcmVzID0gKHJlcyp4KSAlIHA7IAogIAogICAgICAgIC8vIHkgbXVzdCBiZSBldmVuIG5vdyAKICAgICAgICB5ID0geT4+MTsgLy8geSA9IHkvMiAKICAgICAgICB4ID0gKHgqeCkgJSBwOyAgIAogICAgfSAKICAgIHJldHVybiByZXM7IAp9IAppbnQgbWFpbigpCnsKICAgIApmYWN0WzBdID0gMTsKZm9yKGludCBpID0gMTsgaSA8IE1heG47IGkrKykgewoJZmFjdFtpXSA9IDFMTCAqIGZhY3RbaSAtIDFdICogaSAlIE1vZDsKfQoKCmlmYWN0WzBdID0gMTsKZm9yKGludCBpID0gMTsgaSA8IE1heG47IGkrKykgewoJaW52W2ldID0gaW52ZXJzZShpLCBNb2QpOwoJaWZhY3RbaV0gPSAoMUxMICogaWZhY3RbaSAtIDFdICogaW52W2ldKSAlIE1vZDsKfQogICAgaW50IHQ7CiAgICBjaW4+PnQ7CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgaW50IG47CiAgICAgICAgY2luPj5uOwogICAgICAgIGludCBhcnJbbl07CiAgICAgICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgICAgICBjaW4+PmFycltpXTsKICAgICAgICBpbnQgYW5zW25dOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgYz0wOwogICAgICAgICAgICBmb3IoaW50IGo9aTtqPG47aisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgZCA9cG93ZXIoMixuLTEtaixNb2QpOwogICAgICAgICAgICAgICAgZD0oZCphcnJbal0pJU1vZDsKICAgICAgICAgICAgICAgIGlmKGk+MCBhbmQgaj5pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGQ9KGQqKGludClOY1IoaixpKSklTW9kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYz0oYytkKSVNb2Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYW5zW2ldPWM7CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAgICAgY291dDw8YW5zW2ldPDwiICI7CiAgICAgICAgY291dDw8ZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=