#include<stdio.h>
#define MAX 100005
#define NIL -1
int heap_size;
struct Node{
  int p;
  int l;
  int r;
  int k;
};
struct Node T[MAX];
void maxHeapify(int i){
	int r, l;
	int largest;
	int tmp;
	l=2*i;
	r=2*i+1;
	if( l<= heap_size && T[l].k>T[i].k ) largest=l;
	else largest=i;
	if( r<=heap_size && T[r].k>T[largest].k ) largest=r;
	if( largest!=i ){
		tmp=T[i].k;
		T[i].k=T[largest].k;
		T[largest].k=tmp;
		maxHeapify(largest);
	}
}
void buildMaxHeap(void){
	int i;
	for( i=heap_size/2; i>0; i-- ){
		maxHeapify(i);
	}
}
int main(void){
  int i;
  scanf("%d", &heap_size);
  for ( i=1; i<=heap_size; i++ ) T[i].p=T[i].l=T[i].r=T[i].k=NIL;
  for ( i=1; i<=heap_size; i++ ){
    scanf("%d", &T[i].k);
  }
  for( i=1; i<=heap_size; i++ ){
    T[i].p=T[i/2].k;
    T[i].l=T[2*i].k;
    T[i].r=T[2*i+1].k;
  }
  buildMaxHeap();
  for ( i=1; i<=heap_size; i++ ){
	  printf(" %d", T[i].k);
  }
  printf("\n");
  return 0;
}