#include <cstdio>
#include <algorithm>
using std::swap;
const int maxn = 10001;
int f[maxn], size, n;
void down(int i) {
int p, l, r;
while(true) {
p = i, l = i << 1, r = l + 1;
if (l <= size && f[p] < f[l]) p = l;
if (r <= size && f[p] < f[r]) p = r;
if (i == p) break;
swap(f[i], f[p]);
i = p;
}
}
void build() {
for (int i = size >> 1; i >= 1; --i)
down(i);
}
int main(void) {
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", f + i);
size = n;
build();
while(size > 1) {
swap(f[1], f[size]);
--size;
down(1);
}
for (int i = 1; i <= n; i++)
printf("%d ", f[i]);
printf("\n");
return 0;
}