var a: array [1..100] of string;
n,i,j,t:byte;demo:string;
function find2(st:string):byte; { tìm vị trí từ đầu của tên, để so sánh}
var i:byte;
begin
for i:=length(st) downto 1 do
if st[i]=#32 then
begin
find2:=i+1;
break;
end;
end;
begin
write('Nhap do dai danh sach: ');
readln(n);
for i:=1 to n do
begin
write('Stt[',i,']= ');
readln(a[i]);
end;
{Sử dụng thuật toán sắp xếp }
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i][find2(a[i])]>a[j][find2(a[j])] then
begin
demo:=a[i];
a[i]:=a[j];
a[j]:=demo;
end
else
if a[i][find2(a[i])]=a[j][find2(a[j])] then { nếu a[i]=a[j] thì thực hiện kiểm tra tên, nếu tên giống nhau thì kiểm tra họ đệm}
begin
if copy(a[i],find2(a[i]),length(a[i]))=copy(a[j],find2(a[j]),length(a[j])) then {Kiểm tra 2 tên giống nhau, nếu hai tên giống nhau thì so sánh chữ cái của họ đệm }
begin
t:=1;
while a[i][pos(#32,a[i])+t]=a[j][pos(#32,a[j])+t] do
t:=t+1;
if a[i][pos(#32,a[i])+t]>a[j][pos(#32,a[j])+t] then {khi các chữ có khác nhau thì sắp xếp}
begin
demo:=a[i];
a[i]:=a[j];
a[j]:=demo;
end;
end
else
begin
t:=1;
while a[i][find2(a[i])+t]=a[j][find2(a[j])+t] do { Nếu hai tên bằng nhau thì kiểm tra từng chữ cái trong tên}
t:=t+1;
if a[i][find2(a[i])+t]>a[j][find2(a[j])+t] then
begin
demo:=a[i];
a[i]:=a[j];
a[j]:=demo;
end;
end;
end;
for i:=1 to n do
writeln(a[i]);
readln
end.