#include <bits/stdc++.h>
using namespace std;
inline int input() {
  int ret = 0;
  bool isN = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') isN = 1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    ret = ret * 10 + c - '0';
    c = getchar();
  }
  return isN ? -ret : ret;
}
inline void output(int x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  int len = 0, data[10];
  while (x) {
    data[len++] = x % 10;
    x /= 10;
  }
  if (!len) data[len++] = 0;
  while (len--) putchar(data[len] + 48);
  putchar('\n');
}
const int MAXN = 110;
int n;
double p[MAXN], q[MAXN];
bool cmp(double a, double b) { return a > b; }
inline double get(int e) {
  double a = 1;
  for (int i = 0; i < e; i++) {
    a *= q[i];
  }
  double ans = 0;
  for (int i = 0; i < e; i++) {
    if (p[i] != 1) ans += a / q[i] * p[i];
  }
  return ans;
}
inline void in() {
  scanf("%d", &n);
  double ans = 0;
  for (int i = 0; i < n; i++)
    scanf("%lf", &p[i]), ans = (ans > p[i] ? ans : p[i]);
  sort(p, p + n, cmp);
  for (int i = 0; i < n; i++) q[i] = 1.0 - p[i];
  for (int i = 1; i < n + 1; i++) {
    ans = (ans > get(i) ? ans : get(i));
  }
  printf("%.9lf\n", ans);
}
int main() {
  in();
  return 0;
}
