Problem: Tanmay is a legendary spammer - everyone in the spamming world knows and admires his abilities to spam anyone, anytime, anywhere. He decided to guide one of his mentors, named Arjit, as part of the Apex body of spamming. 

Tanmay has no doubts on his skills of teaching and making his mentor, Arjit, learn about the art of spamming. But, he surely has serious doubt on Arjit's skills of learning, implementing and executing whatever he has decided to teach him as part of the syllabus of spamming.

Tanmay has sent Arjit to test his skills, but he's getting extremely anxious about the performance of his mentee. So, to calm himself down he asks you to help him find out the maximum and the minimum productivity attained by Arjit in his travel.

Arjit has the option to visit N Facebook groups - where every Facebook group has some potential which can be negative, zero or positive. Now, he can decide to visit a group if he wants to or not. (Depending on the lessons taught to him by the great master!) The total productivity attained by Arjit is the product of all the groups he decides to visit.

Given the values of all the groups, find out the maximum and minimum spamming potential he can achieve and let Tanmay know about it, so that he calm himself down.

Input format:
The first line contains an integer, T, denoting the number of test cases. Each line of the test case contains an integer, N, denoting the size of the array. The next line contains N integers, denoting the value of the numbers in the array.

Output format:
Print the maximum product you can obtain followed by the minimum product. A space separates both these outputs. Answer to each test case is on a new line.  

Constraints:
1 ≤ T ≤ 500
1 ≤ N ≤ 18
-10 ≤ Ni ≤ 10  

Note:
In some cases only one element may be considered for minimum or maximum product.
If the array is (1, 2, 3), minimum product is 1 whereas maximum product is 6.
When the array is (-1, -2), minimum product is -2 whereas maximum product is 2.

SAMPLE INPUT
2
4
1 0 2 10
3
0 0 0

SAMPLE OUTPUT
20 0
0 0

Explanation

In the first test case, the maximum product is the product of all the numbers except 0, whereas the minimum product is the product of all numbers including 0.
In the second test case, the maximum and minimum product both are 0 as 0 is the only available number.

Solution (in PYTHON):

Solution:
def get_max(a):
	if len(a) == 1:
		return a[0]
	neg = []
	pos = []
	zero = []
	for x in a:
		if x < 0:
			neg.append(x)
		elif x == 0:
			zero.append(x)
		else:
			pos.append(x)
	neg.sort()
	pos.sort()
	maxiP = 1
	if len(pos) > 0:
		for x in pos:
			maxiP *= x
	maxiN = 1
	if len(neg) > 1:
		for x in neg:
			maxiN *= x
		if len(neg) % 2:
			maxiN /= neg[len(neg)-1]
	pro = maxiN * maxiP
	if len(zero) == len(a):
		return 0
	if len(pos) == 0 and len(neg) == 1:
		return 0
	return pro

def get_min(a):
	if len(a) == 1:
		return a[0]
	else:
		neg = []
		pos = []
		zero = []
		for x in a:
			if x < 0:
				neg.append(x)
			elif x == 0:
				zero.append(x)
			else:
				pos.append(x)
		neg.sort()
		pos.sort()
		if len(neg) == 0:
			return min(a)
		if len(zero) == len(a):
			return 0
		maxiP = 1
		if len(pos) > 0:
			for x in pos:
				maxiP *= x
		maxiN = 1
		if len(neg) >= 1:
			for x in neg:
				maxiN *= x
			if len(neg) % 2 != 1:
				maxiN /= neg[len(neg)-1]
		return maxiN * maxiP
	
t = int(raw_input())
for i in range(t):
	n = int(raw_input().strip())
	a = list(map(int, raw_input().strip().split()))
	a.sort()
	maxi = get_max(a)
	mini = get_min(a)
	print("%d %d"%(maxi,mini))