#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 2000000;
int H, A[maxn + 1];
void maxHeapify(int i) // 递归函数,比较父节点与左右子节点的值。若比最大子节点小,则交换最大子节点与父节点。
{
int l, r, largest;
l = 2 * i;
r = 2 * i + 1;
if (l <= H && A[l] > A[i]) // 从父节点和左右子节点中选出最大的元素
largest = l;
else
largest = i;
if (r <= H && A[r] > A[largest])
largest = r;
if (largest != i)
{
swap(A[i], A[largest]); // 将最大的元素与父节点元素互换
maxHeapify(largest); // 递归
}
}
int main()
{
cin >> H;
for (int i = 1; i <= H; i++)
cin >> A[i];
for (int i = H / 2; i >= 1; i--)
maxHeapify(i);
for (int i = 1; i <= H; i++)
{
cout << " " << A[i];
}
cout << endl;
return 0;
}