#include <bits/stdc++.h>
using namespace std;
template <class T>
using vec = vector<T>;
template <class T>
using vvec = vec<vec<T> >;
template <class T, class U>
using vep = vec<pair<T, U> >;
template <class T>
using PQ = priority_queue<T>;
using ll = long long;
using vll = vec<ll>;
using vvll = vvec<ll>;
using pll = pair<ll, ll>;
using vpll = vec<pll>;
using str = string;
static const long long INF = 1LL << 59;
static const int iINF = 1LL << 30;
static const double dINF = 1e290;
static const long long MOD = (ll)1e9 + 7;
static const double PI = 3.14159265358979323846;
template <typename T>
T min(vec<T> v) {
  return *min_element((v).begin(), (v).end());
}
template <typename T>
T max(vec<T> v) {
  return *max_element((v).begin(), (v).end());
}
template <typename T>
inline bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T>
inline bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T>
void debug(T t) {
  cerr << t << "\n";
}
template <typename T, typename... Args>
void debug(T t, Args... args) {
  cerr << t << " ";
  debug(args...);
}
template <typename T>
void out(T t) {
  cout << t << "\n";
}
template <typename T, typename... Args>
void out(T t, Args... args) {
  cout << t << " ";
  out(args...);
}
template <typename T>
istream &operator>>(istream &is, vec<T> &v) {
  for (auto &a : v) is >> a;
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, vec<T> &v) {
  os << "[";
  for (ll(i) = 0; (i) < (v.size() - 1); (i)++) os << v[i] << ", ";
  os << v[v.size() - 1] << "]";
  return os;
}
template <typename T, typename U>
ostream &operator<<(ostream &os, pair<T, U> &p) {
  os << "(" << p.first << ", " << p.second << ")";
  return os;
}
template <size_t N, typename T>
ostream &operator<<(ostream &os, array<T, N> &v) {
  os << "[";
  for (ll(i) = 0; (i) < (N - 1); (i)++) os << v[i] << ", ";
  os << v[N - 1] << "]";
  return os;
}
template <typename T, typename U>
ostream &operator<<(ostream &os, map<T, U> &mp) {
  os << "{ ";
  for (auto &p : mp) os << p.first << ": " << p.second << ", ";
  os << "}";
  return os;
}
void solve() {
  ll N;
  cin >> N;
  priority_queue<float, vec<float>, greater<float> > v;
  for (ll(i) = 0; (i) < (N); (i)++) {
    ll a;
    cin >> a;
    v.push(a);
  }
  while (v.size() > 1) {
    ll p = v.top();
    v.pop();
    ll q = v.top();
    v.pop();
    v.push((p + q) / 2.);
  }
  out(v.top());
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.setf(ios::fixed);
  cout.precision(20);
  ;
  solve();
  return 0;
}
