program lexi; const k=5; zero='0'; nine='9'; type blok=record next:^blok; number:string[k]; end; type entry=record first:^blok; last:^blok; end; type uk=^blok; var pole: array[zero..nine] of entry; seznam: entry; procedure vynuluj; var a:char; begin for a:=zero to nine do with pole[a] do begin first:=nil; last:=nil; end; end; procedure vloznakonec(var r:entry; u:uk); begin if r.first<>nil then r.last^.next:=u else r.first:=u; r.last:=u; u^.next:=nil; end; procedure insert(s:string); var b:^blok; begin while length(s)nil then begin if seznam.first = nil then seznam.first := e.first else seznam.last^.next := e.first; seznam.last:=e.last; end; end; procedure trid (j:integer); var p,g:^blok; a:char; begin vynuluj; p:=seznam.first; while p<>nil do begin g:=p^.next; vloznakonec (pole[p^.number[j]], p); p:=g; end; seznam.first:=nil; seznam.last:=nil; for a := zero to nine do pridej (pole[a]); end; procedure sort; var i:integer; begin for i:= k downto 1 do trid(i); end; procedure vypis; var p: uk; begin p:=seznam.first; while p<>nil do begin writeln(p^.number); p:=p^.next; end; end; begin seznam.first:=nil; seznam.last:=nil; insert('5'); insert('9726'); insert('7'); insert('16'); insert('792'); sort; vypis; readln; end.