#include <bits/stdc++.h>
template <typename QvQ>
inline QvQ Min(QvQ a, QvQ b) {
  if (a < b) return a;
  return b;
}
template <typename QvQ>
inline QvQ Max(QvQ a, QvQ b) {
  if (a > b) return a;
  return b;
}
template <typename QvQ>
inline void read(QvQ &x) {
  x = 0;
  int f = 1;
  char c = getchar();
  for (; c < '0' || c > '9'; c = getchar())
    if (c == '-') f = -1;
  for (; c >= '0' && c <= '9'; c = getchar())
    x = (x << 1) + (x << 3) + (c ^ 48);
  x = x * f;
}
template <typename QvQ>
inline void write(QvQ x) {
  if (x < 0) x = -x, putchar('-');
  if (x > 9) write(x / 10);
  putchar(x % 10 + 48);
}
using namespace std;
priority_queue<int> q;
int n, a[10005];
vector<double> v;
int main() {
  read(n);
  double temp;
  for (register int i = 1; i <= n; ++i) cin >> temp, v.push_back(temp);
  int T = n - 1;
  while (T--) {
    int ee = v.size();
    double mn = 0x7f7f7f7f;
    int pos;
    for (register int i = 0; i < ee; ++i) {
      if (v[i] < mn) pos = i, mn = v[i];
    }
    if (pos == 0) {
      v[1] = (v[0] + v[1]) / 2;
    } else if (pos == ee - 1) {
      v[ee - 2] = (v[ee - 2] + v[ee - 1]) / 2;
    } else {
      if (v[pos - 1] < v[pos + 1]) {
        v[pos - 1] = (v[pos - 1] + v[pos]) / 2;
      } else
        v[pos + 1] = (v[pos + 1] + v[pos]) / 2;
    }
    v.erase(v.begin() + pos);
  }
  cout << v[0];
  return 0;
}
