name:array[1..1000] of string;
a,b:array[1..10000] of longint;
n,i,j:longint;
procedure qs(l,r:longint);
var i,j:longint;
mid,t:ansistring;
begin
i:=l;j:=r;mid:=ab[(l+r)div 2];
repeat
while (length(mid)<length(ab[i]))or((length(mid)=length(ab[i]))and(mid<ab[i]))or((length(mid)=length(ab[i]))and(mid=ab[i])and(name[i]<=name[(l+r)div 2])) do inc(i);
while (length(mid)>length(ab[j]))or((length(mid)=length(ab[j]))and(mid>ab[j]))or((length(mid)=length(ab[j]))and(mid=ab[j])and(name[j]>=name[(l+r)div 2])) do dec(j);
if i<=j then begin
t:=ab[i];ab[i]:=ab[j];ab[j]:=t;
t:=name[i];name[i]:=name[j];name[j]:=t;
inc(i);dec(j);
end;
until i>j;
if i<r then qs(i,r);
if j>l then qs(l,j);
end;
begin
readln(n);
for i:=1 to n do begin
readln(name[i]);
readln(ab[i]);
end;
qs(1,n);for i:=1 to n do writeln(name[i]);
for j:=1 to length(ab[1]) do a[j]:=ord(ab[1][length(ab[1])-j+1])-48;
for i:=2 to n do begin
fillchar(b,sizeof(b),0);
for j:=1 to length(ab[i]) do b[j]:=ord(ab[i][length(ab[i])-j+1])-48;
for j:=1 to 10000 do begin
inc(a[j],b[j]);
if a[j]>=10 then begin
dec(a[j],10);
inc(a[j+1],1)
end;
end;
end;
for i:=490 downto 1 do write(a[i]);
end.
求大牛帮助!