#include <stdio.h>
int h[100],n;
void swap(int x,int y)
{
int temp;
temp=h[x];
h[x]=h[y];
h[y]=temp;
}
void siftdownmin(int x)
{
int flag=0,t;
while(x*2<=n&&!flag)
{
if(h[x]>h[x*2])
{
t=x*2;
}
else
{
t=x;
}
if(x*2+1<=n&&h[t]>h[x*2+1])
{
t=x*2+1;
}
if(t!=x)
{
swap(x,t);
x=t;
}
else
flag=1;
}
}
void siftdownmax(int x)
{
int flag=0,temp;
while(x*2<=n&&!flag)
{
if(h[x]<h[x*2])
{
temp=x*2;
}
else
{
temp=x;
}
if(h[x]<h[x*2+1])
{
temp=x*2+1;
}
if(x!=temp)
{
swap(x,temp);
x=temp;
}
else
{
flag=1;
}
}
}
void creatmin(int x)
{
for(int i=x/2;i>=1;i--)
{
siftdownmin(i);
}
}
void creatmax(int x)
{
for(int i=x/2;i>=1;i--)
{
siftdownmax(i);
}
}
void siftup(int x)
{
h[++n]=x;
int i=n,flag=0;
while(i>1&&!flag)
{
if(h[i]<h[i/2])
{
swap(i,i/2);
i/=2;
}
else
{
flag=1;
}
}
}
void delmin()
{
h[1]=h[n--];
siftdownmin(1);
}
void delmax()
{
h[1]=h[n--];
siftdownmax(1);
}
int siftkmin(int k)
{
creatmin(k);
for(int i=k+1;i<=n;i++)
{
if(h[i]>h[1])
{
h[1]=h[i];
creatmin(k);
}
}
return h[1];
}
int siftkmax(int k)
{
creatmax(int k);
while(int i=k+1;i<=n;i++)
{
if(h[i]<h[1])
{
h[1]=h[i];
creatmax(k);
}
}
}
void headsort()
{
while(n--)
{
swap(1,n);
siftdownmax(1);
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&h[i]);
}
creatmin(n);
for(int i=1;i<=n;i++)
printf("%d ",h[i]);
return 0;
}