#include<bits/stdc++.h>
using namespace std;
const int N=4e6+1,mod=1e6;
int n,top,root,lson[N],rson[N],val[N],key[N],chong;
long long a[N],cnt;
void ins(int x){
val[++top]=x;
key[top]=rand();
return;
}
void split(int s,int k,int &x,int &y){
if(!s){
x=y=0;
return;
}
if(val[s]<=k){
x=s;
split(rson[s],k,rson[s],y);
}else{
y=s;
split(lson[s],k,x,lson[s]);
}
return;
}
int merge(int u,int v){
if(!u||!v)return u+v;
if(key[u]<key[v]){
rson[u]=merge(rson[u],v);
return u;
}else{
lson[v]=merge(u,lson[v]);
return v;
}
}
int main(){
int l,op,r,left;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%lld",&op,&a[i]);
if(op==0){
if(chong>=0){
split(root,a[i],l,r);
ins(a[i]);
root=merge(merge(l,top),r);
}else{
split(root,a[i],l,r);
long long x=l;
while(rson[x]!=0){
x=rson[x];
}
if(x==0)x=-1e10;
else x=val[x];
long long y=r;
while(lson[y]!=0){
y=lson[y];
}
if(y==0)y=1e10;
else y=val[y];
if(a[i]-x<=y-a[i]){
split(l,x-1,l,left);
left=merge(lson[left],rson[left]);
root=merge(merge(l,left),r);
}else{
split(r,y+1,left,r);
left=merge(lson[left],rson[left]);
root=merge(merge(l,left),r);
}
cnt+=min(a[i]-x,y-a[i]);
}
chong++;
}else{
if(chong>0){
split(root,a[i],l,r);
long long x=l;
while(rson[x]!=0){
x=rson[x];
}
if(x==0)x=-1e10;
else x=val[x];
long long y=r;
while(lson[y]!=0){
y=lson[y];
}
if(y==0)y=1e10;
else y=val[y];
if(a[i]-x<=y-a[i]){
split(l,x-1,l,left);
left=merge(lson[left],rson[left]);
root=merge(merge(l,left),r);
}else{
split(r,y+1,left,r);
left=merge(lson[left],rson[left]);
root=merge(merge(l,left),r);
}
cnt+=min(a[i]-x,y-a[i]);
}else{
split(root,a[i],l,r);
ins(a[i]);
root=merge(merge(l,top),r);
}
chong--;
}
}
cout<<cnt%mod<<endl;
return 0;
}