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.awt.Paint;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.Set;
import java.util.Stack;

public class CodeForces {
	
	static class Track{
		
		int start;
		int end;
		
		public Track(int start, int end) {
			super();
			this.start = start;
			this.end = end;
		}

		@Override
		public String toString() {
			return "Track [start=" + start + ", end=" + end + "]";
		}

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result + end;
			result = prime * result + start;
			return result;
		}
		
		
		
		
	}

	static class Range {

		String s;

		public Range(String s) {
			this.s = s;
		}

		@Override
		public String toString() {
			return s;
		}
	}

	static class RangeComparator implements Comparator<Range> {

		public int compare(Range o1, Range o2) {
			String[] v1 = o1.s.split("#");
			String[] v2 = o2.s.split("#");
			int val1 = Integer.parseInt(v1[1]) - Integer.parseInt(v1[0]);
			int val2 = Integer.parseInt(v2[1]) - Integer.parseInt(v2[0]);
			if (val1 > val2) {
				return -1;
			} else if (val2 > val1) {
				return 1;
			}
			return o1.s.compareTo(o2.s);
		}

	}

	public static void printArray(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}

	public static int[] getIntArray(BufferedReader br) throws IOException {
		String line = br.readLine();
		String[] values = line.split(" ");
		int[] arr = new int[values.length];
		for (int i = 0; i < values.length; i++) {
			arr[i] = Integer.parseInt(values[i]);
		}
		return arr;
	}

	public static long[] getLongArray(BufferedReader br) throws IOException {
		String line = br.readLine();
		String[] values = line.split(" ");
		long[] arr = new long[values.length];
		for (int i = 0; i < values.length; i++) {
			arr[i] = Long.parseLong(values[i]);
		}
		return arr;
	}
	
	public static List<Long> getLongList(BufferedReader br) throws IOException {
		String line = br.readLine();
		String[] values = line.split(" ");
		List<Long> list = new ArrayList<>();
		for (int i = 0; i < values.length; i++) {
			list.add(Long.parseLong(values[i]));
		}
		return list;
	}
	
	public static String[] getStringArray(BufferedReader br) throws IOException {
		String line = br.readLine();
		String[] values = line.split(" ");
		return values;
	}

	public static Set<Integer> getFactors(int n) {
		Set<Integer> set = new HashSet<>();
		for (int i = 2; i <= Math.sqrt(n); i++) {
			if (n % i == 0) {
				set.add(i);
				set.add(n / i);
			}
		}
		return set;
	}

	public static int[] decode(String s) {
		String[] v = s.split("#");
		int[] arr = new int[2];
		arr[0] = Integer.parseInt(v[0]);
		arr[1] = Integer.parseInt(v[1]);
		return arr;
	}

	public static String encode(int a, int b) {
		return a + "#" + b;
	}

	public static long lcm(long a, long b) {
		BigInteger bigGCD = BigInteger.valueOf(a).gcd(BigInteger.valueOf(b));
		long val = bigGCD.longValue();
		long prod = a * b;
		return prod / val;
	}

	public static Set<Integer> getPrimes() {
		Set<Integer> primes = new HashSet<>();
		for (int i = 2; i < 20000; i++) {
			int fac = 0;
			for (int j = 1; j <= Math.sqrt(i); j++) {
				if (i % j == 0) {
					fac += 2;
				}
			}

			if (fac == 2) {
				primes.add(i);
			}
		}

		System.out.println(primes.size());

		return primes;
	}
	

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = br.readLine();
		int t = Integer.parseInt(line);		
//		int t = 1;

		while (t-- > 0) {
			line = br.readLine();
			int n = Integer.parseInt(line);
			int[] arr = getIntArray(br);
//			int k = arr[1];
//			List<Long> list = getLongList(br);
			
			Arrays.sort(arr);
			
			long ans = (long)arr[arr.length-1]*(long)arr[arr.length-2]*(long)arr[arr.length-3]*(long)arr[arr.length-4]*(long)arr[arr.length-5];
			
			long temp = (long)arr[0]*(long)arr[1]*(long)arr[arr.length-1]*(long)arr[arr.length-2]*(long)arr[arr.length-3];
			ans = Math.max(temp, ans);
			temp = (long)arr[0]*(long)arr[1]*(long)arr[2]*(long)arr[3]*(long)arr[arr.length-1];
			ans = Math.max(temp, ans);
			
			System.out.println(ans);
			
			
			
		}

	}
	

}


