import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }

        int[] maxSuffix = new int[n];
        maxSuffix[n - 1] = arr[n - 1];
        for(int i = n - 2; i >= 0; i--) {
            maxSuffix[i] = Math.max(arr[i], maxSuffix[i + 1]);
        }

        Deque<Integer> stack = new ArrayDeque<>();
        List<Integer> result = new ArrayList<>();

        for(int i = 0; i < n; i++) {
            stack.push(arr[i]);
            // 尽可能将当前最大值出栈
            while(!stack.isEmpty() && stack.peek() == maxSuffix[i]) {
                result.add(stack.pop());
            }
        }

        // 剩下的出栈
        while(!stack.isEmpty()) {
            result.add(stack.pop());
        }

        // 输出结果
        for(int i = 0; i < result.size(); i++) {
            if (i > 0) System.out.print(" ");
            System.out.print(result.get(i));
        }
    }
}