#include <bits/stdc++.h>
#pragma GCC optimize("-O3")
using namespace std;
const long long N = 1e6 + 5;
long long mod = 1e9 + 7;
void pairsort(long long a[], long long b[], long long n) {
  pair<long long, long long> pairt[n];
  for (long long i = 0; i < n; i++) {
    pairt[i].first = a[i];
    pairt[i].second = b[i];
  }
  sort(pairt, pairt + n);
  for (long long i = 0; i < n; i++) {
    a[i] = pairt[i].first;
    b[i] = pairt[i].second;
  }
}
long long pow1(long long n, long long p) {
  if (p == 0) return 1;
  long long x = pow1(n, p / 2);
  x = (x * x) % mod;
  if (p % 2 == 0)
    return x;
  else
    return (x * n) % mod;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long isPrime(long long n) {
  if (n < 2) return 0;
  if (n < 4) return 1;
  if (n % 2 == 0 or n % 3 == 0) return 0;
  for (long long i = 5; i * i <= n; i += 6)
    if (n % i == 0 or n % (i + 2) == 0) return 0;
  return 1;
}
long long C(long long n, long long r) {
  if (r > n - r) r = n - r;
  long long ans = 1;
  for (long long i = 1; i <= r; i++) {
    ans *= n - r + i;
    ans /= i;
  }
  return ans;
}
bool sortbysec(const pair<long long, long long> &a,
               const pair<long long, long long> &b) {
  return (a.second < b.second);
}
bool compare(const pair<long long, long long> &p1,
             const pair<long long, long long> &p2) {
  if (p1.first < p2.first) return true;
  if (p1.first == p2.first) return p1.second < p2.second;
  return false;
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long tt;
  cin >> tt;
  while (tt--) {
    long long n, m, f = 0, flag = 0;
    cin >> n;
    long long pos = 0, neg = 0, zero = 0;
    vector<long long> a(n), b, c;
    for (long long i = 0; i < n; i++) {
      cin >> a[i];
      if (a[i] < 0) b.push_back(a[i]);
      if (a[i] > 0) c.push_back(a[i]);
      if (a[i] > 0)
        pos++;
      else if (a[i] < 0)
        neg++;
      else
        zero++;
    }
    long long prod = -1e18;
    sort(a.begin(), a.end());
    long long ans = 1;
    if (pos >= 5) {
      long long k = 5;
      long long i = n - 1;
      while (k--) {
        ans *= a[i];
        i--;
      }
      prod = max(prod, ans);
    }
    ans = 1;
    if (pos >= 3 && neg >= 2) {
      long long k = 3;
      long long i = n - 1;
      while (k--) {
        ans *= a[i];
        i--;
      }
      k = 2;
      i = 0;
      while (k--) {
        ans *= a[i];
        i++;
      }
      prod = max(prod, ans);
    }
    ans = 1;
    if (pos >= 1 && neg >= 4) {
      long long k = 1;
      long long i = n - 1;
      while (k--) {
        ans *= a[i];
        i--;
      }
      k = 4;
      i = 0;
      while (k--) {
        ans *= a[i];
        i++;
      }
      prod = max(prod, ans);
    }
    ans = 1;
    if (zero > 0) prod = max(prod, (long long)0);
    m = b.size();
    sort(b.begin(), b.end());
    sort(c.begin(), c.end());
    if (neg >= 5) {
      long long k = 5;
      long long i = m - 1;
      while (k--) {
        ans *= b[i];
        i--;
      }
      prod = max(prod, ans);
    }
    ans = 1;
    if (neg >= 3 && pos >= 2) {
      long long k = 3;
      long long i = m - 1;
      while (k--) {
        ans *= b[i];
        i--;
      }
      k = 2;
      i = 0;
      while (k--) {
        ans *= c[i];
        i++;
      }
      prod = max(prod, ans);
    }
    ans = 1;
    if (neg >= 1 && pos >= 4) {
      long long k = 1;
      long long i = m - 1;
      while (k--) {
        ans *= b[i];
        i--;
      }
      k = 4;
      i = 0;
      while (k--) {
        ans *= c[i];
        i++;
      }
      prod = max(prod, ans);
    }
    if (neg == n && pos == 0) {
      prod = 1;
      long long k = 5;
      long long i = m - 1;
      while (k--) {
        prod *= b[i];
        i--;
      }
    } else if (neg != n && pos == 0)
      prod = 0;
    if (zero > 0 && prod < 0) prod = 0;
    cout << prod << "\n";
  }
  return 0;
}
