#include <stdio.h>

int h;

int getleft(int i){
  i=i*2;
  if(i>h) return 500002;
  else return i;
}

int getright(int i){
  i=i*2+1;
  if(i>h) return 500002;
  else return i;
}

void maxHeapify(int A[],int i){
  int l = getleft(i),r = getright(i);
  int largest,j;

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

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

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

	buildMaxHeap(A);

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