#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <numeric>
#include <math.h>
#include <map>
using namespace std;
typedef long long int ll;

int main(){
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    int n; cin >> n;
    vector<pair<ll,ll>> v(n);
    for(int i=0;i<n;i++){
        cin >> v[i].first >> v[i].second;
    }
    sort(v.begin(), v.end());
    if(n%2){
        ll l=v[n/2].first;
        ll r=v[n/2].second;
        for(int i=n/2;i<n;i++){
            if(v[i].first<=r){
                r=max(r,v[i].second);
            }
        }
        cout << r-l+1 << endl;
    }
    else{
        ll l=-1,r=2e18;
        ll nn=(n+1)/2;
        while(r-l>1){
            ll mid=(l+r)/2;
            int cnt=0;
            for(int i=0;i<n;i++){
                if(v[i].first<=mid){
                    cnt++;
                }
            }
            if(cnt>=nn){
                r=mid;
            }
            else{
                l=mid;
            }
        }
        ll rr=r;
        for(int i=0;i<n;i++){
            if(v[i].first<=rr&&v[i].second>=rr){
                l=max(l,v[i].second);
            }
        }
        ll mx=l-rr+1;
        ll ppp=l;
        
        l=-1,r=2e18;
        while(r-l>1){
            ll mid=(l+r)/2;
            int cnt=0;
            for(int i=0;i<n;i++){
                if(v[i].second>=mid){
                    cnt++;
                }
            }
            if(cnt>=nn){
                l=mid;
            }
            else{
                r=mid;
            }
        }
        for(int i=0;i<n;i++){
            if(v[i].first<=l&&v[i].second>=l){
                r=min(r,v[i].first);
            }
        }
        mx=max(l-r+1,mx);
        for(int i=0;i<n;i++){
            if(v[i].first<=l&&l<=v[i].second){
                if(v[i].first<=ppp&&ppp<=v[i].second){
                    mx=max(l-rr+1,mx);
                }
            }
        }
        cout << mx << endl;
    }
}