#include <iostream>
#include <vector>
#include <stack>
#include <algorithm> // for std::max
using namespace std;
void fast_io()//提速
{
ios_base::sync_with_stdio(false);
//解耦C和C++的I/O,使得cin与cout的速度与scanf和printf相近
cin.tie(NULL);
//解除cin与cout的绑定
cout.tie(NULL);
//解除cout与其它流的绑定
}
int main()
{
fast_io();
int n;
scanf("%d",&n);
vector<int> p(n);
for(int j=0;j<n;j++)
scanf("%d",&p[j]);
vector<int> next_greater(n);//存储从p[i]到p[n-1]的最大数
next_greater[n-1]=p[n-1];
for(int i=n-2;i>=0;i--)
{
next_greater[i]=max(next_greater[i+1],p[i]);
}
stack<int>s;
vector<int>result;
int i=0;//遍历p
while(i<n||!s.empty())
{
if(!s.empty()&&(i>=n||s.top()>next_greater[i]))
//贪心:若栈顶元素大于后面所有元素,则出栈,否则入栈。
{
result.push_back(s.top());
s.pop();
}
else
{
s.push(p[i]);
i++;
}
}
//打印
for(int k=0;k<result.size();k++)
{
if(k>0)
printf(" ");
printf("%d",result[k]);
}
}