i,j,m,n,k,len,la,lb,lc,x:longint;
sn,s:array[1..1000] of ansistring;
a,b,c:array[1..10000] of longint;
p:ansistring;
begin
readln(n);
for i:=1 to n do
begin
readln(sn[i]);
readln(s[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if (s[i]<s[j])or(s[i]=s[j])and(sn[i]>sn[j]) then
begin
p:=sn[i]; sn[i]:=sn[j]; sn[j]:=p;
p:=s[i]; s[i]:=s[j]; s[j]:=p;
end;
for i:=1 to n do
begin
la:=length(s[i]);
fillchar(a,sizeof(a),0);
for j:=1 to la do a[la+1-j]:=ord(s[i][j])-ord('0');
k:=1; x:=0;
while (k<=la) or (k<=lb) do
begin
b[k]:=a[k]+b[k]+x;
x:=b[k] div 10;
b[k]:=b[k] mod 10;
inc(k);
end;
if x>0 then begin lb:=k; b[k]:=x; end
else lb:=k-1;
end;
for i:=1 to n do
writeln(sn[i]);
for i:=490 downto 1 do
write(b[i]);
end.
var
i,j,m,n,k,len,la,lb,lc,x:longint;
sn,s:array[1..100000] of ansistring;
a,b,c:array[1..10000] of longint;
p:ansistring;
begin
readln(n);
for i:=1 to n do
begin
readln(sn[i]);
readln(s[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if (length(s[i])<length(s[j]))
or(length(s[i])=length(s[j]))and(s[i]<s[j])
or(length(s[i])=length(s[j]))and((s[i]=s[j])and(sn[i]>sn[j])) then
begin
p:=sn[i]; sn[i]:=sn[j]; sn[j]:=p;
p:=s[i]; s[i]:=s[j]; s[j]:=p;
end;
for i:=1 to n do
begin
la:=length(s[i]);
fillchar(a,sizeof(a),0);
for j:=1 to la do a[la+1-j]:=ord(s[i][j])-ord('0');
k:=1; x:=0;
while (k<=la) or (k<=lb) do
begin
b[k]:=a[k]+b[k]+x;
x:=b[k] div 10;
b[k]:=b[k] mod 10;
inc(k);
end;
if x>0 then begin lb:=k; b[k]:=x; end
else lb:=k-1;
end;
for i:=1 to n do
writeln(sn[i]);
for i:=490 downto 1 do
write(b[i]);
end.
排序+高精度