#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char buf[10000000], *ptr = buf - 1;
inline int readint(){
int f = 1, n = 0;
char ch = *++ptr;
while(ch < ‘0‘ || ch > ‘9‘){
if(ch == ‘-‘) f = -1;
ch = *++ptr;
}
while(ch <= ‘9‘ && ch >= ‘0‘){
n = (n << 1) + (n << 3) + ch - ‘0‘;
ch = *++ptr;
}
return f * n;
}
const int maxn = 50000 + 10;
struct Node{
int id, x;
Node(){}
Node(int _id, int _x): id(_id), x(_x){}
bool operator < (const Node &a) const {
return x < a.x;
}
}a[maxn];
int N, l[maxn * 2] = {0};
int main(){
fread(buf, sizeof(char), sizeof(buf), stdin);
N = readint();
for(int i = 1; i <= N; i++){
a[i].id = readint();
a[i].x = readint();
}
sort(a + 1, a + N + 1);
int ans = 0;
for(int sum = 0, i = 1; i <= N; i++){
if(a[i].id == 1) sum++;
else sum--;
if(sum == 0) ans = max(ans, a[i].x - a[1].x);
else{
if(l[sum + N] != 0) ans = max(ans, a[i].x - a[l[sum + N] + 1].x);
else l[sum + N] = i;
}
}
printf("%d\n", ans);
return 0;
}