/* B Maximum Heap */
#include<stdio.h>

int heap_size;

void maxHeapify(int A[],int i);
void buildMaxHeap(int A[]);
int left(int i);
int right(int i);

int main(){
  int i;
  
  scanf("%d",&heap_size);
  int A[heap_size+1];

  /* scan A[1...heap_size] */
  for(i=1;i<=heap_size;i++){
    scanf("%d",&A[i]);
  }
  
  buildMaxHeap(A);

  /* print*/
  for(i=1;i<=heap_size;i++){
    printf(" %d",A[i]);
  }
  printf("\n");
  return 0;
}

void maxHeapify(int A[],int i){
  int temp;
  int l,r,largest;
  l=left(i);
  r=right(i);

  if(l<=heap_size&&A[l]>A[i]){
    largest=l;
  }else{
    largest=i;
  }
  if(r<=heap_size&&A[r]>A[largest]){
    largest=r;
  }
  if(largest!=i){
    temp=A[i];
    A[i]=A[largest];
    A[largest]=temp;
    maxHeapify(A, largest);
  }
}

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

int left(int i){
  return 2*i;
}

int right(int i){
  return 2*i+1;
}