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())
probabilities = list(map(float, input().split()))

# Sort the friends by their probabilities in descending order
sorted_probabilities = sorted(enumerate(probabilities), key=lambda x: -x[1])

# Initialize the maximum probability and the count of friends with maximum probability
max_probability = sorted_probabilities[0][1]
max_probability_count = 1

# Count the number of friends with maximum probability
for i in range(1, n):
    if sorted_probabilities[i][1] == max_probability:
        max_probability_count += 1
    else:
        break

# Calculate the probability that Andrey won't get upset
if max_probability_count == 1:
    print(max_probability)
else:
    # Probability that Andrey gets exactly one problem
    one_problem_probability = max_probability * (1 - max_probability) ** (max_probability_count - 1)
    print(f'{one_problem_probability:.12f}')
