#pragma GCC optimize("O3") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #pragma GCC optimize("unroll-loops") #include #define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define files(name) name!=""?freopen(name".in","r",stdin),freopen(name".out","w",stdout):0 #define all(a) a.begin(),a.end() #define len(a) (int)(a.size()) #define elif else if #define mp make_pair #define pb push_back #define fir first #define sec second using namespace std; #define int long long typedef unsigned long long ull; typedef pair pii; typedef vector vi; typedef long double ld; typedef long long ll; const int arr=2e5+10; const int ar=2e3+10; const ld pi=acos(-1); const ld eps=1e-10; const ll md=1e9+7; ///---program start---/// #define arr (int)(4e5+10) int f[arr]; int rf[arr]; int bpow(int a,int n) { int res=1; while (n){ if (n&1){ res=res*a%md; } n/=2; a=a*a%md; } return res; } int C(int n,int k) { if (k<0||k>n){ return 0; } return f[n]*rf[k]%md*rf[n-k]%md; } void solve() { int n,k; cin>>n>>k; vector a(0); for (int i=0;i>l>>r; a.pb({l,r}); } sort(all(a)); multiset R; R.clear(); int ans=C(n,k); for (auto i:a){ while (!R.empty()&&*R.begin()=0;i--){ rf[i]=rf[i+1]*(i+1)%md; } int test; cin>>test; while (test--){ solve(); } }