You are given an array of integers a_1,a_2,…,a_n. Find the maximum possible value of a_ia_ja_ka_la_t among all five indices (i, j, k, l, t) (i<j<k<l<t).

Input

The input consists of multiple test cases. The first line contains an integer t (1≤ t≤ 2 ⋅ 10^4) — the number of test cases. The description of the test cases follows.

The first line of each test case contains a single integer n (5≤ n≤ 10^5) — the size of the array.

The second line of each test case contains n integers a_1,a_2,…,a_n (-3× 10^3≤ a_i≤ 3× 10^3) — given array.

It's guaranteed that the sum of n over all test cases does not exceed 2⋅ 10^5.

Output

For each test case, print one integer — the answer to the problem.

Example

Input


4
5
-1 -2 -3 -4 -5
6
-1 -2 -3 1 2 -1
6
-1 0 0 0 -1 -1
6
-9 -7 -5 -3 -2 1


Output


-120
12
0
945

Note

In the first test case, choosing a_1,a_2,a_3,a_4,a_5 is a best choice: (-1)⋅ (-2) ⋅ (-3)⋅ (-4)⋅ (-5)=-120.

In the second test case, choosing a_1,a_2,a_3,a_5,a_6 is a best choice: (-1)⋅ (-2) ⋅ (-3)⋅ 2⋅ (-1)=12.

In the third test case, choosing a_1,a_2,a_3,a_4,a_5 is a best choice: (-1)⋅ 0⋅ 0⋅ 0⋅ (-1)=0.

In the fourth test case, choosing a_1,a_2,a_3,a_4,a_6 is a best choice: (-9)⋅ (-7) ⋅ (-5)⋅ (-3)⋅ 1=945.
import java.util.*;

public class a{
   static char[] count;
   // static int[] count1;
   static long[] arr;
   //static char[] c;
   static long[] darr;
   // static int x;
   static long maxl;
   // static long minl;
   static long mod = 998244353l;
   static int n;
   static long a;
   static long b;
   static long c;
   static long d;
   static int x;
   static long y;
   static int m;
   static long k;
   static String str;
   static Set<Long> set;
   // static Map<Long,Long> map;
   static StringBuilder sb;

   // public static int log(long n){
   //     if(n == 0)
   //         return 0;

   //     if(n == 1)
   //         return 0;
   //     if(n == 2)
   //         return 1;
   //     double num = Math.log(n);
   //     double den = Math.log(2);
   //     if(den == 0)
   //         return 0;
   //     return (int)(num/den);
   // }

   // public static void swap(int i,int j){
   //     long temp = arr[j];
   //     arr[j] = arr[i];
   //     arr[i] = temp;
   // }



   public static void solve(){

      Arrays.sort(arr);
      long a = arr[n-1]*arr[n-2]*arr[n-3]*arr[n-4]*arr[n-5];
      long b = arr[0]*arr[1]*arr[n-1]*arr[n-2]*arr[n-3];
      long c = arr[0]*arr[1]*arr[2]*arr[3]*arr[n-1];
      long d = arr[0]*arr[1]*arr[3]*arr[2]*arr[4];
      long ans = Math.max(Math.max(Math.max(a,b),c),d);
      System.out.println(ans);

   }

   public static void main(String[] args) {

      Scanner sc = new Scanner(System.in);

      int t = sc.nextInt();
      while(t > 0){
         // set = new HashSet<>();
         // map = new HashMap<>();
//         a = sc.nextLong();
//         b = sc.nextLong();
//         c = sc.nextLong();
//         d = sc.nextLong();

         // long x = sc.nextLong();

         // maxl = Integer.MIN_VALUE;


         n = sc.nextInt();
         //k = sc.nextLong();
         // k = sc.nextInt();
         // // x = sc.nextInt();
         // // // c = sc.next().toCharArray();

         // // // k = sc.nextInt();
         arr = new long[n];
         // // // // // darr = new char[n];

         for(int i = 0; i < n ; i++){
            arr[i] = sc.nextLong();
         }



         // darr = new long[n];
         // for(int i = 0; i < n ; i++){
         //     darr[i] = sc.nextLong();
         // }
         // boolean flag = false;
         // str = sc.next();

         // x = sc.nextInt();



         //System.out.println(solve()?"Yes":"No");
         solve();
         //System.out.println(solve());
         // sb = new StringBuilder();
         // sb.append(str);

         t -= 1;
      }



   }
}