#include<bits/stdc++.h>
#define int long long
//#define ll long long
#define ld long double
#define _1 first
#define _2 second
#define yes cout<<"Yes\n"
#define nah cout<<"No\n"
#define FFF ios_base::sync_with_stdio(0);cin.tie(0);
#define ipr pair<int,int>
#define ret return
#define intt int32_t
#define mid ((l+r)/2)
#define pb push_back
#define lll __int128
using namespace std;
int tst, ts;
intt mo = 0*(998244353)+(1e9+7)*1, dx[] = {0, -1, -1, 0}, dy[] = {1, 1, 2, 0};
int mul( int x, int y ) {
ret ( ( x % mo ) * ( y % mo ) ) % mo;
ret x*y;
}
int pwo( int x, int y ) {
int res = 1;
for( int i = 63; i + 1; i-- )
res = mul( res, res * ( ( 1ll << i )&y ? x : 1 ) );
ret res;
}
int dvii( int x, int y ) {
ret mul( x, pwo(y,mo-2) );
}
int oo( char x , char y) {
ret ( int )x - y;
}
int lgg( int x, int y ) {
int u = 0;
while( x ) {
u++;
x /= y;
}
ret u;
}//g++ -Wall -o "%e" "%f" && "./%e"
int mun( int x, int y ) {
while( x < y )x += mo;
ret ( x - y ) % mo;
}
int add( int x, int y ) {
ret x + y - ( mo * ( x + y >= mo ) );
ret x + y;
}
int lcm( int x, int y ) {
if(x*y==0)ret max(x,y);
int o=__gcd(x,y);
x/=o;
ret x*y;
}
#define endl '\n';
#define nl no*2
#define nr no*2+1
const int M =1e7+7, N = 3e3+7, P = 1e12, inf = 1e16 ;
int n,k,l[N],ifa[N],cn[N][N],ccn[N][N],dp[N][N],r[N],c[N];
int cnk(int n,int k){
if(n==0||k==0)ret 1;
int u=ifa[min(k,n-k)];
for(int i=n;i>max(n-k,k);i--)
u=mul(u,i);
ret u;
}
void solve(){
cin>>n;
set<int>st;
int ii=1;
for(int i=0;i<N;i++){
ii=mul(ii,i);
cn[i][0]=1;
for(int j=1;j<=i;j++){
cn[i][j]=mul(ii,mul(ifa[i-j],ifa[j]));
cn[i][j]=add(cn[i][j],cn[i][j-1]);
}
}
vector<int>v(1);
for(int i=1;i<=n;i++){
cin>>l[i]>>r[i];
st.insert(l[i]);
st.insert(r[i]);
}
for(auto i:st){
if(v.size()&&v.back()<i-1)
c[v.size()]=i-v.back()-1,v.pb(i-1);
c[v.size()]=1;
v.pb(i);
}
for(int i=1;i<v.size();i++){
ccn[i][0]=1;
int o=1;
for(int j=1;j<min(c[i],N);j++){
o=mul(o,c[i]-j+1);
ccn[i][j]=mul(ifa[j],o);
ccn[i][j]=add(ccn[i][j-1],ccn[i][j]);
}
}
dp[0][0]=1;
for(int i=1;i<v.size();i++){
int u=0,o=0;
for(int j=0;j<=n;j++)
dp[i][j]=dp[i-1][j];
for(int j=1;j<=n;j++){
o=add(o,dp[i-1][j-1]);
if(l[j]>v[i]||v[i]>r[j])
continue;
if(c[i]==1)
dp[i][j]=add(dp[i][j],o);
int u=1;
for(int k=j+1;k<=n;k++){
if(l[k]<=v[i]&&v[i]<=r[k])
u++;
else
continue;
if(c[i]<=u){
int uu=0;
for(int p=0;p<=c[i]-2;p++)
uu=add(uu,cnk(u-2,p));
//dp[i][k]=add(dp[i][k],mul(o,uu));
dp[i][k]=add(dp[i][k],mul(o,cn[u-2][c[i]-2]));
}
else{
int uu=0;
for(int p=0;p<=u-2;p++)
uu=add(uu,cnk(c[i],p+2));
//dp[i][k]=add(dp[i][k],mul(o,uu));
dp[i][k]=add(dp[i][k],mul(o,mun(ccn[i][u],ccn[i][1])));
}
}
}
}
int o=0;
for(int i=0;i<=n;i++)
o=add(o,dp[v.size()-1][i]);
cout<<mun(o,1)<<endl;
}
intt main() {
FFF
ifa[0]=1;
for(int i=1;i<N;i++)
ifa[i]=mul(dvii(1,i),ifa[i-1]);
//freopen("7.in", "r", stdin);
//freopen("out.txt", "w", stdout);
tst = 1;
//cin >> tst;
for( ts = 1; ts <= tst; ts++ ){
solve();
}
}
// Adeeb's code