#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
using namespace std;
const int N=1e5+100;
const int mod=1000000;
int cur;
long long ans;
int times,root;
int x1,x2;
struct node
{
int father,lson,rson,date;
}tree[N];
int abs(int x)
{
if(x<0) return -x;
else return x;
}
int findMin()
{
int y=tree[root].lson;
if(y==-1) return -1;
while(tree[y].rson!=-1) y=tree[y].rson;
return y;
}
int findMax()
{
int y=tree[root].rson;
if(y==-1) return y;
while(tree[y].lson!=-1) y=tree[y].lson;
return y;
}
void rightrotate(int x)
{
int y=tree[x].father; int z=tree[y].father;
tree[y].lson=tree[x].rson;
if(tree[x].rson!=-1)
{
tree[tree[x].rson].father=y;
}
tree[x].father=z;
if(z!=-1)
{
if(tree[z].lson==y) tree[z].lson=x;
else tree[z].rson=x;
}
tree[x].rson=y;
tree[y].father=x;
}
void leftrotate(int x)
{
int y=tree[x].father; int z=tree[y].father;
tree[y].rson=tree[x].lson;
if(tree[x].lson!=-1)
{
tree[tree[x].lson].father=y;
}
tree[x].father=z;
if(z!=-1)
{
if(tree[z].lson==y) tree[z].lson=x;
else tree[z].rson=x;
}
tree[x].lson=y; tree[y].father=x;
}
void splay(int x)
{
while(tree[x].father!=-1)
{
int y=tree[x].father; int z=tree[y].father;
if(z==-1)
{
if(tree[y].lson==x) rightrotate(x); else leftrotate(x);
}
else
{
if(tree[z].lson==y&&tree[y].lson==x) {rightrotate(y);rightrotate(x);}
else if(tree[z].lson==y&&tree[y].rson==x) {leftrotate(x);rightrotate(x);}
else if(tree[z].rson==y&&tree[y].rson==x){leftrotate(y);leftrotate(x);}
else {rightrotate(x); leftrotate(x);}
}
}
root=x;
}
void BIS_insert(int root,int date)
{
if(tree[root].date>date)
{
if(tree[root].lson==-1)
{
tree[root].lson=times;
tree[times].date=date; tree[times].lson=-1; tree[times].rson=-1;tree[times].father=root;
return;
}
else
{
BIS_insert(tree[root].lson,date);
}
}
else
{
if(tree[root].rson==-1)
{
tree[root].rson=times;
tree[times].date=date; tree[times].lson=-1; tree[times].rson=-1; tree[times].father=root;
return;
}
else BIS_insert(tree[root].rson,date);
}
}
void insert(int date)
{
times++;
BIS_insert(root,date);
splay(times);
}
/*void del(int x)
{
splay(x);
if(tree[x].lson==-1&&tree[x].rson==-1)
{
cur=0;
return;
}
int temp=findMin();
if(tree[x].lson==-1)
{
root=tree[x].rson;
tree[root].father=-1;
}
else
{
if(tree[tree[temp].father].lson==temp) tree[tree[temp].father].lson=-1;
else tree[tree[temp].father].rson=-1;
tree[temp].father=-1;
if(temp!=tree[x].lson)
{tree[temp].lson=tree[root].lson; if(tree[root].lson!=-1) tree[tree[root].lson].father=temp;}
tree[temp].rson=tree[root].rson; if(tree[root].rson!=-1) tree[tree[root].rson].father=temp;
root=temp;
}
}*/
void del(int x)
{
splay(x);
if(tree[x].lson==-1&&tree[x].rson==-1)
{
cur=0;
return;
}
else
if (tree[x].lson==-1)
{
root=tree[x].rson;
tree[root].father=-1;
}
else
{
int y=tree[x].lson;
while (tree[y].rson!=-1) y=tree[y].rson;
tree[tree[x].lson].father=-1;
splay(y);
// root=y;
tree[y].father=-1;
tree[y].rson=tree[x].rson;
tree[tree[x].rson].father=y;
}
}
void suc(int x,int y)
{
if(x==-1) return;
if(tree[x].date>=y) {x2=x; suc(tree[x].lson,y);}
else suc(tree[x].rson,y);
}
void pre(int x,int y)
{
if(x==-1) return;
if(tree[x].date<=y) {x1=x; pre(tree[x].rson,y);}
else pre(tree[x].lson,y);
}
void insertANDdel(int date)
{
x1=-1; x2=-1;
suc(root,date);
pre(root,date);
if(x1==-1)
{
ans=(ans+tree[x2].date-date)%mod;
del(x2);
}
else if(x2==-1)
{
ans=(ans+date-tree[x1].date)%mod;
del(x1);
}
else
{
if(date-tree[x1].date<=tree[x2].date-date)
{
ans=(ans+date-tree[x1].date)%mod;
del(x1);
}
else
{
ans=(ans+tree[x2].date-date)%mod;
del(x2);
}
}
}
int main()
{
int n;
scanf("%d",&n);
cur=0;
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
x++;
if(cur==0)
{
cur=x;
times++;
root=times;
tree[root].date=y;
tree[root].father=-1;
tree[root].lson=-1;
tree[root].rson=-1;
}
else
if(cur==x)
{
insert(y);
}
else
{
insertANDdel(y);
}
}
printf("%lld\n",ans%mod);
}