#include<stdio.h>
#define MAX 1000001
int parent(int);
int left(int);
int right(int);
void maxheapify(int *,int);
void buildmaxheap(int*);
void swap(int *,int *);
int H;
int main(){
  int n,A[MAX],i;
  scanf("%d",&n);
  H=n;
  for(i=1;i<=n;i++){
    scanf("%d",&A[i]);
  }
  buildmaxheap(A);
  for(i=1;i<=n;i++){
    printf(" %d",A[i]);
  }
  printf("\n");
  return 0;
}
void swap(int *p1,int *p2){
  int temp;
  temp=*p1;
  *p1=*p2;
  *p2=temp;
}
int parent(int i){
return i/2;
}
int left(int i){
  return 2*i;
}
int right(int i){
  return 2*i+1;
}
void maxheapify(int A[],int i){
  int l,r,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){
    swap(&A[i],&A[largest]);
    maxheapify(A,largest);
  }
}
void buildmaxheap(int A[]){
  int i;
  for(i=H/2;i>=1;i--){
    maxheapify(A,i);
  }
}
    
    
    
  

