#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const long long INF = 2e18;
void print(int a[], int n) {
  for (int i = 0; i < n; i++) cout << a[i] << " ";
  cout << "\n";
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  int tc = 1;
  cin >> tc;
  while (tc--) {
    long long n;
    cin >> n;
    vector<long long> pos, neg;
    for (int i = 0; i < (n); i++) {
      int x;
      cin >> x;
      if (x < 0)
        neg.push_back(x);
      else
        pos.push_back(x);
    }
    sort(pos.begin(), pos.end());
    sort(neg.begin(), neg.end());
    long long N = neg.size(), P = pos.size();
    int c = 0;
    long long ans = 1;
    if (P == 0) {
      for (int i = (neg.size() - 1); i >= (0); i--) {
        if (c == 5) break;
        ans *= neg[i], c++;
      }
      cout << ans << "\n";
    } else if (N == 0) {
      for (int i = (pos.size() - 1); i >= (0); i--) {
        if (c == 5) break;
        ans *= pos[i], c++;
      }
      cout << ans << "\n";
    } else if (N == 1) {
      long long tem = 1;
      for (int i = (pos.size() - 1); i >= (0); i--) {
        if (c == 5) break;
        tem *= pos[i], c++;
      }
      if (c == 5)
        cout << tem;
      else
        cout << tem * neg[0];
      cout << "\n";
    } else if (N == 2) {
      long long tem1 = -1e18;
      if (P > 2) tem1 = neg[0] * neg[1] * pos[P - 1] * pos[P - 2] * pos[P - 3];
      long long tem = 1;
      for (int i = (pos.size() - 1); i >= (0); i--) {
        if (c == 5) break;
        tem *= pos[i], c++;
      }
      if (c == 5)
        cout << max(tem, tem1) << "\n";
      else
        cout << tem1 << "\n";
    } else if (N == 3) {
      long long tem1 = -1e18;
      if (P > 2) tem1 = neg[0] * neg[1] * pos[P - 1] * pos[P - 2] * pos[P - 3];
      long long tem = 1;
      for (int i = (pos.size() - 1); i >= (0); i--) {
        if (c == 5) break;
        tem *= pos[i], c++;
      }
      long long tem2 = -1e18;
      if (P > 1) tem2 = neg[0] * neg[1] * neg[2] * pos[P - 1] * pos[P - 2];
      if (c == 5)
        cout << max({tem, tem1, tem2}) << "\n";
      else
        cout << max(tem1, tem2) << "\n";
    } else if (N >= 4) {
      long long tem1 = -1e18;
      if (P > 2) tem1 = neg[0] * neg[1] * pos[P - 1] * pos[P - 2] * pos[P - 3];
      long long tem = 1;
      for (int i = (pos.size() - 1); i >= (0); i--) {
        if (c == 5) break;
        tem *= pos[i], c++;
      }
      long long tem2 = -1e18;
      if (P > 1) tem2 = neg[0] * neg[1] * neg[2] * pos[P - 1] * pos[P - 2];
      long long tem3 = neg[0] * neg[1] * neg[2] * neg[3] * pos[P - 1];
      if (c == 5)
        cout << max({tem, tem1, tem3, tem2}) << "\n";
      else
        cout << max({tem1, tem3, tem2}) << "\n";
    }
  }
}
