#include <stdio.h>
#include <stdlib.h>
 
int left(int i){
  return 2*i;
}
 
int right(int i){
  return 2*i+1;
}
 
void maxHeapify(int *A,int i,int n){
  int l=left(i), r=right(i), largest, tmp;
 
  if(l<=n && A[l]>A[i]) largest=l;

  else largest=i;
 
  if(r<=n && A[r]>A[largest])largest=r;
 
  if(largest!=i){
	tmp=A[i];
	A[i]=A[largest];
	A[largest]=tmp;
	
    maxHeapify(A,largest,n);
  }
}
 
void buildMaxHeap(int *A,int n){
  int i;
  for(i=n;i>=1;i--) maxHeapify(A,i,n);
}
     
main(){
  int n,i;
  int *A;
 
  scanf("%d",&n);
 
  A=(int *)malloc((n+1)*sizeof(int));
 
  for(i=1;i<=n;i++) scanf("%d",&A[i]);
 
  buildMaxHeap(A,n);
 
  for(i=1;i<=n;i++) printf(" %d",A[i]);
  printf("\n");
 
  return 0;
}