#include<bits/stdc++.h>
using namespace std;
#define MAXN 80010
#define MOD 1000000
#define int long long
struct node{
int lc,rc;
int val,num;
int pri;
}tree[MAXN];
int n,opt,x,cnt,root,sum1,sum2,k,ans;
int New(int val)
{
int now=++cnt;
tree[now].lc=tree[now].rc=0;
tree[now].pri=rand();
tree[now].num=1;
tree[now].val=val;
return now;
}
void zig(int &p)
{
int q=tree[p].lc;
tree[p].lc=tree[q].rc;
tree[q].rc=p;
p=q;
}
void zag(int &p)
{
int q=tree[p].rc;
tree[p].rc=tree[q].lc;
tree[q].lc=p;
p=q;
}
void Insert(int &p,int val)
{
if(!p){
p=New(val);
return;
}
if(tree[p].val==val)
tree[p].num++;
else if(tree[p].val>val){
Insert(tree[p].lc,val);
if(tree[tree[p].lc].pri>tree[p].pri)
zig(p);
}else{
Insert(tree[p].rc,val);
if(tree[tree[p].rc].pri>tree[p].pri)
zag(p);
}
return;
}
void Delete(int &p,int val)
{
if(!p)return;
if(tree[p].val==val){
tree[p].num--;
if(tree[p].num<=0)
{
if(!tree[p].lc||!tree[p].rc)
p=tree[p].lc+tree[p].rc;
else if(tree[tree[p].lc].pri>tree[tree[p].rc].pri){
zig(p);
Delete(tree[p].lc,val);
}else{
zag(p);
Delete(tree[p].rc,val);
}
}
}else if(tree[p].val>val){
Delete(tree[p].lc,val);
}else{
Delete(tree[p].rc,val);
}
return;
}
int find_pre(int val)
{
int p=root,ans=-1e18;
do{
if(tree[p].val<val){
ans=tree[p].val;
p=tree[p].rc;
}else{
p=tree[p].lc;
}
}while(p);
return ans;
}
int find_Nxt(int val)
{
int p=root,ans=1e18;
do{
if(tree[p].val>val){
ans=tree[p].val;
p=tree[p].lc;
}else{
p=tree[p].rc;
}
}while(p);
return ans;
}
signed main(){
srand(time(0));
cin>>n;
root=0;
for(int i=1;i<=n;i++)
{
cin>>opt>>x;
if(opt==0){
sum1++;
if(sum1<=sum2){
int l=find_pre(x);
int r=find_Nxt(x);
if(r-x<x-l||l==-1e18){
ans=(ans+(r-x)%MOD)%MOD;
Delete(root,r);
}else{
ans=(ans+(x-l)%MOD)%MOD;
Delete(root,l);
}
}else{
Insert(root,x);
}
}else{
sum2++;
if(sum2<=sum1){
int l=find_pre(x);
int r=find_Nxt(x);
if(r-x<x-l||l==-1e18){
ans=(ans+(r-x)%MOD)%MOD;
Delete(root,r);
}else{
ans=(ans+(x-l)%MOD)%MOD;
Delete(root,l);
}
}else{
Insert(root,x);
}
}
}
cout<<ans<<"\n";
return 0;
}