
program heapsort;

type heap=record
            h: array of integer;
            e:integer;
          end;

procedure heap_new(var h:heap;
                   size:integer);
begin
        h.e:= 0;
        setlength(h.h,size);
end;

function heap_empty(h:heap):boolean;
begin
        heap_empty:=h.e = 0;
end;

procedure heap_dispose(var h:heap);
begin
        setlength(h.h,0);
        h.e:=0;
end;

function heap_min(h:heap):integer;
begin
        heap_min:=h.h[0];
end;

procedure swap(var a,b:integer);
var
	pom:integer;
begin
	pom:=a;
	a:=b;
	b:=pom;
end;

procedure heap_add(var h:heap; value:integer);
var
        index,p:integer;
begin
        h.h[h.e]:=value;
        index:=h.e;
        inc(h.e);
        while index<>0 do
        begin
              p:= (index-1) div 2;
              if h.h[p] <= h.h[index] then break;
              swap(h.h[p],h.h[index]);
              index:=p;
        end;
end;

procedure heap_pop(var h:heap);
var
        i,l,p:integer;

begin
        dec(h.e);
        h.h[0] := h.h[h.e];
        i := 0;
    
        while true do
        begin
                l := (i*2)+1;
                p := (i*2)+2;
                if l >=h.e then break;
                if p = h.e then begin
                if h.h[l]< h.h[i] then swap(h.h[l],h.h[i]);
		break;
                end;
		if (h.h[i]>h.h[l]) or (h.h[i]>h.h[p]) then 
		begin
		 if h.h[l]<h.h[p] then 
		  begin
		   swap(h.h[l],h.h[i]);
		   i:=l;
		  end else 
		       begin
		         swap(h.h[p],h.h[i]);
			 i:=p;
		       end;
		end
		else break; 

        end;
        
end;
var 
	a,i:integer;
	halda:heap;
begin
	heap_new(halda,10);
	for i:=1 to 10 do
	begin
		read(a);
		heap_add(halda,a);
	end;

	while not heap_empty(halda) do
	begin
		writeln(heap_min(halda));
		heap_pop(halda);
		
	end;
	heap_dispose(halda);
end.
