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

int left(int);
int right(int);
void maxHeapify(int *, int);
void buildMaxHeap(int *);

int n;

int main(){
        int *A;
        int i;

        scanf("%d", &n);
        A = malloc(n * sizeof(int));

        for(i = 0 ; i < n ; i++){
                scanf("%d", &A[i]);
        }

        buildMaxHeap(A);

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

        return 0;
}

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

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

void maxHeapify(int *A, int i){
        int l, r, largest, buf;
        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){
                buf = A[i];
                A[i] = A[largest];
                A[largest] = buf;
                maxHeapify(A, largest);
        }
}

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

