#include <stdio.h>

void swap(int*,int*);
int left(int);
int right(int);
int parent(int);
void maxHeapify(int *,int);
void buildMaxHeap(int *);

int length;

int main(){
  int i,n,A[500001];

  scanf("%d",&length);
  for(i=1;i<=length;i++) scanf("%d",&A[i]);
  
  buildMaxHeap(A);

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


void swap(int *a,int *b){
  int key;
  key=*a;
  *a=*b;
  *b=key;
}

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

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

int parent(int a){
  return a/2;
}



void maxHeapify(int *A,int i){
  int l,r,largest;
  l=left(i);
  r=right(i);
  if(l<=length && A[l]>A[i]) largest = l;
  else largest=i;

  if(r<=length && A[r]>A[largest]) largest = r;

  if(largest!=i){
    swap(&A[i],&A[largest]);
    maxHeapify(A,largest);
  }
  
}


void buildMaxHeap(int *A){
  int i;
  for(i=length/2;i>=1;i--){
     maxHeapify(A,i);
  }
  
}


