type
date=record
r,name:string;
rou:array[1..2000]of longint;
end;
var
a:array[1..2000]of date;
s:array[1..2000]of longint;
i,j,n:longint;
function dx(a,b:date):longint;
var
i:longint;
begin
if length(a.r)>length(b.r) then exit(1);
if length(a.r)<length(b.r) then exit(-1);
i:=0;
repeat
inc(i)
until (a.r[i]<>b.r[i])or(i=length(a.r)+1);
if a.r[i]>b.r[i] then exit(1);
if a.r[i]<b.r[i] then exit(-1);
i:=0;
repeat
inc(i);
until (a.name[i]<>b.name[i]);
if ord(a.name[i])>ord(b.name[i]) then exit(-1);
if ord(a.name[i])<ord(b.name[i]) then exit(1);
end;
procedure pai(m,n:longint);
var
i,j:longint; k,t:date;
begin
i:=m; j:=n; k:=a[(m+n)mod 2];
while dx(k,a[i])=1 do inc(i);
while dx(k,a[j])=-1 do dec(j);
if i<=j
then begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
end;
if i<n then pai(i,n);
if j>m then pai(m,j);
end;
begin
readln(n);
for i:=1 to n do
begin
readln(a[i].name);
readln(a[i].r);
end;
pai(1,n);
for i:=1 to n do
begin
writeln(a[i].name);
end;
for i:=1 to n do
for j:=1 to length(a[i].r) do
a[i].rou[2001-j]:=ord(a[i].r[j])-ord(0);
for i:=1 to n do
for j:=2000 downto 2001-length(a[i].rou) do
s[j]:=s[j]+a[i].rou[j];
i:=0;
repeat
inc(i);
until s[j]<>0;
for j:=1999 downto i do
begin
s[j]:=s[j+1]div 10;
s[j+1]:=s[j+1]mod 10;
end;
repeat
inc(i);
s[i]:=s[i-1]div 10;
s[i-1]:=s[i-1]mod 10;
until s[i]<10;
for i:=1511 to 2000 do
write(s[i]); readln;
readln;
end.