#include <stdio.h>
int h;
int getleft(int i){
  i=i*2;
  if(i>h) return 500002;
  else return i;
}
 int getright(int i){
  i=i*2+1;
  if(i>h) return 500002;
  else return i;
}
 void maxHeapify(int A[],int i){
  int l = getleft(i),r = getright(i),int largest,j;
  if( l <= h && A[l] > A[i]) largest = l;
  else largest = i;
  if( r <= h && A[r] > A[largest]) largest = r;
  if (largest != i){
    j=A[i];
    A[i]=A[largest];
    A[largest]=j;
    maxHeapify(A,largest);
  }
}
 void buildMaxHeap(int A[]){
    int i;
    for(i=h/2;i>=1;i--){
      maxHeapify(A,i);
    }
}
int main(){
    int i,A[500001];
    scanf("%d",&h);     
    for(i=1;i<=h;i++){
      scanf("%d",&A[i]);
    }
    buildMaxHeap(A);
     for(i=1;i<=h;i++){
      printf(" %d",A[i]);
    }
    printf("\n");
    return 0;
 }