//建最大堆
#include<iostream>
#include<algorithm> 
using namespace std;
#define maxx 2000000
int H,A[maxx+1];
void maxHeapify(int i)
{
	int l,r,largest;
	l=i*2;
	r=i*2+1;
	if(H>=l&&A[l]>A[i])
		largest=l;
	else largest=i;
	if(r<=H&&A[r]>A[largest])
		largest=r;
	if(largest!=i)
	{
		int tt=A[i];
		A[i]=A[largest];
		A[largest]=tt;
		//swap(A[i],A[largest]);
		maxHeapify(largest);
	}
}
int main()
{
	cin>>H;
	for(int i=1;i<=H;i++)
	{
		cin>>A[i];
	}
	for(int i=H/2;i>=1;i--)
	{
		maxHeapify(i);
	}
	for(int i=1;i<=H;i++)
	{
		cout<<" "<<A[i];
	}
	cout<<endl;
	return 0;
} 
