#include<algorithm>
#include<cstdio>
#include<iostream>
using namespace std;
int heap_size=0;
int heap[100001];
void put(int d) //heap[1]为堆顶
{
int now,next;
heap[++heap_size]=d;
now=heap_size;
while(now>1)
{
next=now>>1;//取父节点相当于now/2
if(heap[now]>=heap[next])
break;
swap(heap[now],heap[next]);
now=next;
}
}
int get() //heap[1]为堆顶
{
int now=1,next,res=heap[1];
heap[1]=heap[heap_size--];//弹出首元素,用尾元素补上
while(now*2<=heap_size)
{
next=now*2;//左孩子
if(next < heap_size && heap[next + 1] < heap[next]) next++;
if(heap[now] <= heap[next])
break;
swap(heap[now], heap[next]);
now=next;
}
return res;
}
int main()
{
int q;
cin>>q;
for(int i=1;i<=q;i++)
{
cin>>heap[i];
put(heap[i]);
}
for(int i=1;i<=q;i++)
{
cout<<get()<<" ";
}
return 0;
}