#include <stdio.h>
#define H 500000

int parent( int );
int left( int );
int right( int );
void maxHeapify( int [], int );
void buildMaxHeap( int [] );
int n;

int main(){
    int A[H+1], i; //the reason I choose H+1 is o-origin

    //input
    scanf("%d", &n);
    for(i = 1; i<=n; i++) scanf("%d", &A[i]);
    //sort
    buildMaxHeap( A );
    //print
    for(i = 1; i<=n; i++) printf(" %d", A[i]);
    printf("\n");
    
    return 0;
}

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, tmp, largest; //this l means the left index, r means the right index
    l = left(i);
    r = right(i);
    //compare the values
    if(l <= n && A[l] > A[i]) largest = l;
    else largest = i;
    if(r <= n && A[r] > A[largest]) largest = r;
    //check it compared the value  
    if(largest != i){
	tmp = A[i];
	A[i] = A[largest];
	A[largest] = tmp;
	maxHeapify( A, largest );
    }
}

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

