#include<stdio.h>
#include<stdlib.h>

int H;	

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

void swap(int *x, int *y){
	int trader;
	trader = *x;
	*x = *y;
	*y = trader;
}//trading x y

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 > 0; i--){
        maxHeapify(A, i);
			}
	}
	
int main(){
	int i;
	int *A;
	
	scanf("%d", &H);
	A = malloc(sizeof(int) * (H + 1));	
	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;
}