#include <bits/stdc++.h>
#define LL long long
#define INF 2147483647
namespace IO{
inline LL read(){
LL x=0,f=1;char ch=getchar();
for (;!isdigit(ch);ch=getchar())if (ch=='-')f=-1;
for (;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
return x*f;
}
inline void write(LL x,char c='\n'){
if (x){
if (x<0)x=-x,putchar('-');
char a[30];short l;
for (l=0;x;x/=10)a[l++]=x%10^48;
for (l--;l>=0;l--)putchar(a[l]);
}
else putchar('0');putchar(c);
}
inline char getc(){
char ch=getchar();
while (isspace(ch))ch=getchar();
return ch;
}
}
using namespace IO;
using namespace std;
const int N = 2e5+10;
const int mod = 1e6;
struct Splay{int ch[2],fa,val;}spl[N];
int cnt,root;
bool ident(int x,int f){return spl[f].ch[1]==x;}
void connect(int x,int f,int s){spl[f].ch[s]=x;spl[x].fa=f;}
void rotate(int x){
int f=spl[x].fa,ff=spl[f].fa,k=ident(x,f);
connect(spl[x].ch[k^1],f,k);
connect(x,ff,ident(f,ff));
connect(f,x,k^1);
}
void splaying(int x,int top){
if (!top)root=x;
while (spl[x].fa!=top){
int f=spl[x].fa,ff=spl[f].fa;
if (ff!=top)ident(x,f)^ident(f,ff)?rotate(x):rotate(f);
rotate(x);
}
}
void ins(int val){
int now=root,fa=0;
while (now&&spl[now].val!=val)
fa=now,now=spl[now].ch[spl[now].val<val];
if (!now){
now=++cnt;
if (fa)spl[fa].ch[spl[fa].val<val]=now;
spl[now].fa=fa;
spl[now].ch[0]=spl[now].ch[1]=0;
spl[now].val=val;
}
splaying(now,0);
}
void findx(int val){
int now=root;if (!now)return;
while (spl[now].ch[val>spl[now].val]&&val!=spl[now].val)
now=spl[now].ch[val>spl[now].val];
splaying(now,0);
}
int getnxt1(int x,int k){
findx(x);int now=root;
if (!k&&spl[now].val<=x)return now;
if (k&&spl[now].val>=x) return now;
now=spl[now].ch[k];
while (spl[now].ch[k^1])now=spl[now].ch[k^1];
return now;
}
int getnxt2(int x,int k){
findx(x);int now=root;
if (!k&&spl[now].val<x)return now;
if (k&&spl[now].val>x) return now;
now=spl[now].ch[k];
while (spl[now].ch[k^1])now=spl[now].ch[k^1];
return now;
}
void del(int val){
int pre=getnxt2(val,0),nxt=getnxt2(val,1);
splaying(pre,0);splaying(nxt,pre);
spl[nxt].ch[0]=0;
}
int main(){
int n=read(),tot=0,ans=0;
ins(INF);ins(-INF);
for (int i=1;i<=n;i++){
int a=read(),b=read();
if (!tot)ins(b);
if (tot>1)
if (!a)ins(b);
else{
int pre=spl[getnxt1(b,0)].val;
int nxt=spl[getnxt1(b,1)].val;
if (abs(pre-b)<=abs(nxt-b))ans+=abs(pre-b),del(pre);
else ans=(ans+(abs(nxt-b)))%mod,del(nxt);
}
if (tot<0)
if (a==1)ins(b);
else{
int pre=spl[getnxt1(b,0)].val;
int nxt=spl[getnxt1(b,1)].val;
if (abs(pre-b)<=abs(nxt-b))ans=(ans+abs(pre-b))%mod,del(pre);
else ans=(ans+abs(nxt-b))%mod,del(nxt);
}
if (!a)cnt++;
else cnt--;
}
write(ans);
return 0;
}