Andrey needs one more problem to conduct a programming contest. He has *n* friends who are always willing to help. He can ask some of them to come up with a contest problem. Andrey knows one value for each of his fiends — the probability that this friend will come up with a problem if Andrey asks him.

Help Andrey choose people to ask. As he needs only one problem, Andrey is going to be really upset if no one comes up with a problem or if he gets more than one problem from his friends. You need to choose such a set of people that maximizes the chances of Andrey not getting upset.
The first line contains a single integer *n* (1 ≤ *n* ≤ 100) — the number of Andrey's friends. The second line contains *n* real numbers *p*<sub class="lower-index">*i*</sub> (0.0 ≤ *p*<sub class="lower-index">*i*</sub> ≤ 1.0) — the probability that the *i*-th friend can come up with a problem. The probabilities are given with at most 6 digits after decimal point.

def dp(N, P):
	Mem = []
	for n in range(N + 1):
		Mem.append((0.0, 0.0))
	Mem[N] = (1.0, 0.0);
	for i in reversed(range(N)):
		p = Mem[i + 1];
		noHelp, oneHelp = p[0], p[1]

		useI, result = noHelp*P[i] + oneHelp*(1 - P[i]), oneHelp
		Mem[i] = p
		if(result < P[i]):
			result = P[i]
			Mem[i] = (1 - P[i], P[i])
		if(result < useI):
			Mem[i] = (noHelp*(1 - P[i]), useI)
			result = P[i];
	return Mem[0]
if __name__ == '__main__':
	N = int(input())
	P = list(map(float, input().split()))
	print(dp(N, P)[1]);