#include using namespace std; //#include //using namespace atcoder; using ll = long long; using pp = pair; #define rep(i, n) for (i = 0; (i) < (n); ++(i)) #define reps(i, a, n) for (i = (a); (i) < (n); ++(i)) #define rrep(i, n) for (i = (n-1); (i) >= (0); --(i)) #define all(a) (a).begin(), (a).end() #define oor(a,b,h,w) (a<0||a>=h||b<0||b>=w)//out of range #define fi first #define se second #define mkpr(a,b) make_pair(a,b) #define mktpl(a,b,c) make_tuple(a,b,c) #define fixp(a) fixed< dx={1,0,-1,0};//{1,1,0,-1,-1,-1,0,1}; vector dy={0,-1,0,1};//{0,-1,-1,-1,0,1,1,1}; //ll keta_calc(ll x){ll ans=0;while(x){x/=10;ans++;}return ans;} //ll powll(ll x,ll y){ll ans=1;while(y){ans*=x;y--;}return ans;} //alias g++='g++ -std=c++17' #define chmin(a,b) a=min(a,(b)) #define chmax(a,b) a=max(a,(b)) int main(){ int i=0,j=0; int n,m,k; int ti,t; cin >> t ; rep(ti,t){ cin >> n ; vector a(n); bool flag1 = false; bool flag2 = false; ll max_minus=-1001001001001; ll min_plus=1001001001001; rep(i,n){ cin >> a[i]; if(a[i] <= 0){ flag1 = true; chmax(max_minus , a[i]); }else{ flag2 = true; chmin(min_plus , a[i]); } } if(flag1 && flag2){ cout << max_minus*min_plus << "\n"; continue; } sort(all(a)); cout << a[0]*a[n-1] << "\n"; } //sort(aitem.begin(),aitem.end(), //[](const vector &alpha,const vector &beta){return alpha[1] < beta[1];}); // cout << n << endl ; //if(flag==0)printf("Yes\n"); //else printf("No\n"); return 0; }