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.
n = int(input())
p = list(map(float, input().split()))
p.sort()
dp = [[0.0 for _ in range(n)] for _ in range(n)]
for i in range(n):
    dp[i][i] = 1.0 - p[i]
    for j in range(i + 1, n):
        dp[i][j] = dp[i][j - 1] * (1.0 - p[j])

ans = p[-1]
for i in range(n):
    for j in range(i + 1, n):
        prob = 0
        for k in range(i, j + 1):
            if k == i:
                prob += p[i] * dp[i + 1][j]
            elif k == j:
                prob += p[j] * dp[i][j - 1]
            else:
                prob += dp[i][k - 1] * p[k] * dp[k + 1][j]

        ans = max(ans, prob)

print(ans)

