#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
#define MOD 1000000007LL
#define F first
#define S second
#define ll long long
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll gcd(ll a, ll b)
{
if(a == 0LL)
return b;
return gcd(b, a%b);
}
const int N = 100005;
ll fact[N], ifact[N];
ll modx(ll base, ll ex)
{
ll ans = 1LL, val = base;
while(ex > 0LL)
{
if(ex&1LL)
ans = (ans*val)%MOD;
val = (val*val)%MOD;
ex = ex>>1LL;
}
return ans;
}
ll C(ll n, ll r)
{
if(r < 0LL)
return 0LL;
ll ans = fact[n];
ans = (ans*ifact[n-r])%MOD;
ans = (ans*ifact[r])%MOD;
return ans;
}
void pre()
{
fact[0] = 1LL;
ifact[0] = 1LL;
for(int i = 1; i<N; i++)
{
fact[i] = (fact[i-1]*((ll)i))%MOD;
ifact[i] = modx(fact[i], MOD-2LL);
}
return;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
// clock_t clk;
// clk = clock();
// freopen("/Users/hm_98/Downloads/Input/t10.txt", "r", stdin);
// freopen("/Users/hm_98/Downloads/Output1/o10.txt", "w", stdout);
pre();
int t;
cin >> t;
assert(t <= 20 && t >= 1);
int n, k;
while(t--)
{
cin >> n >> k;
assert(n >= 1 && n <= 100000);
assert(k >= 0 && k <= 100000);
n = n/2;
ll total = (C(2*n, n) - C(2*n, n-1) + MOD)%MOD;
if(k > (n/2))
{
cout << "1\n";
continue;
}
ll ans = 0LL, temp;
for(int i = 0; i<=k; i++)
{
temp = (C(n, i) - C(n, i-1) + MOD)%MOD;
temp = (temp*temp)%MOD;
ans = (ans + temp)%MOD;
}
ans = (ans*modx(total, MOD-2LL))%MOD;
cout << ans << "\n";
}
// clk = clock() - clk;
// cout << "Time: " << ((double)clk)/CLOCKS_PER_SEC << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIE1PRCAxMDAwMDAwMDA3TEwKI2RlZmluZSBGIGZpcnN0CiNkZWZpbmUgUyBzZWNvbmQKI2RlZmluZSBsbCBsb25nIGxvbmcKCnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwp0eXBlZGVmIHBhaXI8bGwsIGxsPiBwbGw7CgpsbCBnY2QobGwgYSwgbGwgYikKewogICAgaWYoYSA9PSAwTEwpCiAgICAgICAgcmV0dXJuIGI7CiAgICByZXR1cm4gZ2NkKGIsIGElYik7Cn0KCmNvbnN0IGludCBOID0gMTAwMDA1OwpsbCBmYWN0W05dLCBpZmFjdFtOXTsKCmxsIG1vZHgobGwgYmFzZSwgbGwgZXgpCnsKICAgIGxsIGFucyA9IDFMTCwgdmFsID0gYmFzZTsKICAgIHdoaWxlKGV4ID4gMExMKQogICAgewogICAgICAgIGlmKGV4JjFMTCkKICAgICAgICAgICAgYW5zID0gKGFucyp2YWwpJU1PRDsKICAgICAgICB2YWwgPSAodmFsKnZhbCklTU9EOwogICAgICAgIGV4ID0gZXg+PjFMTDsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCmxsIEMobGwgbiwgbGwgcikKewogICAgaWYociA8IDBMTCkKICAgICAgICByZXR1cm4gMExMOwoKICAgIGxsIGFucyA9IGZhY3Rbbl07CiAgICBhbnMgPSAoYW5zKmlmYWN0W24tcl0pJU1PRDsKICAgIGFucyA9IChhbnMqaWZhY3Rbcl0pJU1PRDsKICAgIHJldHVybiBhbnM7Cn0KCnZvaWQgcHJlKCkKewogICAgZmFjdFswXSA9IDFMTDsKICAgIGlmYWN0WzBdID0gMUxMOwogICAgZm9yKGludCBpID0gMTsgaTxOOyBpKyspCiAgICB7CiAgICAgICAgZmFjdFtpXSA9IChmYWN0W2ktMV0qKChsbClpKSklTU9EOwogICAgICAgIGlmYWN0W2ldID0gbW9keChmYWN0W2ldLCBNT0QtMkxMKTsKICAgIH0KICAgIHJldHVybjsKfQoKaW50IG1haW4oKQp7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwoKICAgIC8vIGNsb2NrX3QgY2xrOwogICAgLy8gY2xrID0gY2xvY2soKTsKICAgIAogICAgLy8gZnJlb3BlbigiL1VzZXJzL2htXzk4L0Rvd25sb2Fkcy9JbnB1dC90MTAudHh0IiwgInIiLCBzdGRpbik7CiAgICAvLyBmcmVvcGVuKCIvVXNlcnMvaG1fOTgvRG93bmxvYWRzL091dHB1dDEvbzEwLnR4dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIAogICAgcHJlKCk7CgogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKCiAgICBhc3NlcnQodCA8PSAyMCAmJiB0ID49IDEpOwoKICAgIGludCBuLCBrOwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIGNpbiA+PiBuID4+IGs7CgogICAgICAgIGFzc2VydChuID49IDEgJiYgbiA8PSAxMDAwMDApOwogICAgICAgIGFzc2VydChrID49IDAgJiYgayA8PSAxMDAwMDApOwoKICAgICAgICBuID0gbi8yOwogICAgICAgIGxsIHRvdGFsID0gKEMoMipuLCBuKSAtIEMoMipuLCBuLTEpICsgTU9EKSVNT0Q7CgogICAgICAgIGlmKGsgPiAobi8yKSkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIjFcbiI7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgbGwgYW5zID0gMExMLCB0ZW1wOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGk8PWs7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIHRlbXAgPSAoQyhuLCBpKSAtIEMobiwgaS0xKSArIE1PRCklTU9EOwogICAgICAgICAgICB0ZW1wID0gKHRlbXAqdGVtcCklTU9EOwogICAgICAgICAgICBhbnMgPSAoYW5zICsgdGVtcCklTU9EOwogICAgICAgIH0KICAgICAgICBhbnMgPSAoYW5zKm1vZHgodG90YWwsIE1PRC0yTEwpKSVNT0Q7CiAgICAgICAgY291dCA8PCBhbnMgPDwgIlxuIjsKICAgIH0KCiAgICAvLyBjbGsgPSBjbG9jaygpIC0gY2xrOwogICAgLy8gY291dCA8PCAiVGltZTogIiA8PCAoKGRvdWJsZSljbGspL0NMT0NLU19QRVJfU0VDIDw8ICJcbiI7CgogICAgcmV0dXJuIDA7Cn0=