#include<bits/stdc++.h>
using namespace std;
const int N=1010101;
int ch[N][3],root,n,tot,ch1[N][3],root1,tot1;
struct tt{
int val,date,size,cnt;
}tree[N];
struct kk{
int val,date,size,cnt;
}tree1[N];
int add(int p){
tree[++tot].val=p;
tree[tot].date=rand();
tree[tot].size=1;
tree[tot].cnt=1;
return tot;
}
void push_up(int p){
tree[p].size=tree[ch[p][0]].size+tree[ch[p][1]].size+tree[p].cnt;
}
void rotate(int &id,int d){
int temp=ch[id][d^1];
ch[id][d^1]=ch[temp][d];
ch[temp][d]=id;
id=temp;
push_up(ch[id][d]);
push_up(id);
}
void insert(int &id,int x){
if(id==0){
id=add(x);
return;
}
if(x==tree[id].val)tree[id].cnt++;
else{
int d=0;
if(x<tree[id].val)d=0;
else d=1;
insert(ch[id][d],x);
if(tree[id].date<tree[ch[id][d]].date)rotate(id,d^1);
}
push_up(id);
}
void remove(int &id,int x){
if(id==0)return;
if(x==tree[id].val){
if(tree[id].cnt>1){
tree[id].cnt--;
push_up(id);
return;
}
if(ch[id][0]!=0||ch[id][1]!=0){
if(ch[id][1]==0||tree[ch[id][0]].date>tree[ch[id][1]].date){
rotate(id,1);
remove(ch[id][1],x);
}else{
rotate(id,0);
remove(ch[id][0],x);
}
push_up(id);
}else id=0;
return;
}
if(x<tree[id].val)remove(ch[id][0],x);
else remove(ch[id][1],x);
push_up(id);
}
int get_pre(int x){
int id=root,ans=0;
while(id){
if(tree[id].val<x)ans=tree[id].val,id=ch[id][1];
else id=ch[id][0];
}
return ans;
}
int get_next(int x){
int id=root,ans=0;
while(id){
if(tree[id].val>x)ans=tree[id].val,id=ch[id][0];
else id=ch[id][1];
}
return ans;
}
int add1(int p){
tree1[++tot1].val=p;
tree1[tot1].date=rand();
tree1[tot1].size=1;
tree1[tot1].cnt=1;
return tot1;
}
void push_up1(int p){
tree1[p].size=tree1[ch1[p][0]].size+tree1[ch1[p][1]].size+tree1[p].cnt;
}
void rotate1(int &id,int d){
int temp=ch1[id][d^1];
ch1[id][d^1]=ch1[temp][d];
ch1[temp][d]=id;
id=temp;
push_up1(ch1[id][d]);
push_up1(id);
}
void insert1(int &id,int x){
if(id==0){
id=add1(x);
return;
}
if(x==tree1[id].val)tree1[id].cnt++;
else{
int d=0;
if(x<tree1[id].val)d=0;
else d=1;
insert1(ch1[id][d],x);
if(tree1[id].date<tree1[ch1[id][d]].date)rotate1(id,d^1);
}
push_up1(id);
}
void remove1(int &id,int x){
if(id==0)return;
if(x==tree1[id].val){
if(tree1[id].cnt>1){
tree1[id].cnt--;
push_up1(id);
return;
}
if(ch1[id][0]!=0||ch1[id][1]!=0){
if(ch1[id][1]==0||tree1[ch1[id][0]].date>tree1[ch1[id][1]].date){
rotate1(id,1);
remove1(ch1[id][1],x);
}else{
rotate1(id,0);
remove1(ch1[id][0],x);
}
push_up1(id);
}else id=0;
return;
}
if(x<tree1[id].val)remove1(ch1[id][0],x);
else remove1(ch1[id][1],x);
push_up1(id);
}
int get_pre1(int x){
int id=root1,ans=0;
while(id){
if(tree1[id].val<x)ans=tree1[id].val,id=ch1[id][1];
else id=ch1[id][0];
}
return ans;
}
int get_next1(int x){
int id=root1,ans=0;
while(id){
if(tree1[id].val>x)ans=tree1[id].val,id=ch1[id][0];
else id=ch1[id][1];
}
return ans;
}
int main(){
int anss;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int x,y,l1,l2;
scanf("%d%d",&x,&y);
if(x==0){
if(root1==0){
insert(root,y);
continue;
}
l1=get_pre1(y);
l2=get_next1(y);
if(abs(y-l1)<=abs(y-l2)&&l1!=0){
anss+=abs(y-l1);
anss=anss%1000000;
remove1(root1,l1);
}
else{
anss+=abs(y-l2);
anss=anss%1000000;
remove1(root1,l2);
}
}
else{
if(root==0){
insert1(root1,y);
continue;
}
l1=get_pre(y);
l2=get_next(y);
if(abs(y-l1)<=abs(y-l2)&&l1!=0){
anss+=abs(y-l1);
anss=anss%1000000;
remove(root,l1);
}
else{
anss+=abs(y-l2);
anss=anss%1000000;
remove(root,l2);
}
}
}
printf("%d",anss);
}