/*
区间 [l1,r1][l2,r2] 的形成逆序对的概率
只考虑相交的情况:三种情况对应的总数tot进行分情况讨论
这两个区间里取到逆序对的概率是tot/len1*len2
*/
#include<bits/stdc++.h>
using namespace std;
#define N 10005
#define ll long long
#define mod 998244353
struct Inv{
ll l,r,base;
}inv[N];
int cmp(Inv a,Inv b){return a.l+a.r<b.l+b.r;}
ll Pow(ll a,ll b){
ll res=1;
while(b){
if(b%2)res=res*a%mod;
b>>=1;a=a*a%mod;
}
return res;
}
int n;
ll solve(ll i,ll j){
if(inv[i].r<=inv[j].l)return 0;//逆序对概率为0
ll R=min(inv[i].r,inv[j].r);
ll L=max(inv[i].l,inv[j].l);
ll len=R-L+1,res=0;
if(inv[i].r>inv[j].r){
res=len*(len-1)/2%mod;
res=(res+(inv[i].r-inv[j].r)*(inv[j].r-inv[j].l+1)%mod)%mod;
}
else if(inv[i].r<=inv[j].r && inv[i].l>=inv[j].l){
res=len*(len-1)/2%mod;
res=(res+(inv[i].r-inv[i].l+1)*(inv[i].l-inv[j].l)%mod)%mod;
}
else if(inv[i].r<=inv[j].r && inv[i].l<inv[j].l){
res=len*(len-1)/2%mod;
}
res=res*inv[i].base%mod*inv[j].base%mod;
return res;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>inv[i].l>>inv[i].r;
sort(inv+1,inv+1+n,cmp);
for(int i=1;i<=n;i++)
inv[i].base=Pow(inv[i].r-inv[i].l+1,mod-2);
ll ans=0;
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
ans=(ans+solve(i,j))%mod;
cout<<ans<<'\n';
}