Read problems statements in Mandarin Chinese  and Russian. 
Sereja is playing a game called Winner Eats Sandwich with his friends. There are N persons in total, including Sereja. Sereja is allotted the number 1, while his friends are allotted numbers from 2 to N. A set of this game consists of M parts. Probability that a player numbered i wins part j of any set is p[i][j]. Sereja and his friends play all the M parts of the first set. If someone wins all the parts, he is declared the winner of the match. Otherwise, another set of the game is played. A match of the game continues until someone wins a set. The winner of the set is then declared the winner of the game, and gets to eat the sandwich.
Now Sereja is interested in the probability with which he can win the match in no more than 10^(10^(10^(10^(10^{10})))) sets. This is because the sandwich gets cold by the end of these many sets, and Sereja hates cold sandwiches.

------ Input ------ 

First line contains the number of test cases, T. The description of the T tests follows. First line of each test case contains two space separated integers N, M. Each of the next N lines contain M space-separated numbers, with the j^{th} number of the i^{th} line denoting p[i][j]. All numbers will be given with not more than 4 digits after the decimal point.

------ Output ------ 

For each test case, output the probability Sereja is interested in, with 6 digits after the decimal point.

------ Constraints ------ 

$1 ≤ T ≤ 3$
$1 ≤ N ≤ 13$
$1 ≤ M ≤ 10000$
$it is guaranteed that for each j, the sum p[1][j] + p[2][j] + ... + p[N][j] is 1$

Subtask 1 (10 points)

$1 ≤ N, M ≤ 4$

Subtask 2 (90 points)

$Original constrains$

------ Example ------ 

Input:
2
2 2
1.0000 1.0000
0.0000 0.0000
2 3
0.5000 0.5000 0.5000
0.5000 0.5000 0.5000 

Output:
1.000000
0.500000

Difficulty: VERY_HARD

Solutions:
from decimal import *
import math
t = int(input())
for i in range(0, t):
	(n, m) = map(int, input().split())
	prob = Decimal(1)
	for j in input().split():
		prob = prob * Decimal(j)
	sumprob = prob
	for j in range(1, n):
		tprobi = Decimal(1)
		for k in input().split():
			tprobi = tprobi * Decimal(k)
		sumprob = sumprob + tprobi
	if prob > 0.0:
		print('{0:.6f}'.format(prob / sumprob))
	else:
		print('{0:.6f}'.format(Decimal(0)))


import math
from decimal import *
t = int(input())
b = [0.0] * 1000000
c = [0.0] * 1000000
d = [0.0] * 1000000
k = 0
go = float(0.0)
while t:
	t = t - 1
	(n, m) = map(int, input().split())
	sum1 = 0.0
	for i in range(1, n + 1):
		g = m
		b = list(map(float, input().split()))
		for k in range(1, m + 1):
			c[k] = b[k - 1]
		while g != 1:
			if g % 2 == 0:
				v = int(g / 2)
				j = 1
				for k in range(1, v + 1):
					d[k] = Decimal(c[j]) * Decimal(c[j + 1])
					j = j + 2
				for k in range(1, v + 1):
					c[k] = Decimal(d[k])
				g = v
			else:
				v = int(g / 2)
				j = 1
				for k in range(1, v + 1):
					d[k] = Decimal(c[j]) * Decimal(c[j + 1])
					j = j + 2
				d[v + 1] = c[g]
				for k in range(1, v + 2):
					c[k] = Decimal(d[k])
				g = v + 1
		if i == 1:
			go = Decimal(c[1])
		sum1 = Decimal(sum1) + Decimal(c[1])
	if sum1 == 0:
		go = 0.0
	else:
		go = Decimal(Decimal(go) / Decimal(sum1))
	print(format(go, '.6f'))


t = int(input())
for it in range(t):
	(n, m) = [int(word) for word in input().split()]
	wsig = [1.0] * 13
	wpower = [0] * 13
	is_zero = [False] * 13
	all_zero = True
	for i in range(n):
		words = input().split()
		for j in range(m):
			ival = int(words[j][0] + words[j][2:])
			if ival == 0:
				is_zero[i] = True
				wsig[i] = 0
				break
			fval = float(words[j])
			wsig[i] *= fval
			while wsig[i] < 1.0:
				wpower[i] -= 4
				wsig[i] *= 10000.0
		if not is_zero[i]:
			all_zero = False
	if all_zero:
		res = 0
	else:
		maxpower = max(wpower)
		wsum = 0.0
		for i in range(n):
			wpower[i] -= maxpower
			wsum += wsig[i] * 10 ** wpower[i]
		w0 = wsig[0] * 10 ** wpower[0]
		res = w0 / wsum
	print('%.6f' % res)


from decimal import *
getcontext().prec = 100

def main():
	t = int(input())
	for test in range(t):
		p = []
		(n, m) = list(map(int, input().split(' ')))
		for i in range(n):
			x = input().strip().split(' ')
			inp = list(map(Decimal, x))
			p.append(inp)
		a = Decimal('1.0')
		for i in range(m):
			a *= p[0][i]
		s = Decimal('0.0')
		for i in range(1, n):
			b = Decimal('1.0')
			for j in range(m):
				b *= p[i][j]
			s += b
		if a + s == 0:
			ans = 0
		else:
			ans = a / (a + s)
		print('{0:.6f}'.format(ans))
	return 0
main()


import math
from decimal import *
t = int(input())
while t:
	t = t - 1
	(n, m) = map(int, input().split())
	for i in range(1, n + 1):
		b = list(map(float, input().split()))
		s = 1.0
		for j in range(0, m):
			s = Decimal(s) * Decimal(b[j])
		if i == 1:
			sum1 = Decimal(s)
			go = Decimal(s)
		else:
			sum1 = Decimal(sum1) + Decimal(s)
	if sum1 != 0:
		go = Decimal(go) / Decimal(sum1)
	else:
		go = 0.0
	print(format(go, '.6f'))