#include #define int long long #define pb push_back using namespace std; const int N = 3e3 + 5, mod = 1e9 + 7; int n, f[N][N]; int a, b, C[2][N]; vector S[2]; signed main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); freopen(".in", "r", stdin); freopen(".out", "w", stdout); int i, j, t, x; cin >> n; for(i = 1; i <= n; i++) { cin >> t >> x; S[t].pb(x); } a = S[0].size(), b = S[1].size(); for(i = 1; i <= n; i++) { for(auto p : S[0]) C[0][i] += (int)(i <= p); for(auto p : S[1]) C[1][i] += (int)(i >= p); } f[0][0] = 1; for(i = 0; i <= a; i++) { for(j = 0; j <= b; j++) { int tmp = i + j + 1; if(i < a) f[i + 1][j] = (f[i + 1][j] + f[i][j] * (C[0][tmp] - (a - (i + 1)))) % mod; if(j < b) f[i][j + 1] = (f[i][j + 1] + f[i][j] * (C[1][tmp] - j)) % mod; } } cout << f[a][b]; return 0; }