#include<iostream>
#include<cstdlib>
using namespace std;
#define int long long
const int INF=0x3f3f3f3f3f3f3f3f;
const int N=1e6+10;
const int mod=1000000;
struct node{
int lson,rson,val,pri,kd;
}treap1[N],treap2[N];
int cnt,root1,root2;
int build1(int x){
treap1[++cnt].val=x;
treap1[cnt].pri=rand();
return cnt;
}
void split1(int pos,int x,int &l,int &r){
if(!pos){
l=r=0;
return;
}
if(treap1[pos].val<=x){
l=pos;
split1(treap1[pos].rson,x,treap1[pos].rson,r);
}else{
r=pos;
split1(treap1[pos].lson,x,l,treap1[pos].lson);
}
}
int mgr1(int l,int r){
if(!l||!r) return l+r;
if(treap1[l].pri<=treap1[r].pri){
treap1[l].rson=mgr1(treap1[l].rson,r);
return l;
}else{
treap1[r].lson=mgr1(l,treap1[r].lson);
return r;
}
}
int get_max1(int pos){
if(!pos) return -INF;
if(treap1[pos].rson) return get_max1(treap1[pos].rson);
else return max(get_max1(treap1[pos].lson),treap1[pos].val);
}
int get_min1(int pos){
if(!pos) return INF;
if(treap1[pos].rson) return get_min1(treap1[pos].rson);
else return min(get_min1(treap1[pos].lson),treap1[pos].val);
}
int build2(int x){
treap2[++cnt].val=x;
treap2[cnt].pri=rand();
return cnt;
}
void split2(int pos,int x,int &l,int &r){
if(!pos){
l=r=0;
return;
}
if(treap2[pos].val<=x){
l=pos;
split2(treap2[pos].rson,x,treap2[pos].rson,r);
}else{
r=pos;
split2(treap2[pos].lson,x,l,treap2[pos].lson);
}
}
int mgr2(int l,int r){
if(!l||!r) return l+r;
if(treap2[l].pri<=treap2[r].pri){
treap2[l].rson=mgr2(treap2[l].rson,r);
return l;
}else{
treap2[r].lson=mgr2(l,treap2[r].lson);
return r;
}
}
int get_max2(int pos){
if(!pos) return -INF;
if(treap2[pos].rson) return get_max2(treap2[pos].rson);
else return max(get_max2(treap2[pos].lson),treap2[pos].val);
}
int get_min2(int pos){
if(!pos) return INF;
if(treap2[pos].rson) return get_min2(treap2[pos].rson);
else return min(get_min2(treap2[pos].lson),treap2[pos].val);
}
void ins1(int x){
int ll,rr;
split1(root1,x-1,ll,rr);
root1=mgr1(mgr1(ll,build1(x)),rr);
}
void ins2(int x){
int ll,rr;
split2(root2,x-1,ll,rr);
root2=mgr2(mgr2(ll,build2(x)),rr);
}
int n,ans;
signed main(){
ios::sync_with_stdio(false);
cin>>n;
while(n--){
int a,b;
cin>>a>>b;
if(a==0){
if(!root2){
ins1(b);
}else{
int ll,rr;
split2(root2,b,ll,rr);
int t1=get_max2(ll),t2=get_min2(rr),t;
if(t1==-INF&&t2==INF) continue;
if(t2-b>=b-t1){
ans+=b-t1;
split2(ll,t1-1,ll,t);
root2=mgr2(ll,rr);
}else{
ans+=t2-b;
split2(rr,t2,t,rr);
root2=mgr2(ll,rr);
}
ans%=mod;
}
}else{
if(!root1){
ins2(b);
}else{
int ll,rr;
split1(root1,b,ll,rr);
int t1=get_max1(ll),t2=get_min1(rr),t;
if(t1==-INF&&t2==INF) continue;
if(t2-b>=b-t1){
ans+=b-t1;
split1(ll,t1-1,ll,t);
root1=mgr1(ll,rr);
}else{
ans+=t2-b;
split1(rr,t2,t,rr);
root1=mgr1(ll,rr);
}
ans%=mod;
}
}
}
cout<<ans;
return 0;
}