#include<bits/stdc++.h>
using namespace std;
#define clr(a) memset(a, 0, sizeof(a))
const int maxn = 1e3 +10;
const int INF = 0x3f3f3f3f;
int tree[maxn];
void swap(int t[], int a, int b){
int temp = t[a];
t[a] = t[b];
t[b] = temp;
return;
}
void heapify(int tree[], int n, int i){
if(i >= n) return;
int l = i * 2 + 1;
int r = i * 2 + 2;
int maxx = i;
if(tree[l] > tree[maxx] && l < n) maxx = l;
if(tree[r] > tree[maxx] && r < n) maxx = r;
if(maxx != i){
swap(tree, maxx, i);
heapify(tree, n, maxx);
}
}
void build_heap(int tree[], int n){
for(int i = (n-2)/2; i >= 0; i--){
heapify(tree, n, i);
}
}
void heap_sort(int tree[], int n){
build_heap(tree, n);
for(int i = n-1; i >= 0; i--){
swap(tree, i, 0);
heapify(tree, i, 0);
}
}
int main(){
int tree[] = {2, 5, 3, 1, 10, 4};
int n = 6;
//build_heap(tree, n);
//heapify(tree, n, 0);
heap_sort(tree, n);
for(int i = 0; i < n; i++){
printf("%d\n", tree[i]);
}
return 0;
}