#include<stdio.h>
#include<algorithm>
using namespace std;
int a[100],n;
void shiftdown(int i)//调堆过程
{
int t,flag=0;
while(i*2<=n && flag==0)
{
if(a[i*2]>a[i])
t=i*2;
else
t=i;
if(i*2+1<=n)
{
if(a[t]<a[i*2+1])
t=i*2+1;
}
if(t!=i)
{
swap(a[t],a[i]);
i=t;
}
else
flag=1;
}
}
void create()///建堆
{
for(int i=n/2; i>=1; i--)
shiftdown(i);
}
void heapsort()
{
while(n>1)
{
swap(a[1],a[n]);
n--;
shiftdown(1);
}
}
int main()
{
int num;
scanf("%d",&num);
for(int i=1; i<=num; i++)
scanf("%d",&a[i]);
n=num;
create();
heapsort();
for(int i=1; i<=num; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}