/*
//! In The Name Of Allah
*/
#include<bits/stdc++.h>
using namespace std;
#define tt int t;cin>>t;while(t--)
#define itr(i,a) for(int i=0;i<a;i++)
#define ittr(i,bg,a) for(int i=bg;i<a;i++)
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define ll long long
#define endd cout<<endl
#define vc(v, n) vector<ll> v(n)
#define srt(v) sort(v.begin(), v.end())
#define rsrt(v) sort(v.rbegin(), v.rend())
#define pb(a,x) a.push_back(x)
#define MOD 1000000007
#define f first
#define sc second
#define endl '\n'
const int N=1e5+5;
vector<ll>fact_ar(N,1),modinv(N,1);
ll power(ll x,ll mod){
if(mod<0) return 0;
ll ans=1;
while(mod){
if(mod%2==0){
x=(x*x)%MOD;
mod/=2;
}
else{
ans=(ans*x)%MOD;
mod--;
}
}
return ans;
}
void precomp(){
fact_ar[0]=1;
for(int i=1;i<N;i++){
fact_ar[i]=(fact_ar[i-1]*i)%MOD;
modinv[i]=power(fact_ar[i],MOD-2);
}
}
ll ncr(ll n,ll r){
if(n<0||r<0||r>n) return 0;
ll numo=fact_ar[n];
ll ans=((fact_ar[n]*modinv[r])%MOD*modinv[n-r])%MOD;
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
// sieve();
// divis();
precomp();
tt{
ll n,r;
cin>>n>>r;
cout<<ncr(n,r)<<endl;
}
}
CQkvKgoJCQkvLyEgSW4gVGhlIE5hbWUgT2YgQWxsYWgKCQkJCQoJCQkKCQkJCQoJCQkJCgkJKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CiAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAjZGVmaW5lIHR0IGludCB0O2Npbj4+dDt3aGlsZSh0LS0pCiAgI2RlZmluZSBpdHIoaSxhKSBmb3IoaW50IGk9MDtpPGE7aSsrKQojZGVmaW5lIGl0dHIoaSxiZyxhKSBmb3IoaW50IGk9Ymc7aTxhO2krKykKICAjZGVmaW5lIHllcyBjb3V0PDwiWUVTIjw8ZW5kbAogICNkZWZpbmUgbm8gY291dDw8Ik5PIjw8ZW5kbAogICNkZWZpbmUgbGwgbG9uZyBsb25nCiAgI2RlZmluZSBlbmRkIGNvdXQ8PGVuZGwKICAjZGVmaW5lIHZjKHYsIG4pIHZlY3RvcjxsbD4gdihuKSAgCiAgI2RlZmluZSBzcnQodikgc29ydCh2LmJlZ2luKCksIHYuZW5kKCkpCiNkZWZpbmUgcnNydCh2KSBzb3J0KHYucmJlZ2luKCksIHYucmVuZCgpKQojZGVmaW5lIHBiKGEseCkgYS5wdXNoX2JhY2soeCkKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwogICNkZWZpbmUgZiBmaXJzdAogICNkZWZpbmUgc2Mgc2Vjb25kCiNkZWZpbmUgZW5kbCAnXG4nCmNvbnN0IGludCBOPTFlNSs1Owp2ZWN0b3I8bGw+ZmFjdF9hcihOLDEpLG1vZGludihOLDEpOwpsbCBwb3dlcihsbCB4LGxsIG1vZCl7CiAgICBpZihtb2Q8MCkgcmV0dXJuIDA7CiAgICBsbCBhbnM9MTsKICAgIHdoaWxlKG1vZCl7CiAgICAgICAgaWYobW9kJTI9PTApewogICAgICAgICAgICB4PSh4KngpJU1PRDsKICAgICAgICAgICAgbW9kLz0yOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBhbnM9KGFucyp4KSVNT0Q7CiAgICAgICAgICAgIG1vZC0tOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBhbnM7Cn0Kdm9pZCBwcmVjb21wKCl7CiAgICBmYWN0X2FyWzBdPTE7CiAgICBmb3IoaW50IGk9MTtpPE47aSsrKXsKICAgICAgICBmYWN0X2FyW2ldPShmYWN0X2FyW2ktMV0qaSklTU9EOwogICAgICAgIG1vZGludltpXT1wb3dlcihmYWN0X2FyW2ldLE1PRC0yKTsKCiAgICB9Cn0KCmxsIG5jcihsbCBuLGxsIHIpewogICAgaWYobjwwfHxyPDB8fHI+bikgcmV0dXJuIDA7CiAgICBsbCBudW1vPWZhY3RfYXJbbl07CiAgICBsbCBhbnM9KChmYWN0X2FyW25dKm1vZGludltyXSklTU9EKm1vZGludltuLXJdKSVNT0Q7CiAgICByZXR1cm4gYW5zOwp9CgoKICBpbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgICBjaW4udGllKG51bGxwdHIpOwogICAgLy8gc2lldmUoKTsKICAgLy8gZGl2aXMoKTsKICAgcHJlY29tcCgpOwogIHR0ewogICAgbGwgbixyOwogICAgY2luPj5uPj5yOwogICAgY291dDw8bmNyKG4scik8PGVuZGw7CiAKCiAgfQogIH0KICAKCg==