#include <cstdio>
#include <iostream>
using namespace std;
#define N 1000001
int a[N],n;
void headjust(int i,int size)
{
int left = i * 2,right = left + 1;
int max = i;
if(i <= size / 2)
{
if(left <= size && a[left] > a[max])
max = left;
if(right <= size && a[right] > a[max])
max = right;
if(max != i)
{
swap(a[i],a[max]);
headjust(max,size);
}
}
}
void build(int size)
{
for(int i = size/2;i >= 1;i --)
headjust(i,size);
}
void headsort(int size)
{
build(size);//初始化
堆// for(int i = 1;i <= n;i ++)
// printf("%d ",a[i]);
// printf("\n");
int len = size;
while(len > 1)
{
swap(a[1],a[len]);
len --;
headjust(1,len);
//调整堆 }
}
int main()
{
while(~scanf("%d",&n))
{
for(int i = 1;i <= n;i ++)
scanf("%d",&a[i]);
headsort(n);
//int en = n - k;
printf("%d",a[n]);
for(int i = n - 1;i > en;i --)
printf(" %d",a[i]);
puts("");
}
return 0;
}