#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
#define print(a) for(auto x : a) cout << x << " "; cout << endl
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
inline int power(int a, int b, int mod=M) {
int x = 1;
a %= mod;
while (b) {
if (b & 1) x = (x * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return x;
}
//_ ***************************** START Below *******************************
vector<int> fact(N+1);
vector<int> iFact(N+1);
void compute(){
fact[0] = 1;
for(int i=1; i<=N; i++){
fact[i] = ( fact[i-1] * i%M )%M;
}
//* TC = O( N * logM )
// iFact[0] = 1;
// for(int i=1; i<=N; i++){
// iFact[i] = power(fact[i], M-2, M);
// }
//* TC = O( N + logM )
iFact[N] = power(fact[N], M-2, M);
for(int i=N-1; i>=0; i--){
iFact[i] = (iFact[i+1] * (i+1))%M;
}
}
//* Case 1 : n <= 1e6 && r <= 1e6
int nCr(int n, int r){
if(r>n || r<0) return 0;
return (fact[n] * ( iFact[r]%M * iFact[n-r]%M )%M ) % M;
}
int consistency(int n, int r){
return nCr(n, r);
}
int practice(int n, int r){
return 0;
}
void solve() {
static int _ = (compute(), 0);
int n, r;
cin>> n >> r;
cout << consistency(n, r) << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQojZGVmaW5lIHByaW50KGEpICAgICAgICAgZm9yKGF1dG8geCA6IGEpIGNvdXQgPDwgeCA8PCAiICI7IGNvdXQgPDwgZW5kbAoKCmNvbnN0IGludCBNID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE4gPSAzZTUrOTsKY29uc3QgaW50IElORiA9IDJlOSsxOwpjb25zdCBpbnQgTElORiA9IDIwMDAwMDAwMDAwMDAwMDAwMDE7CgppbmxpbmUgaW50IHBvd2VyKGludCBhLCBpbnQgYiwgaW50IG1vZD1NKSB7CiAgICBpbnQgeCA9IDE7CiAgICBhICU9IG1vZDsKICAgIHdoaWxlIChiKSB7CiAgICAgICAgaWYgKGIgJiAxKSB4ID0gKHggKiBhKSAlIG1vZDsgCiAgICAgICAgYSA9IChhICogYSkgJSBtb2Q7CiAgICAgICAgYiA+Pj0gMTsKICAgIH0KICAgIHJldHVybiB4Owp9CgoKLy9fICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFNUQVJUIEJlbG93ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCgp2ZWN0b3I8aW50PiBmYWN0KE4rMSk7CnZlY3RvcjxpbnQ+IGlGYWN0KE4rMSk7CgoKdm9pZCBjb21wdXRlKCl7CglmYWN0WzBdID0gMTsKCQoJZm9yKGludCBpPTE7IGk8PU47IGkrKyl7CgkJZmFjdFtpXSA9ICggZmFjdFtpLTFdICogaSVNICklTTsKCX0KCQoJLy8qIFRDID0gTyggTiAqIGxvZ00gKQoJLy8gaUZhY3RbMF0gPSAxOwoJLy8gZm9yKGludCBpPTE7IGk8PU47IGkrKyl7CgkvLyAJaUZhY3RbaV0gPSBwb3dlcihmYWN0W2ldLCBNLTIsIE0pOwoJLy8gfQoJCgkvLyogVEMgPSBPKCBOICsgbG9nTSApCglpRmFjdFtOXSA9IHBvd2VyKGZhY3RbTl0sIE0tMiwgTSk7Cglmb3IoaW50IGk9Ti0xOyBpPj0wOyBpLS0pewoJCWlGYWN0W2ldID0gKGlGYWN0W2krMV0gKiAoaSsxKSklTTsKCX0KCQoJCn0KCgoKCi8vKiBDYXNlIDEgOiBuIDw9IDFlNiAgJiYgIHIgPD0gMWU2CgppbnQgbkNyKGludCBuLCBpbnQgcil7CglpZihyPm4gfHwgcjwwKSByZXR1cm4gMDsKCQoJcmV0dXJuIChmYWN0W25dICogKCBpRmFjdFtyXSVNICogaUZhY3Rbbi1yXSVNICklTSApICUgTTsKfQoKCmludCBjb25zaXN0ZW5jeShpbnQgbiwgaW50IHIpewoJCglyZXR1cm4gbkNyKG4sIHIpOwoKfQoKCgoKCgoKCgoKCgoKCgppbnQgcHJhY3RpY2UoaW50IG4sIGludCByKXsKCQoJCgogICAgcmV0dXJuIDA7Cn0KCgoKCgp2b2lkIHNvbHZlKCkgewoJCiAgICBzdGF0aWMgaW50IF8gPSAoY29tcHV0ZSgpLCAwKTsKICAgIAogICAgaW50IG4sIHI7CiAgICBjaW4+PiBuID4+IHI7CiAgICAKICAgIAogICAgY291dCA8PCBjb25zaXN0ZW5jeShuLCByKSA8PCBlbmRsOwoKCn0KCgoKCgppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpbnQgdCA9IDE7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9