#include<stdio.h>
#include<stdlib.h>
int d[100001];
void jh(int x,int y){
int i=d[x],j=d[y];
d[x]=j; d[y]=i;
}
int main(){
int n,i,j,k;
scanf("%d",&n);
for (i=1;i<=n;i++){
scanf("%d",&d[i]);
k=i;
while (k>1 && d[k/2]>d[k]){ //建立初始堆
jh(k,k/2); k/=2;
}
}
while (i>1){
printf("%d ",d[1]);
i--; d[1]=d[i]; k=1; //不断覆盖首结点
while (k*2<i){
k*=2;
if ((d[k+1]<d[k]) && (k+1<i)) k++;
if (d[k/2]>d[k]) jh(k/2,k);
}
}
system("pause>nul");
return 0;
}