import java.io.*;
import java.util.StringTokenizer;

public final class Main{
    public static void main(String[] args){
        java.util.Scanner stdIn = new java.util.Scanner(System.in);
        
        long n = stdIn.nextLong();
        double[] v = new double[(int)n];
        for(int i=0; i<v.length; i++){
            v[i] = stdIn.nextDouble();
        }

        Union union = new Union((int)n);
        
        for(int num=0; num<((int)n)-1; num++){
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        }
        System.out.println(v[union.pare(1)]);
    }
}

class Union{
    int[] dis;
    public Union(int n){
        dis = new int[n];
        for(int i=0; i<dis.length; i++){
            dis[i] = i;
        }
    }

    public void add(int a, int b){
        dis[b] = a;
    }

    public int pare(int a){
        int idx = a;
        while(dis[idx] != idx){
            idx = dis[idx];
        }
        return idx;
    }
}

class FastScanner {
    private BufferedReader reader = null;
    private StringTokenizer tokenizer = null;

    public FastScanner(InputStream in) {
        reader = new BufferedReader(new InputStreamReader(in));
        tokenizer = null;
    }

    public String next() {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(reader.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return tokenizer.nextToken();
    }

    public String nextLine() {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                return reader.readLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        return tokenizer.nextToken("\n");
    }

    public long nextLong() {
        return Long.parseLong(next());
    }
    
    public long nextInt() {
        return Integer.parseInt(next());
    }

} import java.io.*; io.* java import java.util.StringTokenizer; StringTokenizer java.util public final class Main{
    public static void main(String[] args){
        java.util.Scanner stdIn = new java.util.Scanner(System.in);
        
        long n = stdIn.nextLong();
        double[] v = new double[(int)n];
        for(int i=0; i<v.length; i++){
            v[i] = stdIn.nextDouble();
        }

        Union union = new Union((int)n);
        
        for(int num=0; num<((int)n)-1; num++){
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        }
        System.out.println(v[union.pare(1)]);
    }
} Main public static void main(String[] args){
        java.util.Scanner stdIn = new java.util.Scanner(System.in);
        
        long n = stdIn.nextLong();
        double[] v = new double[(int)n];
        for(int i=0; i<v.length; i++){
            v[i] = stdIn.nextDouble();
        }

        Union union = new Union((int)n);
        
        for(int num=0; num<((int)n)-1; num++){
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        }
        System.out.println(v[union.pare(1)]);
    } main {
        java.util.Scanner stdIn = new java.util.Scanner(System.in);
        
        long n = stdIn.nextLong();
        double[] v = new double[(int)n];
        for(int i=0; i<v.length; i++){
            v[i] = stdIn.nextDouble();
        }

        Union union = new Union((int)n);
        
        for(int num=0; num<((int)n)-1; num++){
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        }
        System.out.println(v[union.pare(1)]);
    } java.util.Scanner stdIn = new java.util.Scanner(System.in); stdIn new java.util.Scanner(System.in) long n = stdIn.nextLong(); n stdIn.nextLong() stdIn.nextLong stdIn double[] v = new double[(int)n]; v new double[(int)n] (int)n for(int i=0; i<v.length; i++){
            v[i] = stdIn.nextDouble();
        } int i=0; int i=0; i 0 i<v.length i v.length v v.length i++ i++ i {
            v[i] = stdIn.nextDouble();
        } {
            v[i] = stdIn.nextDouble();
        } v[i] = stdIn.nextDouble() v[i] v i stdIn.nextDouble() stdIn.nextDouble stdIn Union union = new Union((int)n); union new Union((int)n) for(int num=0; num<((int)n)-1; num++){
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        } int num=0; int num=0; num 0 num<((int)n)-1 num ((int)n)-1 ((int)n) 1 num++ num++ num {
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        } {
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        } int minVal = 10000; minVal 10000 int minIdx = 0; minIdx 0 for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            } int i=0; int i=0; i 0 i<v.length i v.length v v.length i++ i++ i {
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            } {
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            } if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                } minVal>v[i] minVal v[i] v i {
                    minVal = (int)v[i];
                    minIdx = i;
                } minVal = (int)v[i] minVal (int)v[i] v i minIdx = i minIdx i int secondVal = 10000; secondVal 10000 int secondIdx = 0; secondIdx 0 for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            } int i=0; int i=0; i 0 i<v.length i v.length v v.length i++ i++ i {
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            } {
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            } if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                } secondVal>v[i] && minIdx != i secondVal>v[i] secondVal v[i] v i minIdx != i minIdx i {
                    secondVal = (int)v[i];
                    secondIdx = i;
                } secondVal = (int)v[i] secondVal (int)v[i] v i secondIdx = i secondIdx i double temp = (v[minIdx] + v[secondIdx]) / 2.0; temp (v[minIdx] + v[secondIdx]) / 2.0 (v[minIdx] + v[secondIdx]) v[minIdx] v minIdx v[secondIdx] v secondIdx 2.0 v[minIdx] = temp v[minIdx] v minIdx temp v[secondIdx] = 1000000 v[secondIdx] v secondIdx 1000000 union.add(minIdx, secondIdx) union.add union minIdx secondIdx System.out.println(v[union.pare(1)]) System.out.println System.out System System.out v[union.pare(1)] v union.pare(1) union.pare union 1 String[] args args class Union{
    int[] dis;
    public Union(int n){
        dis = new int[n];
        for(int i=0; i<dis.length; i++){
            dis[i] = i;
        }
    }

    public void add(int a, int b){
        dis[b] = a;
    }

    public int pare(int a){
        int idx = a;
        while(dis[idx] != idx){
            idx = dis[idx];
        }
        return idx;
    }
} Union int[] dis; dis public Union(int n){
        dis = new int[n];
        for(int i=0; i<dis.length; i++){
            dis[i] = i;
        }
    } Union {
        dis = new int[n];
        for(int i=0; i<dis.length; i++){
            dis[i] = i;
        }
    } dis = new int[n] dis new int[n] n for(int i=0; i<dis.length; i++){
            dis[i] = i;
        } int i=0; int i=0; i 0 i<dis.length i dis.length dis dis.length i++ i++ i {
            dis[i] = i;
        } {
            dis[i] = i;
        } dis[i] = i dis[i] dis i i int n n public void add(int a, int b){
        dis[b] = a;
    } add {
        dis[b] = a;
    } dis[b] = a dis[b] dis b a int a a int b b public int pare(int a){
        int idx = a;
        while(dis[idx] != idx){
            idx = dis[idx];
        }
        return idx;
    } pare {
        int idx = a;
        while(dis[idx] != idx){
            idx = dis[idx];
        }
        return idx;
    } int idx = a; idx a while(dis[idx] != idx){
            idx = dis[idx];
        } dis[idx] != idx dis[idx] dis idx idx {
            idx = dis[idx];
        } idx = dis[idx] idx dis[idx] dis idx return idx; idx int a a class FastScanner {
    private BufferedReader reader = null;
    private StringTokenizer tokenizer = null;

    public FastScanner(InputStream in) {
        reader = new BufferedReader(new InputStreamReader(in));
        tokenizer = null;
    }

    public String next() {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(reader.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return tokenizer.nextToken();
    }

    public String nextLine() {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                return reader.readLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        return tokenizer.nextToken("\n");
    }

    public long nextLong() {
        return Long.parseLong(next());
    }
    
    public long nextInt() {
        return Integer.parseInt(next());
    }

} FastScanner private BufferedReader reader = null; reader null private StringTokenizer tokenizer = null; tokenizer null public FastScanner(InputStream in) {
        reader = new BufferedReader(new InputStreamReader(in));
        tokenizer = null;
    } FastScanner {
        reader = new BufferedReader(new InputStreamReader(in));
        tokenizer = null;
    } reader = new BufferedReader(new InputStreamReader(in)) reader new BufferedReader(new InputStreamReader(in)) tokenizer = null tokenizer null InputStream in in public String next() {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(reader.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return tokenizer.nextToken();
    } next {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(reader.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return tokenizer.nextToken();
    } if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(reader.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } tokenizer == null || !tokenizer.hasMoreTokens() tokenizer == null tokenizer null !tokenizer.hasMoreTokens() tokenizer.hasMoreTokens() tokenizer.hasMoreTokens tokenizer {
            try {
                tokenizer = new StringTokenizer(reader.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } try {
                tokenizer = new StringTokenizer(reader.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            } IOException e {
                throw new RuntimeException(e);
            } throw new RuntimeException(e); new RuntimeException(e) {
                tokenizer = new StringTokenizer(reader.readLine());
            } tokenizer = new StringTokenizer(reader.readLine()) tokenizer new StringTokenizer(reader.readLine()) return tokenizer.nextToken(); tokenizer.nextToken() tokenizer.nextToken tokenizer public String nextLine() {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                return reader.readLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        return tokenizer.nextToken("\n");
    } nextLine {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                return reader.readLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        return tokenizer.nextToken("\n");
    } if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                return reader.readLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } tokenizer == null || !tokenizer.hasMoreTokens() tokenizer == null tokenizer null !tokenizer.hasMoreTokens() tokenizer.hasMoreTokens() tokenizer.hasMoreTokens tokenizer {
            try {
                return reader.readLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } try {
                return reader.readLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            } IOException e {
                throw new RuntimeException(e);
            } throw new RuntimeException(e); new RuntimeException(e) {
                return reader.readLine();
            } return reader.readLine(); reader.readLine() reader.readLine reader return tokenizer.nextToken("\n"); tokenizer.nextToken("\n") tokenizer.nextToken tokenizer "\n" public long nextLong() {
        return Long.parseLong(next());
    } nextLong {
        return Long.parseLong(next());
    } return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next public long nextInt() {
        return Integer.parseInt(next());
    } nextInt {
        return Integer.parseInt(next());
    } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next public final class Main{
    public static void main(String[] args){
        java.util.Scanner stdIn = new java.util.Scanner(System.in);
        
        long n = stdIn.nextLong();
        double[] v = new double[(int)n];
        for(int i=0; i<v.length; i++){
            v[i] = stdIn.nextDouble();
        }

        Union union = new Union((int)n);
        
        for(int num=0; num<((int)n)-1; num++){
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        }
        System.out.println(v[union.pare(1)]);
    }
} public final class Main{
    public static void main(String[] args){
        java.util.Scanner stdIn = new java.util.Scanner(System.in);
        
        long n = stdIn.nextLong();
        double[] v = new double[(int)n];
        for(int i=0; i<v.length; i++){
            v[i] = stdIn.nextDouble();
        }

        Union union = new Union((int)n);
        
        for(int num=0; num<((int)n)-1; num++){
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        }
        System.out.println(v[union.pare(1)]);
    }
} Main
import java.io.*;
import java.util.StringTokenizer;

public final class Main{
    public static void main(String[] args){
        java.util.Scanner stdIn = new java.util.Scanner(System.in);
        
        long n = stdIn.nextLong();
        double[] v = new double[(int)n];
        for(int i=0; i<v.length; i++){
            v[i] = stdIn.nextDouble();
        }

        Union union = new Union((int)n);
        
        for(int num=0; num<((int)n)-1; num++){
            int minVal = 10000;
            int minIdx = 0;
            for(int i=0; i<v.length; i++){
                if(minVal>v[i]){
                    minVal = (int)v[i];
                    minIdx = i;
                }
            }
            int secondVal = 10000;
            int secondIdx = 0;
            for(int i=0; i<v.length; i++){
                if(secondVal>v[i] && minIdx != i){
                    secondVal = (int)v[i];
                    secondIdx = i;
                }
            }
    
            double temp = (v[minIdx] + v[secondIdx]) / 2.0;
            v[minIdx] = temp;
            v[secondIdx] = 1000000;
    
            union.add(minIdx, secondIdx);
        }
        System.out.println(v[union.pare(1)]);
    }
}

class Union{
    int[] dis;
    public Union(int n){
        dis = new int[n];
        for(int i=0; i<dis.length; i++){
            dis[i] = i;
        }
    }

    public void add(int a, int b){
        dis[b] = a;
    }

    public int pare(int a){
        int idx = a;
        while(dis[idx] != idx){
            idx = dis[idx];
        }
        return idx;
    }
}

class FastScanner {
    private BufferedReader reader = null;
    private StringTokenizer tokenizer = null;

    public FastScanner(InputStream in) {
        reader = new BufferedReader(new InputStreamReader(in));
        tokenizer = null;
    }

    public String next() {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(reader.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return tokenizer.nextToken();
    }

    public String nextLine() {
        if (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                return reader.readLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        return tokenizer.nextToken("\n");
    }

    public long nextLong() {
        return Long.parseLong(next());
    }
    
    public long nextInt() {
        return Integer.parseInt(next());
    }

}
