#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// Nhập vào n, k. In ra nCk mod 10^9 + 7.
// nCk = n! / [(n - k)! * k!]
const int N = 1e6 + 5;
const int MOD = 1e9 + 7;
ll fact[N], inv_fact[N];
ll binpow(ll a, ll b) {
ll ans = 1;
for (; b > 0; b >>= 1) {
if (b & 1) ans = ans * a % MOD;
a = a * a % MOD;
}
return ans;
}
ll inv(int x) {
return binpow(x, MOD - 2);
}
void precompute() {
fact[0] = 1;
// i! = (i - 1)! * i
for (int i = 1; i < N; i++) fact[i] = fact[i - 1] * i % MOD;
inv_fact[N - 1] = inv(fact[N - 1]);
for (int i = N - 2; i >= 0; i--) inv_fact[i] = inv_fact[i + 1] * (i + 1) % MOD;
}
ll nCk(int n, int k) { // n >= k
if (n < k) return 0;
return fact[n] * inv_fact[n - k] % MOD * inv_fact[k] % MOD;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int t; cin >> t;
precompute(); // O(n)
while (t--) {
int n, k;
cin >> n >> k;
cout << nCk(n, k) << '\n'; // O(1)
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKCi8vIE5o4bqtcCB2w6BvIG4sIGsuIEluIHJhIG5DayBtb2QgMTBeOSArIDcuICAKCi8vIG5DayA9IG4hIC8gWyhuIC0gaykhICogayFdCgpjb25zdCBpbnQgTiA9IDFlNiArIDU7ICAKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7ICAKCmxsIGZhY3RbTl0sIGludl9mYWN0W05dOyAgCgpsbCBiaW5wb3cobGwgYSwgbGwgYikgewoJbGwgYW5zID0gMTsgIAoJZm9yICg7IGIgPiAwOyBiID4+PSAxKSB7CgkJaWYgKGIgJiAxKSBhbnMgPSBhbnMgKiBhICUgTU9EOyAgICAKCQlhID0gYSAqIGEgJSBNT0Q7IAoJfQoJcmV0dXJuIGFuczsgCn0KCmxsIGludihpbnQgeCkgewoJcmV0dXJuIGJpbnBvdyh4LCBNT0QgLSAyKTsgICAKfQoKdm9pZCBwcmVjb21wdXRlKCkgewoJZmFjdFswXSA9IDE7ICAKCS8vIGkhID0gKGkgLSAxKSEgKiBpICAKCWZvciAoaW50IGkgPSAxOyBpIDwgTjsgaSsrKSBmYWN0W2ldID0gZmFjdFtpIC0gMV0gKiBpICUgTU9EOyAgIAoKCWludl9mYWN0W04gLSAxXSA9IGludihmYWN0W04gLSAxXSk7ICAgCglmb3IgKGludCBpID0gTiAtIDI7IGkgPj0gMDsgaS0tKSBpbnZfZmFjdFtpXSA9IGludl9mYWN0W2kgKyAxXSAqIChpICsgMSkgJSBNT0Q7ICAgCn0KCmxsIG5DayhpbnQgbiwgaW50IGspIHsgLy8gbiA+PSBrIAoJaWYgKG4gPCBrKSByZXR1cm4gMDsgICAKCXJldHVybiBmYWN0W25dICogaW52X2ZhY3RbbiAtIGtdICUgTU9EICogaW52X2ZhY3Rba10gJSBNT0Q7ICAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgIAoJaW50IHQ7IGNpbiA+PiB0OwoKCXByZWNvbXB1dGUoKTsgLy8gTyhuKSAKCgl3aGlsZSAodC0tKSB7CgkJaW50IG4sIGs7IAoJCWNpbiA+PiBuID4+IGs7ICAKCgkJY291dCA8PCBuQ2sobiwgaykgPDwgJ1xuJzsgLy8gTygxKSAKCX0KfQ==