1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 #include<cstring>
5 #include<cmath>
6 using namespace std;
7
8 int N;
9 int h[10010];
10
11 void heap(int n)
12 {
13 while((n<<1)<=N)
14 {
15 int t=n;
16 if((n<<1)<=N&&h[n<<1]<h[n]) t=n<<1;
17 if((n<<1|1)<=N&&h[n<<1|1]<h[t]) t=n<<1|1;
18 if(t!=n) swap(h[n],h[t]),n=t;
19 else break;
20 }
21 }
22 void Make()
23 {
24 for(int i=N/2;i>=1;--i)
25 heap(i);
26 }
27 int top()
28 {
29 return h[1];
30 }
31 void pop()
32 {
33 swap(h[1],h[N]); N--; heap(1);
34 }
35 void push(int x)
36 {
37 ++N; h[N]=x;
38 int n=N;
39 while((n>>1)>=1)
40 {
41 if(h[n]>h[n>>1]) swap(h[n],h[n>>1]),n>>=1;
42 else break;
43 }
44 }
45 bool empty()
46 {
47 if(!N) return true;
48 else return false;
49 }
50 void Sort()
51 {
52 while(N)
53 {
54 printf("%d ",h[1]);
55 pop();
56 }
57 }
58
59 int main()
60 {
61 scanf("%d",&N);
62 for(int i=1;i<=N;++i)
63 scanf("%d",&h[i]);
64 Make();
65 Sort();
66 return 0;
67 }