#include <stdio.h>
#include <stdlib.h>
int head[500],n;
void shiftdown(int note)
{
while(note*2<=n)//如果不存在子节点
{
int mi=head[note];//让最小值初始化为该节点
if(mi>head[note*2])//小领堆
mi=head[note*2];
if(note*2+1<=n)
if(mi>head[note*2+1])
mi=head[note*2+1];
if(mi==head[note])
break;
else if(mi==head[note*2])
head[note*2]=head[note],head[note]=mi,note=note*2;
else
head[note*2+1]=head[note],head[note]=mi,note=note*2+1;
}
}
void create_head()
{
for(int i=n/2; i>=1; i--)
{
shiftdown(i);
}
}
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)//i一定要从1开始
{
scanf("%d",&head[i]);
}
create_head();
while(--n)
{
printf("%d\n",head[1]);
head[1]=head[n+1];
shiftdown(1);
}
printf("%d\n",head[1]);
return 0;
}