#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MOD = 998244353;
// Function to compute the lowest set bit
int lowbit(int x) {
return x & -x;
}
// Function to build a Fenwick Tree from a given array `a`
vector<int> f(const vector<int>& a, int mod) {
int n = a.size();
vector<int> s(n, 0);
for (int k = 1; k <= n; ++k) {
int start = k - lowbit(k);
for (int i = start; i < k; ++i) {
s[k - 1] = (s[k - 1] + a[i]) % mod;
}
}
return s;
}
// Function to inverse the Fenwick Tree to reconstruct array `a`
vector<int> inverse_f(const vector<int>& s, int mod) {
int n = s.size();
vector<int> a(n, 0);
a[0] = s[0];
for (int k = 1; k < n; ++k) {
int start = k - lowbit(k);
a[k] = s[k];
for (int i = start; i < k; ++i) {
a[k] = (a[k] - a[i] + mod) % mod;
}
}
return a;
}
// Function to find the original array `a` from `fk(a) = b`
vector<int> get_original_array(int n, int k, const vector<int>& b) {
vector<int> current = b;
if (k > 1) {
for (int i = 1; i < k; ++i) {
current = inverse_f(current, MOD);
}
}
return current;
}
int main() {
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
vector<int> b(n);
for (int i = 0; i < n; i++) {
cin >> b[i];
}
vector<int> a = get_original_array(n, k, b);
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNT0QgPSA5OTgyNDQzNTM7CgovLyBGdW5jdGlvbiB0byBjb21wdXRlIHRoZSBsb3dlc3Qgc2V0IGJpdAppbnQgbG93Yml0KGludCB4KSB7CiAgICByZXR1cm4geCAmIC14Owp9CgovLyBGdW5jdGlvbiB0byBidWlsZCBhIEZlbndpY2sgVHJlZSBmcm9tIGEgZ2l2ZW4gYXJyYXkgYGFgCnZlY3RvcjxpbnQ+IGYoY29uc3QgdmVjdG9yPGludD4mIGEsIGludCBtb2QpIHsKICAgIGludCBuID0gYS5zaXplKCk7CiAgICB2ZWN0b3I8aW50PiBzKG4sIDApOwogICAgZm9yIChpbnQgayA9IDE7IGsgPD0gbjsgKytrKSB7CiAgICAgICAgaW50IHN0YXJ0ID0gayAtIGxvd2JpdChrKTsKICAgICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBrOyArK2kpIHsKICAgICAgICAgICAgc1trIC0gMV0gPSAoc1trIC0gMV0gKyBhW2ldKSAlIG1vZDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gczsKfQoKLy8gRnVuY3Rpb24gdG8gaW52ZXJzZSB0aGUgRmVud2ljayBUcmVlIHRvIHJlY29uc3RydWN0IGFycmF5IGBhYAp2ZWN0b3I8aW50PiBpbnZlcnNlX2YoY29uc3QgdmVjdG9yPGludD4mIHMsIGludCBtb2QpIHsKICAgIGludCBuID0gcy5zaXplKCk7CiAgICB2ZWN0b3I8aW50PiBhKG4sIDApOwogICAgYVswXSA9IHNbMF07CiAgICBmb3IgKGludCBrID0gMTsgayA8IG47ICsraykgewogICAgICAgIGludCBzdGFydCA9IGsgLSBsb3diaXQoayk7CiAgICAgICAgYVtrXSA9IHNba107CiAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgazsgKytpKSB7CiAgICAgICAgICAgIGFba10gPSAoYVtrXSAtIGFbaV0gKyBtb2QpICUgbW9kOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBhOwp9CgovLyBGdW5jdGlvbiB0byBmaW5kIHRoZSBvcmlnaW5hbCBhcnJheSBgYWAgZnJvbSBgZmsoYSkgPSBiYAp2ZWN0b3I8aW50PiBnZXRfb3JpZ2luYWxfYXJyYXkoaW50IG4sIGludCBrLCBjb25zdCB2ZWN0b3I8aW50PiYgYikgewogICAgdmVjdG9yPGludD4gY3VycmVudCA9IGI7CiAgICBpZiAoayA+IDEpIHsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGs7ICsraSkgewogICAgICAgICAgICBjdXJyZW50ID0gaW52ZXJzZV9mKGN1cnJlbnQsIE1PRCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGN1cnJlbnQ7Cn0KCmludCBtYWluKCkgewogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKCiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgaW50IG4sIGs7CiAgICAgICAgY2luID4+IG4gPj4gazsKCiAgICAgICAgdmVjdG9yPGludD4gYihuKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICBjaW4gPj4gYltpXTsKICAgICAgICB9CgogICAgICAgIHZlY3RvcjxpbnQ+IGEgPSBnZXRfb3JpZ2luYWxfYXJyYXkobiwgaywgYik7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGNvdXQgPDwgYVtpXSA8PCAiICI7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgIlxuIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=