#include #include using namespace std; using namespace atcoder; using mint = modint1000000007; vector fact, inv; void init(int n) { fact.push_back(1); inv.push_back(1); for (int i = 0; i < n; i++) { fact.push_back(fact.at(i) * (i + 1)); inv.push_back(fact.at(i + 1).inv()); } } mint ncr(int n, int r) { if (r < 0 or n < r) { return 0; } return fact.at(n) * inv.at(r) * inv.at(n - r); } int main() { int n, m; cin >> n >> m; init(2 * n); mint ans = 2 * n * ncr(2 * n, n); for (int i = 0; i < m; i++) { int t, x, y; cin >> t >> x >> y; if (t == 1) { ans -= ncr(x + y, x) * ncr(2 * n - x - y - 1, n - x - 1); } else { ans -= ncr(x + y, x) * ncr(2 * n - x - y - 1, n - x); } } cout << ans.val() << endl; return 0; }