#include<bits/stdc++.h>
#define FL(i,a,b) for(int i=(a);i<=(b);i++)
#define FR(i,a,b) for(int i=(a);i>=(b);i--)
#define ll long long
using namespace std;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
const int MAXN = 8e4 + 10;
const int mod = 1e6;
struct node{
int l,r,key,val,siz;
}a[MAXN],b[MAXN];
int roota,rootb,cnta=0,cntb=0,x,y,z;
void updatea(int p){
a[p].siz=a[a[p].l].siz+a[a[p].r].siz+1;
}
void splita(int p,int key,int &x,int &y){
if(!p) x=y=0;
else{
if(a[p].key<=key){
x=p;
splita(a[p].r,key,a[p].r,y);
}
else{
y=p;
splita(a[p].l,key,x,a[p].l);
}
}
return ;
}
int mergea(int x,int y){
if(!x||!y) return x+y;
if(a[x].val>a[y].val){
a[x].r=mergea(a[x].r,y);
updatea(x);
return x;
}
else{
a[y].l=mergea(x,a[y].l);
updatea(y);
return y;
}
}
int getnodea(int key){
a[++cnta].key=key;
a[cnta].val=rnd();
a[cnta].siz=1;
return cnta;
}
int get_preva(int key){
splita(roota,key-1,x,y);
int p=x;
while(a[p].r) p=a[p].r;
return a[p].key;
}
int get_nexta(int key){
splita(roota,key,x,y);
int p=y;
while(a[p].l) p=a[p].l;
roota=mergea(x,y);
return a[p].key;
}
void inserta(int key){
splita(roota,key-1,x,y);
roota=mergea(mergea(x,getnodea(key)),y);
}
void dela(int key){
splita(roota,key,x,z);
splita(x,key-1,x,y);
y=mergea(a[y].l,a[y].r);
roota=mergea(mergea(x,y),z);
}
void updateb(int p){
b[p].siz=b[b[p].l].siz+b[b[p].r].siz+1;
}
void splitb(int p,int key,int &x,int &y){
if(!p) x=y=0;
else{
if(b[p].key<=key){
x=p;
splitb(b[p].r,key,b[p].r,y);
}
else{
y=p;
splitb(b[p].l,key,x,b[p].l);
}
}
return ;
}
int mergeb(int x,int y){
if(!x||!y) return x+y;
if(b[x].val>b[y].val){
b[x].r=mergeb(b[x].r,y);
updateb(x);
return x;
}
else{
b[y].l=mergeb(x,b[y].l);
updateb(y);
return y;
}
}
int getnodeb(int key){
b[++cntb].key=key;
b[cntb].val=rnd();
b[cntb].siz=1;
return cntb;
}
int get_prevb(int key){
splitb(rootb,key-1,x,y);
int p=x;
while(b[p].r) p=b[p].r;
return b[p].key;
}
int get_nextb(int key){
splitb(rootb,key,x,y);
int p=y;
while(b[p].l) p=b[p].l;
rootb=mergeb(x,y);
return b[p].key;
}
void insertb(int key){
splitb(rootb,key-1,x,y);
rootb=mergeb(mergeb(x,getnodeb(key)),y);
}
void delb(int key){
splitb(rootb,key,x,z);
splitb(x,key-1,x,y);
y=mergeb(b[y].l,b[y].r);
rootb=mergeb(mergeb(x,y),z);
}
int main(){
int n,sum1=0,sum2=0,ans=0;
scanf("%d",&n);
inserta(-1e9);
inserta(1e9);
insertb(-1e9);
insertb(1e9);
FL(i,1,n){
int a,b;
scanf("%d%d",&a,&b);
if(a==0){
if(sum2){
int l=get_prevb(b);
int r=get_nextb(b);
if((b-l)<=(r-b)){
ans+=(b-l);
delb(l);
}
else{
ans+=(r-b);
delb(r);
}
sum2--;
}
else{
sum1++;
inserta(b);
}
ans%=mod;
}
else{
if(sum1){
int l=get_preva(b);
int r=get_nexta(b);
if((b-l)<=(r-b)){
ans+=(b-l);
dela(l);
}
else{
ans+=(r-b);
dela(r);
}
sum1--;
}
else{
sum2++;
insertb(b);
}
ans%=mod;
}
}
printf("%d\n",ans);
}