#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
#define ll long long
using namespace std;
int t,n;
ll a[100005],ans;
multiset<ll>q1,q2;
int main(){
scanf("%d",&t);
while(t--){
q1.clear();q2.clear();
scanf("%d",&n);
ans=-99999999999999999;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
if(i!=1&&i!=2)q2.insert(a[i]);
}
q1.insert(a[1]);
for(int i=2;i<n;i++){
auto it0=q1.lower_bound(a[i]);
auto it1=q2.upper_bound(a[i]);
if(it0!=q1.begin()&&it1!=q2.end()){
ans=max(ans,(*prev(it0))*a[i]*(*it1));
ans=max(ans,(*prev(it0))*a[i]*(*q2.end()));
ans=max(ans,(*q1.begin())*a[i]*(*it1));
ans=max(ans,(*q1.begin())*a[i]*(*q2.end()));
}
q1.insert(a[i]);
q2.erase(q2.find(a[i+1]));
}
if(ans==-99999999999999999)printf("-1\n");
else printf("%lld\n",ans);
}
return 0;
}
在洛谷上可以编译,但在c++和别的地方都不行