​题目传送门​​ 代码:

#include<bits/stdc++.h>
using namespace std;

#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
typedef long long LL;
const int mod=1e9+7;
int l[110],r[110];

LL mypow(LL a,LL b){

LL sum=1;
while(b){

if(b&1) sum=sum*a%mod;
a=a*a%mod;
b>>=1;
}
return sum;
}

int main(){

int T;
scanf("%d",&T);
while(T--){

int n;
scanf("%d",&n);
LL sum=1;
int Max=0,Min=0;
for(int i=1;i<=n;i++) scanf("%d%d",&l[i],&r[i]),sum=sum*(r[i]-l[i]+1)%mod,Min=max(Min,l[i]),Max=max(Max,r[i]);
LL fm=mypow(sum,mod-2);
LL key=0;
for(int i=Min;i<=Max;i++){

LL tmp=1;
for(int j=1;j<=n;j++){

int L=l[j],R=min(i,r[j]);
tmp=tmp*(2*i-L-R+2)*(R-L+1)/2%mod;
}
key=(key+tmp)%mod;
tmp=1;
for(int j=1;j<=n;j++){

int L=l[j],R=min(i-1,r[j]);
if(L>R){

tmp=0;
break;
}
tmp=tmp*(2*i-L-R+2)*(R-L+1)/2%mod;
}
key=(key+mod-tmp)%mod;
}
printf("%lld\n",key*fm%mod);
}
}