//建堆
#include <cstdio>
#include <iostream>
using namespace std;
int n,a[110];
void update(int o){
int l=o<<1,r=o<<1|1,maxn;
if(l<=n && a[l]>a[o])maxn=l;
else maxn=o;
if(r<=n && a[r]>a[maxn])maxn=r;
if(maxn!=o){
swap(a[o],a[maxn]);
update(maxn);
}
}
void init(){
for(register int i=n/2;i;i--)update(i);
}
int main(){
scanf("%d",&n);
for(register int i=1;i<=n;i++)scanf("%d",&a[i]);
init();
for(register int i=1;i<=n;i++)printf("%d ",a[i]);
return 0;
}
// 排序输出
void solve(){
printf("%d ",a[1]);
swap(a[1],a[n]);
n--;
update(1);
}
//插入
void insert(int x){
a[++n]=x;
int y=n;
while(y<1){
int p=y/2;
if(a[y]>a[p]){
swap(a[y],a[p]);
y=p;
}
}
}