#include<stdio.h>

int n;

void MH(int murata[],int i){
    
    int l,r,e,tmp;
    
    l = 2 * i;
    
    r = (2 * i) + 1;
    
    if(l <= n && murata[l] > murata[i]){
        e = l;
    }
    else e = i;
    
    if(r <= n && murata[r] > murata[e]) e = r;
    
    if(e != i){
        
        tmp=murata[i];
        murata[i]=murata[e];
        murata[e]=tmp;
        MH(murata,e);
        
    }
}

void BM(int murata[]){
    int i;
    for(i = n/2 ; i >=1 ; i--) MH(murata,i);
}



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