Problem:
Score : 300 points

Problem Statement

You are given an integer sequence of length n, a_1, ..., a_n.
Let us consider performing the following n operations on an empty sequence b.

The i-th operation is as follows:

Append a_i to the end of b.

Reverse the order of the elements in b.

Find the sequence b obtained after these n operations.

Constraints

1 \leq n \leq 2\times 10^5

0 \leq a_i \leq 10^9

n and a_i are integers.

Input

Input is given from Standard Input in the following format:

n
a_1 a_2 ... a_n

Output

Print n integers in a line with spaces in between.
The i-th integer should be b_i.

Sample Input 1

4
1 2 3 4

Sample Output 1

4 2 1 3

After step 1 of the first operation, b becomes: 1.

After step 2 of the first operation, b becomes: 1.

After step 1 of the second operation, b becomes: 1, 2.

After step 2 of the second operation, b becomes: 2, 1.

After step 1 of the third operation, b becomes: 2, 1, 3.

After step 2 of the third operation, b becomes: 3, 1, 2.

After step 1 of the fourth operation, b becomes: 3, 1, 2, 4.

After step 2 of the fourth operation, b becomes: 4, 2, 1, 3.

Thus, the answer is 4 2 1 3.

Sample Input 2

3
1 2 3

Sample Output 2

3 1 2

As shown above in Sample Output 1, b becomes 3, 1, 2 after step 2 of the third operation. Thus, the answer is 3 1 2.

Sample Input 3

1
1000000000

Sample Output 3

1000000000

Sample Input 4

6
0 6 7 6 7 0

Sample Output 4

0 6 6 0 7 7

Solution in Java (OpenJDK 11.0.6) (judge verdict: Accepted)

import java.util.ArrayList;
import java.util.Scanner;


public class Main {

    public static String Y = "Yes";
    public static String N = "No";
    public static long MOD = (long) (Math.pow(10, 9) + 7);
    public static Scanner sc = new Scanner(System.in);
    static int h;
    static int w;
    static boolean[][] checked;
    static int[][] depth;

    public static void main(String[] args) {

        int n = ni();

        ArrayList<Long> li = new ArrayList<>();

        boolean isReverse = false;

        for (int i = 0; i < n; i++) {
            long a = nl();
            //li.add(a);
            if (isReverse) {
                isReverse = false;
            } else {
                isReverse = true;
            }

            if (isReverse) {
                li.add(0, a);
            } else {
                li.add(a);
            }
        }
        StringBuilder ans = new StringBuilder("");
        if (!isReverse) {
            for (int i = n - 1; i >= 0; i--) {
                String s = "" + li.get(i);
                ans.append(s + " ");
            }
        } else {
            for (int i = 0; i < n; i++) {
                String s = "" + li.get(i);
                ans.append(s + " ");
            }
        }

        out(ans.toString().trim());

    }

    /*
     * 以下メソッド集
     */

    public static void permutation(String q, String ans) {

        // Base Case
        if (q.length() <= 1) {
            System.out.println(ans + q);
        }
        // General Case
        else {
            for (int i = 0; i < q.length(); i++) {
                permutation(q.substring(0, i) + q.substring(i + 1), ans + q.charAt(i));
            }
        }
    }

    static char[][] same(char[][] c, int h, int w) {

        char[][] a = new char[h][w];
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                a[i][j] = c[i][j];
            }
        }
        return a;

    }

    static int countkuro(char[][] c) {

        int count = 0;
        for (char[] cc : c) {
            for (char ccc : cc) {
                if ('#' == ccc) {
                    count++;
                }
            }
        }
        return count;
    }

    static void debug() {

        out("---");
    }

    static void debug(Object a) {

        out("-------");
        out(a);
        out("-------");
    }

    static int ketasuu(int n) {

        String str = "" + n;
        return str.length();
    }

    static int account(String str) {

        String target = "AC";
        int count = 0;
        int len = str.length();
        for (int i = 0; i < len - 1; i++) {
            if (target.equals(str.substring(i, i + target.length()))) {
                count++;
            }
        }
        return count;
    }

    static int ni() {

        return sc.nextInt();
    }

    static long nl() {

        return sc.nextLong();
    }

    static double nd() {

        return sc.nextDouble();
    }

    static String n() {

        return sc.next();
    }

    static char[] nc() {

        return sc.next().toCharArray();
    }

    static int kaijo(int n) {

        if (n == 0 || n == 1) {
            return 1;
        } else {
            return n * kaijo(n - 1);
        }
    }

    static int fib(int n) {

        return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
    }

    static long lcm(long m, long n) {

        return m * n / gcd(m, n);
    }

    static int lcm(int m, int n) {

        return m * n / gcd(m, n);
    }

    static long gcd(long a, long b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static int gcd(int a, int b) {

        return (b == 0) ? a : gcd(b, a % b);
    }

    static void out(Object obj) {

        System.out.println(obj);
    }

    static void outn(Object obj) {

        System.out.print(obj);
    }

    static double max(double d, double e) {

        return Math.max(d, e);
    }

    static long max(long a, long b) {

        return Math.max(a, b);
    }

    static long min(long d, long e) {

        return Math.min(d, e);
    }

    static int min(int a, int b) {

        return Math.min(a, b);
    }
}


class XY {

    int h;
    int w;
    int d;

    XY(int h, int w, int d) {
        this.h = h;
        this.w = w;
        this.d = d;
    }
}