#include <stdio.h>
#define H 500000

void maxHeapify(int *,int);
void buildMaxHeap(int *);

int A[H],n;

int main()
{
	int k,p,l,r,i;
	
	scanf("%d",&n);
	
	for(i=1;i<=n;i++){
		scanf("%d",&A[i]);
	}
	
	buildMaxHeap(A);
	
	for(i=1;i<=n;i++){
		printf("%d ",A[i]);
	}
	printf("\n");
	
	return 0;
}

void maxHeapify(int *A,int i)
{
	int l,r,largest,temp;
	
	l = 2*i;
	r = (2*i)+1;
	// 左の子、自分、右の子で値が最大のノードを選ぶ
	if(l <= n && A[l] > A[i]){
		largest = l;
	}
	else{
		largest = i;
	}
	
	if(r <= n && A[r] > A[largest]){
		largest = r;
	}
	
	if(largest != i){// i の子の方が値が大きい場合
		temp = A[i];
		A[i] = A[largest];
		A[largest] = temp;
		maxHeapify(A, largest); // 再帰的に呼び出し
	}
}

void buildMaxHeap(int *A)
{
	int i;
	
	for(i=n/2;i>0;i--){
		maxHeapify(A,i);
	}
}