#include <cstdio>
#include <cstdlib>
#include <stack>
#include <algorithm>
using namespace std;
const int MAXN = 100000;
int val[MAXN];
int n;
void MinAdjust(int i, int n) {
    int j, temp = val[i];
	j = 2 * i + 1;
	while (j < n) {
		if (j + 1 < n && val[j + 1] > val[j]) //在左右孩子中找最小的
			j++;
		if (val[j] <= temp)
			break;
		val[i] = val[j];     //把较小的子结点往上移动,替换它的父结点
		i = j;
		j = 2 * i + 1;
	}
	val[i] = temp;
}
void HeapSort() {
	for (int i = n / 2 - 1; i >= 0; i--)
		MinAdjust(i, n);
	for (int i = n - 1; i >= 1; i--)
	{
		swap(val[i], val[0]);
		MinAdjust(0, i);
	}
} // HeapSort

int main() {
	scanf("%d", &n);
	for (int i = 0;i < n;i++) {
		scanf("%d", &val[i]);
	}
	HeapSort();
	for (int i = 0;i < n;i++) {
		printf("%d ", val[i]);
	}
	puts("");
	return 0;
}
/**************************************************************
	Problem: 2176
	User: admin
	Language: C++
	Result: Accepted
	Time:37 ms
	Memory:1536 kb
****************************************************************/