#include <iostream>
#include <vector>
using namespace std;

int main() {
	int n;
	vector<int> a;

	// loeme sisendi
	cin >> n;
	a.resize(n);
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}

	// teeme kuhjaks
	for (int i = 0; i < n; ++i) {
		int k = i; // jooksev element, mida lisame
		while (k > 0) { // viime jooksva üles
			int kk = (k - 1) / 2; // tema ülemus
			if (a[k] > a[kk]) {
				// vahetame jooksva ülemuseks
				int t = a[k]; a[k] = a[kk]; a[kk] = t;
				k = kk;
			} else {
				break;
			}
		}
	}

	// teeme massiiviks tagasi
	for (int i = n - 1; i > 0; --i) {
		// vahetame maksimaalse lõppu
		int t = a[0]; a[0] = a[i]; a[i] = t;
		int k = 0; // jooksev element, mis sai tippu
		while (k < i) {
			int kk = k; // maksimaalne jooksva ja tema alluvate hulgas
			if (2 * k + 1 < i) {
				if (a[kk] < a[2 * k + 1]) {
					kk = 2 * k + 1;
				}
			}
			if (2 * k + 2 < i) {
				if (a[kk] < a[2 * k + 2]) {
					kk = 2 * k + 2;
				}
			}
			if (kk > k) {
				// vahetame jooksva alluvaks
				int t = a[k]; a[k] = a[kk]; a[kk] = t;
				k = kk;
			} else {
				break;
			}
		}
	}

	// väljastame tulemuse
	for (int i = 0; i < n; ++i) {
		if (i > 0) {
			cout << " ";
		}
		cout << a[i];
	}
	cout << "\n";

	return 0;
}
