#include<stdio.h>

void buildupmaxheap(int *);
void maxheapify(int *,int);
void swap(int *,int *);
int left(int);
int right(int);

int heap;

int main(){
 
  int A[500000];
  scanf("%d",&heap);
  int i;
  for(i=1;i<=heap;i++){
    scanf("%d",&A[i]);
  }

  buildupmaxheap(A);
 
  for(i=1;i<=heap;i++){
    printf(" %d",A[i]);
  }

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

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

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

void buildupmaxheap(int *A){
  int i;
  for(i=heap/2;i>=1;i--){
    maxheapify(A,i);
  }
}

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

  if(largest!=i){
    swap(&A[i],&A[largest]);
    maxheapify(A,largest);
  }
}
void swap(int *a,int *b){
  int temp;
  temp=*a;
  *a=*b;
  *b=temp;
  return;
}

