#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int p[2000006];//将数组定义在主函数外,节省内存

//本题实际上是希望考生先将数据按从大到小输出,再将数据逆向输出
int main() {
    int n{};//定义最大数n
    cin>>n;
    getchar();//释放回车符号
    for(int i=0;i<n;i++)//将n个数据写入数组p
    {
        cin>>p[i];
    }

    stack<long> a;
    vector<long> c;//定义栈a和序列c
    int k=n;//这里是需要一个数来记录1~n中的最大降序排列
    for(int i=0;i<n;i++)
    {
        a.push(p[i]);//先将p中的数据挨个入栈
        if(a.top()==k)//如果碰到最大数
        {
            c.push_back(a.top());//将最大数push进序列c
            k--;//最大数的值减一
            a.pop();//原最大数出栈
            continue;//似乎可有可无,此处保留
        }

        
    }   

    for(int i=0;i<c.size();i++)//c中的数据此时是降序排列,直接输出
    {
        cout<<c[i]<<" ";
    }

    while(!a.empty())
    {
        cout<<a.top();//再将栈顶数据挨个输出
        a.pop();
        if(!a.empty())//对空格的处理
        cout<<" ";
    }
    





    return 0;
}
// 64 位输出请用 printf("%lld")