program zhopa;
type masyvas = array[1..1000] of integer;
function readshit(var arr : masyvas) : integer;
var i, j, n : integer;
begin
n := 0;
readln(j);
randomize;
for i := 1 to j do
begin
arr[i] := random(100);
n := n + 1;
end;
readshit := n;
end;
procedure swap(var a, b : integer);
var t : integer;
begin
t := a;
a := b;
b := t;
end;
procedure heapify(var arr : masyvas; i : integer; n : integer);
var left, right, max : integer;
begin
left := 2 * i;
right := left + 1;
if (left <= n) and (arr[left] > arr[i]) then max := left
else max := i;
if (right <= n) and (arr[right] > arr[max]) then max := right;
if max <> i then
begin
swap(arr[i], arr[max]);
heapify(arr, max, n);
writeln('hujak');
end;
end;
procedure buildheap(var arr : masyvas; n : integer);
var i : integer;
begin
for i := (n div 2) downto 1 do heapify(arr, i, n);
end;
procedure heapsort(var arr : masyvas; n : integer);
var i : integer;
begin
buildheap(arr, n);
for i := n downto 2 do
begin
swap(arr[1], arr[i]);
n := n - 1;
heapify(arr, 1, n);
writeln('jablyk');
end;
end;
procedure printshit(arr : masyvas; n : integer);
var i : integer;
begin
for i := 1 to n do writeln(i, '. ', arr[i]);
end;
////main
var arr : masyvas;
n : integer;
begin
n := readshit(arr);
writeln();
printshit(arr, n);
writeln();
buildheap(arr, n);
writeln();
printshit(arr, n);
writeln();
heapsort(arr, n);
writeln;
printshit(arr, n);
writeln;
readln;
end.