#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7,M=4e3+7,p=1e9+7;
int n,k,a[N],b[N],f[N],g[N],gt[M][M]; long long ft[N];
inline int getans(int a,int b){
	if(a<b||a<0||b<0) return 0; return 1ll*f[a]*g[b]%p*g[a-b]%p;
}
int main(){
	f[0]=g[0]=f[1]=g[1]=1,k=2e3+7;
	for(int i=2;i<=1e6;i++) g[i]=1ll*(p-p/i)*g[p%i]%p;
	for(int i=2;i<=1e6;i++) f[i]=1ll*i*f[i-1]%p,g[i]=1ll*g[i-1]*g[i]%p;
	for(int i=0;i<=4e3;i++)
		for(int j=0;j<=4e3;j++) gt[i][j]=getans(i,j);
	cin>>n; for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
	for(int i=1;i<=n;i++)
		for(int x=1;x<=2*k;x++) if(b[i]-x+k>=0) ft[x]=ft[x]+gt[a[i]+b[i]][b[i]-x+k];
	for(int x=1;x<=2*k;x++) ft[x]%=p;
	int ans=0;
	for(int x=1;x<=2*k;x++) ans=(ans+1ll*ft[x]*ft[2*k-x])%p;
	for(int i=1;i<=n;i++) ans=(ans-getans(a[i]*2+b[i]*2,b[i]*2))%p;
	long long inv2=(p+1)/2;
	cout<<(ans+p)*inv2%p<<endl;
}