program bsort;
type
	plist=^list;
	list = record
		 value:integer;
		 next:plist;
		 end;

procedure list_new(var l:plist);
begin
	l:=NIL;
end;

procedure list_push(var l:plist; i:integer);
var lnew: plist;
begin
	new(lnew);
	lnew^.next := l;
	lnew^.value := i;
	l:= lnew;
end;

procedure list_pop(var l:plist);
var tmp:plist;
begin
	tmp:=l;
	l:=l^.next;
	dispose(tmp);
end;

function list_empty(l:plist): boolean;
begin
	list_empty:= l = nil;
end;

procedure list_dispose(var l:plist);
begin
	while not list_empty(l) do list_pop(l);
end;

function list_front(l:plist): integer;
begin
	list_front := l^.value;
end;

procedure list_move_head(var l1,l2:plist);
var temp:plist;
begin
	temp:=l2;
	l2:=l1;
	l1:=l2^.next;
	l2^.next:=temp;
end;

procedure list_reverse (var l:plist);
var temp : plist;
begin
	list_new(temp);
	
	while NOT list_empty(l) do
	begin
   		list_move_head(l, temp);
	end;

	l:=temp;
end;


var
a:array[0..9] of plist;
zoznam:plist;
i,cislo,radix:integer;
begin
	list_new(zoznam);
	while true do
	begin
		readln(cislo);
		if cislo=0 then break;
		list_push(zoznam,cislo);
	end;

	for i:=0 to 9 do list_new(a[i]);

	radix := 1;
	while radix <=1000 do begin
		while not list_empty(zoznam) do begin
			i:=list_front(zoznam);
			list_move_head(zoznam,a[(i div radix) mod 10]);
		end;

		for i:=9 downto 0 do
			while not list_empty(a[i]) do
				list_move_head(a[i],zoznam);
		radix:=radix*10;
	end;

	while not(list_empty(zoznam)) do
	begin
		writeln(list_front(zoznam));
		list_pop(zoznam);
	end;
end.
