#include <stdio.h>
#include <stdlib.h>
#define N 500005 //ヒープの個数出すよ

int Left(int i){ //左の子のアドレス値だよ
  return 2*i;
}
 
int Right(int i){ //右の子のアドレス値だよ
  return 2*i+1;
}
 
void maxHeapify(int *A,int i,int n){ //大きいやつを上にもっていく関数やが、親子関係が成立するまで再帰。
  int l=Left(i),r=Right(i),largest,tmp;
 
  if(l<=n && A[l]>A[i]) largest=l;//もし自分（i）より左下の子が大きかったらlargestに保存するやが、そうじゃなかったらiを保存や
  else largest=i;
 
  if(r<=n && A[r]>A[largest])largest=r; //んでもし左の子より右の子が大きかったり、親より右の子が大きかったら、右の子をlargestに保存
 
  if(largest!=i){ //largestが自分じゃない場合な、入れ替えて再帰や。
    tmp=A[i];
    A[i]=A[largest];
    A[largest]=tmp;
    maxHeapify(A,largest,n);
  }
}

main(){
  int n,i;
  int A[N];
 
  scanf("%d",&n);
 
  for(i=1;i<=n;i++) scanf("%d",&A[i]); //for文回して頭も回すで
 
  for(i=n;i>=1;i--) maxHeapify(A,i,n); //buildMaxHeap関数作るんめんどい
 
  for(i=1;i<=n;i++) printf(" %d",A[i]);

  printf("\n");
 
  return 0;
}