#include <stdio.h>
#define MAX 500001

int A[MAX];
int n;

int left(int i){
    return 2*i;
}

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

void maxHeapify(int *A, int i){

    int l,r;
    int largest;

    l = left(i);
    r = right(i);

    if( l <= n && A[l] > A[i] ){
        largest = l;
    }else{
        largest = i;
    }

    if( r <= n && A[r] > A[largest] ){
        largest = r;
    }

    if( largest != i ){

        int temp = A[i];
        A[i] = A[largest];
        A[largest] = temp;
        maxHeapify(A,largest);
    }

}

void buildMaxHeap(int *A){
    
    int i;

    for( i = n/2 ; i > 0 ; i-- ){
        maxHeapify(A,i);
    }

}

int main(){

    int i;

    scanf("%d",&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;
}