#include <bits/stdc++.h>
using namespace std;
//error
#define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
cerr << *it << " = " << a << endl;
err(++it, args...);
}
//output
#define output(x) cout << x << endl
//input
#define input(x) {int x; cout << x << endl;}
//loop
#define f(i, n) for(int i = 0; i < n; i++)
#define ll long long
typedef struct ABC {
vector<ll> v;
int idx;
bool operator<(const ABC& t) const {
return (this->idx <= t.idx);
}
}Node;
map<Node, int> dp;
ll maximum(vector<ll> &input, Node n) {
// cout << "query " << n.idx << " " << n.v.size() << endl;
if (n.idx >= input.size() || n.v.size() == 3) {
ll sum = 0;
f(i, n.v.size()) sum += n.v[i];
return sum;
}
if (dp.find(n) != dp.end()) {
cout<<n.idx<<" "<<n.v.size()<<endl;
return dp[n];
}
bool canHave = true;
for (int j = 0 ; j < n.v.size() ; j++) {
if (input[n.idx] % n.v[j] == 0 || n.v[j] % input[n.idx] == 0) {
canHave = false;
break;
}
}
ll answer = 0;
if (canHave) {
Node newN;
newN.v = n.v;
newN.idx = 0;
newN.v.push_back(input[n.idx]);
newN.idx = n.idx + 1;
ll a = maximum(input, newN);
newN.v = n.v;
ll b = maximum(input, newN);
answer = max(a, b);
}
else {
Node newN;
newN.v = n.v;
newN.idx = n.idx + 1;
ll b = maximum(input, newN);
answer = b;
}
cout << n.idx << " " << n.v.size() << " " <<answer << endl;
for(int i = 0; i < n.v.size();i++) {
cout<<" : "<<n.v[i]<<endl;
}
cout<<" --------"<<endl;
dp[n] = answer;
return dp[n];
}
int main(int argc, char const *argv[]) {
ll n = 0;
cin >> n;
output(n);
while (n--) {
dp.clear();
ll k = 0;
cin >> k;
ll num = 0;
vector<ll> input = {};
vector<ll> current = {};
for(ll i = 0; i < k; i++) {
cin >> num;
input.push_back(num);
}
Node n1;
n1.idx = 0;
// output("calling function max");
maximum(input, n1);
ll ans = LONG_MIN;
for (map<Node,int>::iterator it=dp.begin(); it!=dp.end(); ++it) {
cout << it->first.idx << " " << it->first.v.size() << " " <<it->second << " ========"<< "\n";
if (it->second > ans) {
ans = it->second;
}
}
output(ans);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy9lcnJvcgojZGVmaW5lIGVycm9yKGFyZ3MuLi4pIHsgc3RyaW5nIF9zID0gI2FyZ3M7IHJlcGxhY2UoX3MuYmVnaW4oKSwgX3MuZW5kKCksICcsJywgJyAnKTsgc3RyaW5nc3RyZWFtIF9zcyhfcyk7IGlzdHJlYW1faXRlcmF0b3I8c3RyaW5nPiBfaXQoX3NzKTsgZXJyKF9pdCwgYXJncyk7IH0KCnZvaWQgZXJyKGlzdHJlYW1faXRlcmF0b3I8c3RyaW5nPiBpdCkge30KdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4Kdm9pZCBlcnIoaXN0cmVhbV9pdGVyYXRvcjxzdHJpbmc+IGl0LCBUIGEsIEFyZ3MuLi4gYXJncykgewoJY2VyciA8PCAqaXQgPDwgIiA9ICIgPDwgYSA8PCBlbmRsOwoJZXJyKCsraXQsIGFyZ3MuLi4pOwp9CgovL291dHB1dAojZGVmaW5lIG91dHB1dCh4KSBjb3V0IDw8IHggPDwgZW5kbAoKLy9pbnB1dAojZGVmaW5lIGlucHV0KHgpIHtpbnQgeDsgY291dCA8PCB4IDw8IGVuZGw7fQoKLy9sb29wCiNkZWZpbmUgZihpLCBuKSBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoKI2RlZmluZSBsbCBsb25nIGxvbmcKCnR5cGVkZWYgc3RydWN0IEFCQyB7Cgl2ZWN0b3I8bGw+IHY7CglpbnQgaWR4OwoKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IEFCQyYgdCkgY29uc3QgeyAKICAgICAgICByZXR1cm4gKHRoaXMtPmlkeCA8PSB0LmlkeCk7IAogICAgfSAKfU5vZGU7CgptYXA8Tm9kZSwgaW50PiBkcDsKCmxsIG1heGltdW0odmVjdG9yPGxsPiAmaW5wdXQsIE5vZGUgbikgewoJCi8vCWNvdXQgPDwgInF1ZXJ5ICIgPDwgbi5pZHggPDwgIiAiIDw8ICBuLnYuc2l6ZSgpIDw8IGVuZGw7CgkKCWlmIChuLmlkeCA+PSBpbnB1dC5zaXplKCkgfHwgbi52LnNpemUoKSA9PSAzKSB7CgkJCgkJbGwgc3VtID0gMDsKCQlmKGksIG4udi5zaXplKCkpIHN1bSArPSBuLnZbaV07CgkJcmV0dXJuIHN1bTsKCX0KCglpZiAoZHAuZmluZChuKSAhPSBkcC5lbmQoKSkgewoJCWNvdXQ8PG4uaWR4PDwiICI8PG4udi5zaXplKCk8PGVuZGw7CgkJcmV0dXJuIGRwW25dOwoJfQoKCWJvb2wgY2FuSGF2ZSA9IHRydWU7CgoJZm9yIChpbnQgaiA9IDAgOyBqIDwgbi52LnNpemUoKSA7IGorKykgewoJCWlmIChpbnB1dFtuLmlkeF0gJSBuLnZbal0gPT0gMCB8fCBuLnZbal0gJSBpbnB1dFtuLmlkeF0gID09IDApIHsKCQkJY2FuSGF2ZSA9IGZhbHNlOwoJCQlicmVhazsKCQl9Cgl9CgoJbGwgYW5zd2VyID0gMDsKCglpZiAoY2FuSGF2ZSkgewoJCU5vZGUgbmV3TjsKCQluZXdOLnYgPSBuLnY7CgkJbmV3Ti5pZHggPSAwOwoKCQluZXdOLnYucHVzaF9iYWNrKGlucHV0W24uaWR4XSk7CgkJbmV3Ti5pZHggPSBuLmlkeCArIDE7CgkJbGwgYSA9IG1heGltdW0oaW5wdXQsIG5ld04pOwoKCQluZXdOLnYgPSBuLnY7CgkJbGwgYiA9IG1heGltdW0oaW5wdXQsIG5ld04pOwoKCQlhbnN3ZXIgPSBtYXgoYSwgYik7Cgl9CgllbHNlIHsKCQlOb2RlIG5ld047CgkJbmV3Ti52ID0gbi52OwoJCW5ld04uaWR4ID0gbi5pZHggKyAxOwoJCWxsIGIgPSBtYXhpbXVtKGlucHV0LCBuZXdOKTsKCgkJYW5zd2VyID0gYjsKCX0KCWNvdXQgPDwgbi5pZHggPDwgIiAiIDw8ICBuLnYuc2l6ZSgpIDw8ICIgIiA8PGFuc3dlciA8PCBlbmRsOwoJZm9yKGludCBpID0gMDsgaSA8IG4udi5zaXplKCk7aSsrKSB7CgkJY291dDw8IiA6ICI8PG4udltpXTw8ZW5kbDsKCX0KCWNvdXQ8PCIgLS0tLS0tLS0iPDxlbmRsOwoJCglkcFtuXSA9IGFuc3dlcjsKCglyZXR1cm4gZHBbbl07Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICphcmd2W10pIHsKCWxsIG4gPSAwOwoKCWNpbiA+PiBuOwoJCglvdXRwdXQobik7CgoJd2hpbGUgKG4tLSkgewoJCWRwLmNsZWFyKCk7CgkJbGwgayA9IDA7CgkJY2luID4+IGs7CgkJbGwgbnVtID0gMDsKCQl2ZWN0b3I8bGw+IGlucHV0ID0ge307CgkJdmVjdG9yPGxsPiBjdXJyZW50ID0ge307CgoJCWZvcihsbCBpID0gMDsgaSA8IGs7IGkrKykgewkKCQkJY2luID4+IG51bTsKCQkJaW5wdXQucHVzaF9iYWNrKG51bSk7CgkJfQoKCQlOb2RlIG4xOwoJCW4xLmlkeCA9IDA7CgkJCi8vCQlvdXRwdXQoImNhbGxpbmcgZnVuY3Rpb24gbWF4Iik7CgkJbWF4aW11bShpbnB1dCwgbjEpOwoKCQlsbCBhbnMgPSBMT05HX01JTjsKCgkJZm9yIChtYXA8Tm9kZSxpbnQ+OjppdGVyYXRvciBpdD1kcC5iZWdpbigpOyBpdCE9ZHAuZW5kKCk7ICsraXQpIHsKCQkJY291dCA8PCBpdC0+Zmlyc3QuaWR4IDw8ICIgIiA8PCAgaXQtPmZpcnN0LnYuc2l6ZSgpICA8PCAiICIgPDxpdC0+c2Vjb25kIDw8ICIgPT09PT09PT0iPDwgIlxuIjsKICAgIAkJaWYgKGl0LT5zZWNvbmQgPiBhbnMpIHsKICAgIAkJCWFucyA9IGl0LT5zZWNvbmQ7CiAgICAJCX0KCQl9CgkJb3V0cHV0KGFucyk7Cgl9CglyZXR1cm4gMDsKfQ==