#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1000000;
struct node
{
int l,r,val,rnd,size;
}t[3][114514];
int root[3],cnt[3];
void update(int p,int id)
{
t[id][p].size=t[id][t[id][p].l].size+t[id][t[id][p].r].size+1;
}
int New(int x,int id)
{
t[id][++cnt[id]].val=x;
t[id][cnt[id]].rnd=rand();
t[id][cnt[id]].size=1;
return cnt[id];
}
void split(int p,int val,int &x,int &y,int id)
{
if(!p)
x=y=0;
else
{
if(t[id][p].val<=val)
{
x=p;
split(t[id][p].r,val,t[id][p].r,y,id);
}
else
{
y=p;
split(t[id][p].l,val,x,t[id][p].l,id);
}
update(p,id);
}
}
int merge(int x,int y,int id)
{
if(!x||!y)
return x|y;
if(t[id][x].rnd<=t[id][y].rnd)
{
t[id][x].r=merge(t[id][x].r,y,id);
update(x,id);
return x;
}
else
{
t[id][y].l=merge(x,t[id][y].l,id);
update(y,id);
return y;
}
}
void insert(int x,int id)
{
int a,b;
split(root[id],x,a,b,id);
root[id]=merge(merge(a,New(x,id),id),b,id);
}
void del(int x,int id)
{
int a,b,c;
split(root[id],x,b,c,id);
split(b,x-1,a,b,id);
root[id]=merge(merge(a,merge(t[id][b].l,t[id][b].r,id),id),c,id);
}
int pre(int x,int id)
{
int a,b;
split(root[id],x-1,a,b,id);
int ans,p=a;
while(p)
ans=t[id][p].val,p=t[id][p].r;
root[id]=merge(a,b,id);
return ans;
}
int nxt(int x,int id)
{
int a,b;
split(root[id],x,a,b,id);
int ans,p=b;
while(p)
ans=t[id][p].val,p=t[id][p].l;
root[id]=merge(a,b,id);
return ans;
}
int n;
int tot,tot1;
int ans;
signed main()
{
cin>>n;
while(n--)
{
int op,x;
cin>>op>>x;
if(op==0)
{
if(!tot)
insert(x,1),++tot1;
else
{
int nx=nxt(x,2);
int pr=pre(x,2);
if(abs(x-pr)>=abs(x-nx))
del(pr,2),ans=(ans+abs(x-pr))%mod;
else
del(nx,2),ans=(ans+abs(x-nx))%mod;
--tot;
}
}
else
{
if(!tot1)
insert(x,2),++tot;
else
{
int nx=nxt(x,1);
int pr=pre(x,1);
if(abs(x-pr)>=abs(x-nx))
del(pr,1),ans=(ans+abs(x-pr))%mod;
else
del(nx,1),ans=(ans+abs(x-nx))%mod;
--tot1;
}
}
}
cout<<ans;
}