import java.util.Arrays;
import java.util.ArrayList;
import java.io.*;
public class Main {
ArrayList<int[]> input = new ArrayList<>();
ArrayList<int[]> inputlen = new ArrayList<>();
int t
= Integer.
parseInt(br.
readLine()); while(t > 0) {
int[] serieslenparam
= Arrays.
stream(br.
readLine().
split("\\s+")).
mapToInt(Integer::parseInt
).
toArray(); int[] seriesgiven
= Arrays.
stream(br.
readLine().
split("\\s+")).
mapToInt(Integer::parseInt
).
toArray();
inputlen.add(serieslenparam);
input.add(seriesgiven);
t--;
}
br.close();
r.close();
for(int n = 0; n < inputlen.size(); n++) {
int[] out = polyfill(inputlen.get(n)[0]-1, input.get(n), inputlen.get(n)[1]);
for(int m = 0; m < out.length; m++) {
System.
out.
print(out
[m
] + " "); }
}
}
public static int[] polyfill(int sn, int[] tempseries, int cn) {
int[] outseries = new int[cn];
if(sn == 0) {
for(int i = 0; i < outseries.length; i++) {
outseries[i] = tempseries[sn];
}
return outseries;
}
int[] newseries = new int[tempseries.length - 1];
int consti = 0;
boolean flag = false;
for(int i = 0; i < sn; i++) {
int sub = tempseries[i+1] - tempseries[i];
if(i == 0) {
consti = sub;
}
newseries[i] = sub;
flag = (newseries[i] == consti) ? true : false;
}
if(flag == false) {
int[] retseries = polyfill(sn - 1, newseries, cn);
outseries[0] = tempseries[sn] + retseries[0];
for(int m = 0; m < cn-1; m++) {
outseries[m+1] = outseries[m] + retseries[m+1];
}
return outseries;
}else {
outseries[0] = tempseries[sn] + consti;
for(int k = 0; k < cn-1; k++) {
outseries[k+1] = outseries[k] + consti;
}
return outseries;
}
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS5pby4qOwoKcHVibGljIGNsYXNzIE1haW4gewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbnsKCQlBcnJheUxpc3Q8aW50W10+IGlucHV0ID0gbmV3IEFycmF5TGlzdDw+KCk7CgkJQXJyYXlMaXN0PGludFtdPiBpbnB1dGxlbiA9IG5ldyBBcnJheUxpc3Q8PigpOwoJCUlucHV0U3RyZWFtUmVhZGVyIHIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKTsKCQlCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyKTsKCQlpbnQgdCA9IEludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSk7CgkJd2hpbGUodCA+IDApIHsKCQkJCgkJCWludFtdIHNlcmllc2xlbnBhcmFtID0gQXJyYXlzLnN0cmVhbShici5yZWFkTGluZSgpLnNwbGl0KCJcXHMrIikpLm1hcFRvSW50KEludGVnZXI6OnBhcnNlSW50KS50b0FycmF5KCk7CgkJCWludFtdIHNlcmllc2dpdmVuID0gQXJyYXlzLnN0cmVhbShici5yZWFkTGluZSgpLnNwbGl0KCJcXHMrIikpLm1hcFRvSW50KEludGVnZXI6OnBhcnNlSW50KS50b0FycmF5KCk7CgkJCQoJCQkKCQkJaW5wdXRsZW4uYWRkKHNlcmllc2xlbnBhcmFtKTsKCQkJaW5wdXQuYWRkKHNlcmllc2dpdmVuKTsKCQkJdC0tOwoJCX0KCQlici5jbG9zZSgpOwoJCXIuY2xvc2UoKTsKCQkKCQlmb3IoaW50IG4gPSAwOyBuIDwgaW5wdXRsZW4uc2l6ZSgpOyBuKyspIHsKCQkJaW50W10gb3V0ID0gcG9seWZpbGwoaW5wdXRsZW4uZ2V0KG4pWzBdLTEsIGlucHV0LmdldChuKSwgaW5wdXRsZW4uZ2V0KG4pWzFdKTsKCQkJZm9yKGludCBtID0gMDsgbSA8IG91dC5sZW5ndGg7IG0rKykgewoJCQkJU3lzdGVtLm91dC5wcmludChvdXRbbV0gKyAiICIpOwkJCQkKCQkJfQoJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKCQl9Cgl9CgkKCXB1YmxpYyBzdGF0aWMgaW50W10gcG9seWZpbGwoaW50IHNuLCBpbnRbXSB0ZW1wc2VyaWVzLCBpbnQgY24pIHsKCQkKCQlpbnRbXSBvdXRzZXJpZXMgPSBuZXcgaW50W2NuXTsKCQkKCQlpZihzbiA9PSAwKSB7CgkJCWZvcihpbnQgaSA9IDA7IGkgPCBvdXRzZXJpZXMubGVuZ3RoOyBpKyspIHsKCQkJCW91dHNlcmllc1tpXSA9IHRlbXBzZXJpZXNbc25dOwoJCQl9CgkJCQoJCQlyZXR1cm4gb3V0c2VyaWVzOwoJCX0JCQoJCQoJCWludFtdIG5ld3NlcmllcyA9IG5ldyBpbnRbdGVtcHNlcmllcy5sZW5ndGggLSAxXTsKCQlpbnQgY29uc3RpID0gMDsKCQlib29sZWFuIGZsYWcgPSBmYWxzZTsKCQlmb3IoaW50IGkgPSAwOyBpIDwgc247IGkrKykgewkJCQoJCQlpbnQgc3ViID0gdGVtcHNlcmllc1tpKzFdIC0gdGVtcHNlcmllc1tpXTsKCQkJaWYoaSA9PSAwKSB7CgkJCQljb25zdGkgPSBzdWI7CgkJCX0KCQkJbmV3c2VyaWVzW2ldID0gc3ViOwoJCQlmbGFnID0gKG5ld3Nlcmllc1tpXSA9PSBjb25zdGkpID8gdHJ1ZSA6IGZhbHNlOwoJCX0KCQlpZihmbGFnID09IGZhbHNlKSB7CgkJCWludFtdIHJldHNlcmllcyA9IHBvbHlmaWxsKHNuIC0gMSwgbmV3c2VyaWVzLCBjbik7CgkJCW91dHNlcmllc1swXSA9IHRlbXBzZXJpZXNbc25dICsgcmV0c2VyaWVzWzBdOwoJCQlmb3IoaW50IG0gPSAwOyBtIDwgY24tMTsgbSsrKSB7CgkJCQlvdXRzZXJpZXNbbSsxXSA9IG91dHNlcmllc1ttXSArIHJldHNlcmllc1ttKzFdOwoJCQl9CgkJCXJldHVybiBvdXRzZXJpZXM7CgkJfWVsc2UgewkJCSAKCQkJb3V0c2VyaWVzWzBdID0gdGVtcHNlcmllc1tzbl0gKyBjb25zdGk7CgkJCWZvcihpbnQgayA9IDA7IGsgPCBjbi0xOyBrKyspIHsJCQkJCgkJCQlvdXRzZXJpZXNbaysxXSA9IG91dHNlcmllc1trXSArIGNvbnN0aTsKCQkJfQoJCQlyZXR1cm4gb3V0c2VyaWVzOwoJCX0KCX0KCn0K