program whatever;
var
  a:array of string;
  b,i:integer;

function icless(a,b:char):boolean;
begin
  if (a>='a') and (a<='z') then a:=chr(ord(a)-ord('a')+ord('A'));
  if (b>='a') and (b<='z') then b:=chr(ord(b)-ord('a')+ord('A'));
  icless:=ord(a)<ord(b);
end;

function iless(a,b:string):boolean;
var i:integer;
begin
  i:=1;
  if length(b)<i then begin
    iless:=false;
    exit;
  end;
  while true do begin
    if length(a)<i then begin
    iless:=true;
    exit;
  end;
  if icless(b[i],a[i]) then begin
    iless:=false;
    exit;
  end;
  if icless(a[i],b[i]) then begin
    iless:=true;
    exit;
  end;
  inc(i);
  end;
end;

Procedure sort(var a:array of string;x,y:integer);
var i,pp:integer;
pomocna:string;
Begin
  writeln(x,' ',y);
  if (x > y - 1) then
  exit;

  pp:=x;
  i:=x+1;
  while i<y do begin
    if iless(a[i],a[pp]) then begin
      if pp = i-1 then begin
        pomocna:=a[pp];
        a[pp]:=a[i];
        a[i]:=pomocna;
      end else begin
        pomocna := a[i];
        a[i] := a[pp+1];
        a[pp+1] := a[pp];
        a[pp] := pomocna;
      end;
      inc(pp);
    end;
    inc(i);
  end;
  sort(a, x, pp);
  sort(a, pp + 1, y);
End;


begin
  readln(b);
  setlength(a,b);

  for i:= 0 to b-1 do readln(a[i]);

  sort(a,0,b);
  
  for i := 0 to b-1 do writeln(a[i]);
end.

