#include #include #include #include #include #include #include #include #include #include #define mkp make_pair #define mkt make_tuple #define rep(i,n) for(int i = 0; i < (n); ++i) using namespace std; typedef long long ll; const ll MOD=1e9+7; template void chmin(T &a,const T &b){if(a>b) a=b;} template void chmax(T &a,const T &b){if(a>N; vector U,D; rep(i,N){ int t,x;cin>>t>>x; if(t==0) U.push_back(x); else D.push_back(x); } int S=U.size(); int T=D.size(); if(S) sort(U.begin(),U.end()); if(T) sort(D.begin(),D.end()); vector> dp(N+1,vector(S+1,0)); dp[0][0]=1; for(int i=0;i=val){ int z=lower_bound(U.begin(),U.end(),val)-U.begin(); ll res=dp[i][j]; mul(res,j-z+1); add(dp[i+1][j+1],res); } } } } cout<