#include using namespace std; #define REP(i,n) for(int i=0;i<(n);i++) #define ALL(v) v.begin(),v.end() using ll=long long; const ll MOD=1e9+7; ll pw(ll n,int k){ assert(k>=0); ll res=1; while(k){ if(k&1)(res*=n)%=MOD; (n*=n)%=MOD; k>>=1; } return res; } ll Factorial[5000000],Finverse[5000000]; inline void Cinit(){ Factorial[0]=1; for(int i=1;i<5e6;i++)Factorial[i]=(Factorial[i-1]*i)%MOD; Finverse[4999999]=pw(Factorial[4999999],MOD-2); for(int i=4999998;i>=0;i--)Finverse[i]=(i+1)*Finverse[i+1]%MOD; } ll nCk(int n,int k){ if(n>n>>m; ll ans=nCk(2*n,n)*2*n%MOD; while(m--){ int t,x,y;cin>>t>>x>>y; if(t==1){ ans-=nCk(x+y,x)*nCk(n-(x+1)+n-y,n-y)%MOD; } else{ ans-=nCk(x+y,x)*nCk(n-(y+1)+n-x,n-x)%MOD; } ans+=MOD; if(ans>=MOD)ans-=MOD; } cout<