Cod sursa(job #126430)
var
fi, fo : text;
n, i, j, originale : longint;
c : array[0..36001] of string[16];
mc : array[#96..'z',1..36000] of string[16];
nc : array[#96..'z'] of integer;
car : char;
l : byte;
begin
assign(fi,'restante.in'); reset(fi);
assign(fo,'restante.out'); rewrite(fo);
read(fi,n);
for i := 1 to n do
begin
readln(fi,c[i]);
for j := length(c) to 16 do
c[i] := #96+c[i]; { caracterul mai mic decat 'a' }
end;
for l := 16 downto 1 do { grupam dupa locul l }
begin
for car := #96 to 'z' do
nc[car] := 0; { numarul de cuvinte corespunzatoare fiecarui caracter }
for i := 1 to n do
begin
inc(nc[c[i][l]]); { Creste numarul de cuvinte corespunzator literei l. }
mc[c[i][l],nc[c[i][l]]] := c[i];
end;
i := 0;
for car := #96 to 'z' do
for j := 1 to nc[car] do
begin
inc(i); c[i] := mc[car,j]
end;
end;
c[0] := ' '; c[n+1] := ' '; { diferite de celelalte }
for i := 1 to n do
if (c[i-1] <> c[i]) and (c[i] <> c[i+1]) then
inc(originale);
writeln(originale);
close(fi); close(fo);
end.