#include <stdio.h>
#include <stdlib.h>
typedef struct Tree{
  int key;
  int parent;
  int left;
  int right;
}Tree;

int main(){
  int H,i,j,store;
  Tree *T;
  scanf("%d",&H);
  T=(Tree*)malloc(sizeof(Tree)*H);
  for(i=0;i<H;i++){
    T[i].key=2000000001;
    T[i].parent=-1;
    T[i].left=-1;
    T[i].right=-1;
  }
  
  for(i=0;i<H;i++){
    scanf("%d",&T[i].key);
    T[i].parent=(i+1)/2-1;
    if(2*i+1<H){
      T[i].left=2*i+1;
      if(2*i+2<H)
	T[i].right=2*i+2;
    }
  }
  
  for(i=T[H-1].parent;i!=-1;i--){
    j=i;
    while(T[j].left>0){
      if(T[T[j].left].key>=T[T[j].right].key){
	if(T[T[j].left].key>T[j].key){
	  store=T[j].key;
	  T[j].key=T[T[j].left].key;
	  T[T[j].left].key=store;
	  j=T[j].left;
	}
	else
	  j=H;
      }
      else
	if(T[T[j].right].key>T[j].key){
	  store=T[j].key;
	  T[j].key=T[T[j].right].key;
	  T[T[j].right].key=store;
	  j=T[j].right;
	}
	else
	  j=H;
    }
  }

  
  for(i=0;i<H;i++){
    printf(" %d",T[i].key);
  }
  printf("\n");
  return 0;
}