#include <iostream>
using namespace std;
const int N=1e6+10;
typedef long long ll;
ll p1[N],p2[N],b1[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
int a[n],b[n];
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i];
}
long long bal=0,fnl=0;
for(int i=0;i<n;i++)
{
bal+=b[i];
bal-=a[i];
b1[i]=bal;
fnl+=max(0ll,-bal);
// cout<<bal<<' ';
}
// cout<<endl;
for(int i=n-1;i>=0;i--)
p1[i]=p1[i+1]+(b1[i]<0);
// suf
bal=0;
for(int i=n-1;i>=0;i--)
{
bal+=b[i];
bal-=a[i];
b1[i]=bal;
fnl+=max(0ll,-bal);
// cout<<bal<<' ';
}
// cout<<endl;
for(int i=0;i<n;i++)
{
p2[i]=0;
if(i)p2[i]=p2[i-1];
p2[i]+=(b1[i]<0);
// cout<<b1[i]<<' ';
}
// cout<<endl;
ll og=0;
for(int i=0;i<n;i++)og=max(og,p2[i]+p1[i]);
// cout<<fnl<<endl;
// cout<<og<<endl;
if(bal<-1)
{
// pick the nearest two nodes
for(int i=0;i<n;i++)
{
int mi=min(a[i],b[i]);
a[i]-=mi;
b[i]-=mi;
cout<<a[i]<<' '<<b[i]<<endl;
}
fnl=0;
for(int d=1;d<=n;d++)
{
for(int i=0;i+d<n;i++)
{
int j=i+d;
int s1=(a[i]>0)?1:-1;
int s2=(a[j]>0)?1:-1;
if(s1!=s2)
{
if(s1==-1)swap(i,j);
int mi=min(a[i],b[j]);
// cout<<"giver "<<i<<' '<<j<<' '<<mi<<endl;
// cout<<a[i]<<' '<<b[i]<<endl;
// cout<<a[j]<<' '<<b[j]<<endl;
fnl+=1ll*d*mi;
a[i]+=mi;
b[j]-=mi;
if(s1==-1)swap(i,j);
}
}
}
cout<<fnl<<endl;
}
else
{
cout<<fnl-og*(bal!=0)<<endl;
}
}