#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<ll> h(n + 1);
for (int i = 1; i <= n; ++i) cin >> h[i];
// Thử đặt c1 = 0, sẽ tính c2...cn theo công thức
// hi + ci + 2c(i-1) = H => ci = H - hi - 2c(i-1)
// Cuối cùng điều kiện vòng: H - h1 - 2c_n = c1 (=0)
// => H = h1 + 2c_n
vector<ll> c(n + 1);
c[1] = 0; // giả định
ll H = 0;
// H chưa biết nên ta tạm tính theo công thức tuyến tính chứa H
// ci = a_i * H + b_i
vector<ll> a(n + 1), b(n + 1);
a[1] = 0; b[1] = 0;
for (int i = 2; i <= n; ++i) {
a[i] = 1 - 2 * a[i - 1];
b[i] = -h[i] - 2 * b[i - 1];
}
// Từ điều kiện vòng: H - h1 - 2c_n = c1
// => H - h1 - 2(a_n*H + b_n) = 0
// => H * (1 - 2a_n) = h1 + 2b_n
ll denom = (1 - 2 * a[n]);
if (denom == 0) {
cout << -1 << "\n";
continue;
}
if ((h[1] + 2 * b[n]) % denom != 0) {
cout << -1 << "\n";
continue;
}
H = (h[1] + 2 * b[n]) / denom;
// Tính lại toàn bộ c[i]
for (int i = 1; i <= n; ++i)
c[i] = a[i] * H + b[i];
bool ok = true;
for (int i = 1; i <= n; ++i)
if (c[i] < 0) ok = false;
if (!ok) {
cout << -1 << "\n";
continue;
}
ll total = accumulate(c.begin() + 1, c.end(), 0LL);
cout << total << "\n";
for (int i = 1; i <= n; ++i)
cout << c[i] << (i == n ? '\n' : ' ');
}
}