#include <stdio.h>
int H;

int left(int x){return 2*x;}
int right(int x){return 2*x+1;}
void maxHeapify(int A[], int i);
void buildMaxHeap(int A[]);

int main(){
  int i;
  int A[500000];
  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]);
  }
  puts("");

  return 0;
}




void maxHeapify(int A[], int i){
  int l,r,tmp;
  int largest;
  l = left(i);
  r = right(i);
  if(l <= H && A[l] > A[i]){
    largest = l;
  } else {
    largest = i;
  }
  if(r <= H && A[r] > A[largest]){
    largest = r;
  }
  if(largest !=i){
    tmp = A[i];
    A[i]=A[largest];
    A[largest]= tmp;
    maxHeapify(A,largest);
  }

}void buildMaxHeap(int A[]){
  int i;
  for(i = H/2;i > 0;i--){
    maxHeapify(A,i);
  }
}