#include <bits/stdc++.h>
using namespace std;
inline int gi() {
  int f = 1, sum = 0;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -f;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    sum = (sum << 3) + (sum << 1) + ch - '0';
    ch = getchar();
  }
  return f * sum;
}
const double eps = 1e-7;
double p[210], ans;
int vis[110], n;
struct matrix {
  double a[210][210];
  matrix operator*(matrix b) {
    matrix c;
    for (register int i = 0; i <= n * 2; i++)
      for (register int j = 0; j <= n * 2; j++) {
        c.a[i][j] = 0;
        for (register int k = 0; k <= n * 2; k++)
          c.a[i][j] = max(c.a[i][j], a[i][k] + b.a[k][j]);
        c.a[i][j] /= 2;
      }
    return c;
  }
} S;
int main() {
  n = gi();
  int flag = 1;
  for (register int i = 0; i <= n; i++) scanf("%lf", &p[i]);
  for (register int i = 0; i <= n * 2; i++)
    for (register int j = 0; j <= n * 2; j++)
      if (i + j >= n && (i + n - j & 1) == 0 && i - j <= n && j - i <= n)
        S.a[i][j] = p[(i + n - j) / 2];
      else
        S.a[i][j] = -1e18;
  double ans = 0;
  for (register int i = 1; i <= 50; i++) S = S * S;
  for (register int i = 0; i <= 2 * n; i++) ans = max(ans, S.a[0][i]);
  printf("%.10lf\n", ans);
  return 0;
}
