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


void Down_heap(int *tree, int pos, int n)
{
	int x = tree[pos];
	int left_pos = pos * 2;


	while(left_pos <= n){
		if(left_pos + 1 <= n && tree[left_pos] < tree[left_pos + 1])
			left_pos++;

		if(x < tree[left_pos]){
			tree[pos] = tree[left_pos];
			pos = left_pos;
			left_pos *= 2;
		}else
			break;
	}
		tree[pos] = x;
}


int main()
{
	int n;
	int *tree;
	int key;
	int i;

	scanf("%d", &n);

	tree = (int *)malloc(sizeof(int) * (n + 1));

	// parent, left, rightの情報を付加
	for(i = 1; i <= n; i++)
		scanf("%d", &tree[i]);

	// 小さい値を沈める
	for(i = n / 2; i > 0; i--)
		Down_heap(tree, i, n);

	for(i = 1; i <= n; i++)
		printf(" %d", tree[i]);
	printf("\n");

	return 0;
}
