#include <stdio.h>
#define NIL -1
#define MAX 252


int n;
int r, l, p;

void swap(int *x, int *y) {
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
} 

void maxHeap(int T[], int i) {
    l  =  left(i);
    r  =  right(i);
    p  =  parent(i);
    int max;
    if (l  <= n && T[l] > T[i]) max = l;
    else max = i;
    if (r <= n && T[r] > T[max]) max = r;
    if (max != i){
        swap(&T[i], &T[max]);
        maxHeap(T, max);
    }
}

void buildMaxHeap(int T[]){
    int i;
    for(i = n/2; i > 0; i--)
        maxHeap(T, i);
}


int parent(int i) {
    return i/2;
}

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

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

int main() {

    int i = 1;
    int T[MAX];

    while(i < MAX+1) {
        T[i] = NIL;
        i++;
    }

    scanf("%d", &n);
    for(i = 1; i < n+1; i++) {
        scanf("%d", &T[i]);
    }
    buildMaxHeap(T);
    for(i = 1; i < n; i++) {
        printf(" %d", T[i]);
    }
    printf(" %d\n", T[n]);

    return 0;
}