program rikiavimas;

  const PR = 'seka.dat';
        RZ = 'seka.rez';
        MAX = 1000; { maksimalus sekos ilgis }
  type seka = array [1..MAX] of integer;

  function daugiau (x, y: integer): boolean;
  { palygina du sekos elementus: ar x>y }
  begin
    daugiau := (x mod 10 > y mod 10) or
               (x mod 10 = y mod 10) and (x div 10 mod 10 > y div 10 mod 10) or
               (x mod 100 = y mod 100) and (x div 100 > y div 100);
  end; { daugiau }

  procedure rikiuoti (n: integer; var s: seka);
  { rikiavimas iðrinkimu }
    var i, j, a, min: integer;
  begin
    for i := 1 to n-1 do
      begin
        min := i;
        for j := i+1 to n do
          if daugiau (s[min], s[j])
             then min := j;
        a := s[i]; s[i]:= s[min]; s[min] := a;
      end
  end; { rikiuoti }

  procedure skaityti (var n: integer; var s: seka);
    var f: text;
        i: integer;
  begin
    assign (f, PR);
    reset (f);
    readln (f, n);
    for i := 1 to n do
      read (f, s[i]);
    close (f);
  end; { skaityti }

  procedure rasyti (n: integer; s: seka);
    var f: text;
        i: integer;
  begin
    assign (f, RZ);
    rewrite (f);
    for i := 1 to n do
      write (f, s[i], ' ');
    close (f);
  end; { raðyti }

  var n: integer;
      s: seka;
begin
  skaityti (n, s);
  rikiuoti (n, s);
  rasyti (n, s);
end.
