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


int heap[500005];
int H;

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 l = left(i);
    int r = right(i);
    int largest;
    if(l <= H && A[l] > A[i]) {
        largest = l;
    } else { 
        largest = i;
    }
    if(r <= H && A[r] > A[largest]) {
        largest = r;
    }
    if(largest != i) {
        int t = A[i];
        A[i] = A[largest];
        A[largest] = t;
        maxHeapify(A, largest);
    }
}

void buildMaxHeap(int A[]) {
	int i;
    for(i=H/2;i>0;i--) {
        maxHeapify(A, i);
    }
}

int main(){
	int i,n,t;
	scanf("%d\n", &n);
	H = n;
	
	for(i=1;i<=n;i++) {
		scanf("%d", &heap[i]);
	}

	buildMaxHeap(heap);

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

