import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
// 参考:https://chat.deepseek.com/share/xbfwwa19v00i85knpb
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int[] arr = new int[N];
// 顺序遍历存入arr
for(int i = 0;i<N;i++){
arr[i] = in.nextInt();
}
// 贪心算法
// 计算每个位置之后的最大值
int[] maxAfter = new int[N+1];
maxAfter[N] = 0;
// 输入:2 1 5 3 4
// maxAfter: 5 5 5 4 4 0
for(int i = N-1;i>=0;i--){
maxAfter[i] = Math.max(arr[i],maxAfter[i+1]);
}
Stack<Integer> st = new Stack<>();
List<Integer> res = new ArrayList<>();
// 顺序入栈
for(int i = 0;i<N;i++){
st.push(arr[i]);
// 出栈时机:当栈顶元素大于后续未入栈元素,就出栈(因为这是当前能出的最大数)
while(!st.isEmpty() && st.peek() >= maxAfter[i+1]){
res.add(st.pop());
}
}
for(int i = 0;i<res.size();i++){
System.out.printf("%d",res.get(i));
if(i != res.size()-1){
System.out.printf(" ");
}
}
}
}