1 var
2 i,j,k,l,m,n,head:longint;
3 ans:int64;
4 b:array[0..200000,1..2] of longint;
5 a,lef,rig,fix:array[0..200000] of longint;
6 function min(x,y:longint):longint;inline;
7 begin
8 if x<y then min:=x else min:=y;
9 end;
10
11 procedure swap(var x,y:longint);inline;
12 var z:longint;
13 begin
14 z:=x;x:=y;y:=z;
15 end;
16 procedure sort(l,r:longint);inline;
17 var i,j,x,y:longint;
18 begin
19 i:=l;j:=r;x:=b[(l+r) div 2,2];
20 repeat
21 while b[i,2]>x do inc(i);
22 while b[j,2]<x do dec(j);
23 if i<=j then
24 begin
25 swap(b[i,1],b[j,1]);
26 swap(b[i,2],b[j,2]);
27 inc(i);dec(j);
28 end;
29 until i>j;
30 if i<r then sort(i,r);
31 if l<j then sort(l,j);
32 end;
33 procedure merge(var x,y:longint);inline;
34 begin
35 if x=0 then swap(x,y);
36 if y=0 then exit;
37 if a[x]<a[y] then swap(x,y);
38 merge(rig[x],y);
39 fix[x]:=min(fix[lef[x]],fix[rig[x]])+1;
40 if fix[lef[x]]<fix[rig[x]] then swap(lef[x],rig[x]);
41 end;
42 function cuthead(var head:longint):longint;inline;
43 begin
44 cuthead:=a[head];
45 merge(lef[head],rig[head]);
46 head:=lef[head];
47 end;
48 begin
49 readln(n);m:=0;head:=0;
50 for i:=1 to n do readln(b[i,2],b[i,1]);
51 sort(1,n);
52 j:=1;
53 ans:=0;
54 while true do
55 begin
56 i:=j;
57 if b[i,2]<=0 then break;
58 while b[i,2]=b[j,2] do inc(i);
59 for k:=j to i-1 do
60 begin
61 inc(m);l:=m;
62 a[m]:=b[k,1];lef[m]:=0;rig[m]:=0;fix[m]:=0;
63 merge(head,l);
64 end;
65 for k:=1 to b[j,2]-b[i,2] do
66 begin
67 if head=0 then break;
68 ans:=ans+cuthead(head);
69 end;
70 j:=i;
71 end;
72 writeln(ans);
73 readln;
74 end.
75