#include<stdio.h>
#define M 500000

int n;

/*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 largest;
    int l,r;
    int tmp;
    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){
        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);
    }
}


int main(void){
    int i;

    int heap[M];
    scanf("%d",&n);
    for(i=1;i<n+1;i++){
        scanf("%d",&heap[i]);
    }
    
    buildMaxHeap(heap);

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