#include<cstdio>
#include<iostream>
using namespace std;
int hp[105],n,siz;
void push(int x)//输(插)入
{
if(hp[x]>=hp[x/2])
return;
else
{
int a=hp[x];
hp[x]=hp[x/2];
hp[x/2]=a;
push(x/2);
}
}
void del()//删除堆顶 维护堆
{
int now=1;
while(2*now<=siz)//有儿子
{
int lison=2*now;
if(lison<siz && hp[lison+1]<hp[lison])//有右儿子 且 左儿子>右儿子
lison++;
if(hp[now]>hp[lison])
swap(hp[now],hp[lison]);
else break;
now=lison;
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>hp[i];
push(i);
}
for(siz=n;siz>=2; )//堆排
{
swap(hp[1],hp[siz]);//将最小的置于末尾
siz--;
del();
}
for(int i=1;i<=n;i++)//从大到小
cout<< hp[i] <<" ";
return 0;
}