#include <stdio.h>

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

int main()
{
    int i, n;
    scanf("%d", &n);
    int A[n + 1];
    for(i = 1; i <= n; i++) scanf("%d", &A[i]);
    
    buildMaxHeap(A, n);
    for (i = 1; i <= n ; i++) printf(" %d", A[i]);
    printf("\n");
    return 0;
}


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


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

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

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

