#include using namespace std; #define int long long const int N=3005,M=1e9+7; int n,a[N],b[N],c1,c2,f[N][N]; signed main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n; for(int i=1,t,x;i<=n;i++){ cin>>t>>x; if(t)a[++c1]=x; else b[++c2]=x; } sort(a+1,a+1+c1);sort(b+1,b+1+c2); f[0][0]=1; for(int i=1;i<=n;i++){ for(int j=0;j<=i;j++){ if(j){ int ps=upper_bound(a+1,a+1+c1,i)-a-1; if(ps>=j) f[j][i-j]=(f[j][i-j]+f[j-1][i-j]*(ps-j+1)%M)%M; } if(i-j){ int ps=lower_bound(b+1,b+1+c2,i)-b-1; if(ps<=i-j-1) f[j][i-j]=(f[j][i-j]+f[j][i-j-1]*(i-j-1-ps+1)%M)%M; } } } cout<