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.
# -*- coding:utf-8 -*-

"""

created by shuangquan.huang at 1/16/20

"""

import collections
import time
import os
import sys
import bisect
import heapq
from typing import List


def cal(probs):
    np = [1-p for p in probs]
    
    p = 0
    left = 1
    right = 1
    for v in np:
        right *= v
        
    for i in range(len(probs)):
        right /= np[i]
        cp = left * right * probs[i]
        left *= np[i]
        p += cp
        
    return p
    

def solve(N, A):
    A.sort(reverse=True)
    ans = A[0]
    
    for size in range(2, N+1):
        ans = max(ans, cal(A[:size]))
    
    print(ans)
    



N = int(input())
A = [float(x) for x in input().split()]
solve(N, A)