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));
}
}
}