// Author : hynu
// Problem :
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
#if LOCAL
#include "algo/debug.h"
#endif
using namespace std;
using ll = long long;
const int MOD = 1e9 + 7;
const int LIMIT = 1e6 + 7;
const ll INF = INT_MAX;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int n;
vector<int> arr;
namespace subtask1 {
int res = INF;
void backtrack(int p, ll a, ll b, ll c) {
if (p == n) {
res = min(res, (int)(max({a, b, c}) - min({a, b, c})));
return;
}
backtrack(p + 1, a + arr[p], b, c);
backtrack(p + 1, a, b + arr[p], c);
backtrack(p + 1, a, b, c + arr[p]);
}
int solve() {
backtrack(0, 0, 0, 0);
return res;
}
}
namespace subtask2 {
void gen(int l, int r, vector<array<ll, 3>>& vals) {
int len = r - l;
int total = 1;
for (int i = 0; i < len; i++) total *= 3;
for (int mask = 0; mask < total; ++mask) {
int m = mask;
ll a, b, c;
a = b = c = 0;
for (int i = 0; i < len; ++i) {
int r = m % 3;
m /= 3;
int val = arr[l + i];
if (r == 0) a += val;
if (r == 1) b += val;
if (r == 2) c += val;
}
vals.push_back({a, b, c});
}
}
void prune(vector<array<ll, 3>>& vals) {
sort(vals.begin(), vals.end(), [](auto &x, auto &y) {
if (x[0] != y[0]) return x[0] < y[0];
if (x[1] != y[1]) return x[1] < y[1];
return x[2] < y[2];
});
map<ll, ll> front;
vector<array<ll, 3>> res;
for (auto [a, b, c] : vals) {
auto it = front.lower_bound(b);
bool found = false;
if (it != front.begin()) {
--it;
if (it->second <= c) found = true;
}
if (found) continue;
while (it != front.end() && it->second >= c) it = front.erase(it);
front[b] = c;
res.push_back({a, b, c});
}
vals = res;
return;
}
ll solve() {
int res = INF;
vector<array<ll, 3>> v1, v2;
gen(0, n >> 1, v1);
gen(n >> 1, n, v2);
prune(v1);
prune(v2);
for (auto [a1, b1, c1] : v1) {
for (auto [a2, b2, c2] : v2) {
ll a = a1 + a2;
ll b = b1 + b2;
ll c = c1 + c2;
res = min(res, (int)(max({a, b, c}) - min({a, b, c})));
}
}
return res;
}
}
namespace subtask3 {
//dp
}
class stress {
private:
int rnd(int l, int r) {
return uniform_int_distribution<int>(l, r)(rng);
}
public:
stress(int t, int n) {
bool accept = true;
while (t--) {
arr.assign(n, 0);
for (int& val : arr) val = rnd(1, 1e6);
int res1 = subtask1::solve();
int res2 = subtask1::solve();
if (res1 != res2) {
cout << n << '\n';
for (int val : arr) cout << val << ' ';
accept = false;
return;
}
}
if (accept) cout << "passed!";
}
};
signed main() {
cin.tie(nullptr), cout.tie(nullptr) -> ios_base::sync_with_stdio(false);
#define task "sol"
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin), freopen(task".out", "w", stdout);
}
/*
cin >> n;
arr.resize(n);
for (int& val : arr) cin >> val;
subtask2::solve();
*/
int t;
cin >> t;
stress(t, 10);
return 0;
}
Ly8gQXV0aG9yIDogaHludQovLyBQcm9ibGVtIDogCgojcHJhZ21hIEdDQyBvcHRpbWl6ZSgiTzMsdW5yb2xsLWxvb3BzIikKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojaWYgTE9DQUwKI2luY2x1ZGUgImFsZ28vZGVidWcuaCIKI2VuZGlmCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmNvbnN0IGludCBNT0QgPSAxZTkgKyA3Owpjb25zdCBpbnQgTElNSVQgPSAxZTYgKyA3Owpjb25zdCBsbCBJTkYgPSBJTlRfTUFYOwoKbXQxOTkzNyBybmcoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKCmludCBuOwp2ZWN0b3I8aW50PiBhcnI7CgpuYW1lc3BhY2Ugc3VidGFzazEgeyAgICAKICAgIGludCByZXMgPSBJTkY7CiAgICB2b2lkIGJhY2t0cmFjayhpbnQgcCwgbGwgYSwgbGwgYiwgbGwgYykgewogICAgICAgIGlmIChwID09IG4pIHsKICAgICAgICAgICAgcmVzID0gbWluKHJlcywgKGludCkobWF4KHthLCBiLCBjfSkgLSBtaW4oe2EsIGIsIGN9KSkpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBiYWNrdHJhY2socCArIDEsIGEgKyBhcnJbcF0sIGIsIGMpOwogICAgICAgIGJhY2t0cmFjayhwICsgMSwgYSwgYiArIGFycltwXSwgYyk7CiAgICAgICAgYmFja3RyYWNrKHAgKyAxLCBhLCBiLCBjICsgYXJyW3BdKTsKICAgIH0KCiAgICBpbnQgc29sdmUoKSB7CiAgICAgICAgYmFja3RyYWNrKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiByZXM7CiAgICB9Cn0KCm5hbWVzcGFjZSBzdWJ0YXNrMiB7ICAgIAogICAgdm9pZCBnZW4oaW50IGwsIGludCByLCB2ZWN0b3I8YXJyYXk8bGwsIDM+PiYgdmFscykgewogICAgICAgIGludCBsZW4gPSByIC0gbDsKCiAgICAgICAgaW50IHRvdGFsID0gMTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB0b3RhbCAqPSAzOwoKICAgICAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8IHRvdGFsOyArK21hc2spIHsKICAgICAgICAgICAgaW50IG0gPSBtYXNrOwogICAgICAgICAgICBsbCBhLCBiLCBjOwogICAgICAgICAgICBhID0gYiA9IGMgPSAwOwoKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgICAgICAgaW50IHIgPSBtICUgMzsKICAgICAgICAgICAgICAgIG0gLz0gMzsKCiAgICAgICAgICAgICAgICBpbnQgdmFsID0gYXJyW2wgKyBpXTsKICAgICAgICAgICAgICAgIGlmIChyID09IDApIGEgKz0gdmFsOwogICAgICAgICAgICAgICAgaWYgKHIgPT0gMSkgYiArPSB2YWw7CiAgICAgICAgICAgICAgICBpZiAociA9PSAyKSBjICs9IHZhbDsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YWxzLnB1c2hfYmFjayh7YSwgYiwgY30pOwogICAgICAgIH0KICAgIH0KCgogICAgdm9pZCBwcnVuZSh2ZWN0b3I8YXJyYXk8bGwsIDM+PiYgdmFscykgewogICAgICAgIHNvcnQodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpLCBbXShhdXRvICZ4LCBhdXRvICZ5KSB7CiAgICAgICAgICAgIGlmICh4WzBdICE9IHlbMF0pIHJldHVybiB4WzBdIDwgeVswXTsKICAgICAgICAgICAgaWYgKHhbMV0gIT0geVsxXSkgcmV0dXJuIHhbMV0gPCB5WzFdOwogICAgICAgICAgICByZXR1cm4geFsyXSA8IHlbMl07CiAgICAgICAgfSk7CgogICAgICAgIG1hcDxsbCwgbGw+IGZyb250OwogICAgICAgIHZlY3RvcjxhcnJheTxsbCwgMz4+IHJlczsKCiAgICAgICAgZm9yIChhdXRvIFthLCBiLCBjXSA6IHZhbHMpIHsKICAgICAgICAgICAgYXV0byBpdCA9IGZyb250Lmxvd2VyX2JvdW5kKGIpOwogICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CgogICAgICAgICAgICBpZiAoaXQgIT0gZnJvbnQuYmVnaW4oKSkgewogICAgICAgICAgICAgICAgLS1pdDsKICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kIDw9IGMpIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGZvdW5kKSBjb250aW51ZTsKCiAgICAgICAgICAgIHdoaWxlIChpdCAhPSBmcm9udC5lbmQoKSAmJiBpdC0+c2Vjb25kID49IGMpIGl0ID0gZnJvbnQuZXJhc2UoaXQpOwoKICAgICAgICAgICAgZnJvbnRbYl0gPSBjOwogICAgICAgICAgICByZXMucHVzaF9iYWNrKHthLCBiLCBjfSk7CiAgICAgICAgfQoKICAgICAgICB2YWxzID0gcmVzOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsbCBzb2x2ZSgpIHsKICAgICAgICBpbnQgcmVzID0gSU5GOwogICAgICAgIHZlY3RvcjxhcnJheTxsbCwgMz4+IHYxLCB2MjsKICAgICAgICAKICAgICAgICBnZW4oMCwgbiA+PiAxLCB2MSk7CiAgICAgICAgZ2VuKG4gPj4gMSwgbiwgdjIpOwogICAgICAgIHBydW5lKHYxKTsgCiAgICAgICAgcHJ1bmUodjIpOwoKICAgICAgICBmb3IgKGF1dG8gW2ExLCBiMSwgYzFdIDogdjEpIHsKICAgICAgICAgICAgZm9yIChhdXRvIFthMiwgYjIsIGMyXSA6IHYyKSB7CiAgICAgICAgICAgICAgICBsbCBhID0gYTEgKyBhMjsKICAgICAgICAgICAgICAgIGxsIGIgPSBiMSArIGIyOwogICAgICAgICAgICAgICAgbGwgYyA9IGMxICsgYzI7CgogICAgICAgICAgICAgICAgcmVzID0gbWluKHJlcywgKGludCkobWF4KHthLCBiLCBjfSkgLSBtaW4oe2EsIGIsIGN9KSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzOyAgCiAgICB9Cn0KCm5hbWVzcGFjZSBzdWJ0YXNrMyB7CiAgICAvL2RwCn0KCgoKY2xhc3Mgc3RyZXNzIHsKcHJpdmF0ZTogCiAgICBpbnQgcm5kKGludCBsLCBpbnQgcikgewogICAgICAgIHJldHVybiB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248aW50PihsLCByKShybmcpOwogICAgfQpwdWJsaWM6CiAgICBzdHJlc3MoaW50IHQsIGludCBuKSB7CiAgICAgICAgYm9vbCBhY2NlcHQgPSB0cnVlOwogICAgICAgIHdoaWxlICh0LS0pIHsKICAgICAgICAgICAgYXJyLmFzc2lnbihuLCAwKTsKICAgICAgICAgICAgZm9yIChpbnQmIHZhbCA6IGFycikgdmFsID0gcm5kKDEsIDFlNik7CgogICAgICAgICAgICBpbnQgcmVzMSA9IHN1YnRhc2sxOjpzb2x2ZSgpOwogICAgICAgICAgICBpbnQgcmVzMiA9IHN1YnRhc2sxOjpzb2x2ZSgpOwoKICAgICAgICAgICAgaWYgKHJlczEgIT0gcmVzMikgewogICAgICAgICAgICAgICAgY291dCA8PCBuIDw8ICdcbic7CiAgICAgICAgICAgICAgICBmb3IgKGludCB2YWwgOiBhcnIpIGNvdXQgPDwgdmFsIDw8ICcgJzsKICAgICAgICAgICAgICAgIGFjY2VwdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhY2NlcHQpIGNvdXQgPDwgInBhc3NlZCEiOwogICAgfQp9OwoKc2lnbmVkIG1haW4oKSB7IAogICAgY2luLnRpZShudWxscHRyKSwgY291dC50aWUobnVsbHB0cikgLT4gaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgogICAgI2RlZmluZSB0YXNrICJzb2wiCiAgICBpZiAoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbiksIGZyZW9wZW4odGFzayIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIC8qCiAgICBjaW4gPj4gbjsKICAgIGFyci5yZXNpemUobik7CgogICAgZm9yIChpbnQmIHZhbCA6IGFycikgY2luID4+IHZhbDsKCiAgICBzdWJ0YXNrMjo6c29sdmUoKTsKICAgICovCgogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKCiAgICBzdHJlc3ModCwgMTApOwoKICAgIHJldHVybiAwOwp9