fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim()
        .split_whitespace()
        .map(|e| e.parse().ok().unwrap())
        .collect()
}

fn main() {
    let n = read::<usize>();
    let mut a = read_vec::<i32>();

    let x = calc(n, &mut a);
    println!("{}", x);
}

fn calc(n: usize, a: &mut [i32]) -> f64 {
    a.sort();
    let mut s: i32 = a[0];
    for i in 1..n {
        s += a[i] * pow_of_2(i - 1);
    }
    return s as f64 / pow_of_2(n - 1) as f64;
}


fn pow_of_2(x: usize) -> i32 {
    return 2i32.pow(x as u32);
}
