#include <bits/stdc++.h>
#define SPED \
ios_base::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define endl "\n"
#define fi first
#define se second
#define lint long long
#define fami signed
#define lore main
#define freefire freopen
#define int lint
const lint INF = 0x1f1f1f1f1f1f1f1f;
const lint NEG = 0xE1E1E1E1E1E1E1E1;
const lint mod = 1e9 + 19972207;
using namespace std;
int n, k, st;
lint fact[900006], inv[900006];
lint dp[900006], nw[900006];
lint a[900006], b[900006];
lint binpow(lint x, lint k)
{
if (k == 0)
return 1;
lint temp = binpow(x, k >> 1);
temp = (temp * temp) % mod;
if (k & 1)
temp = (temp * x) % mod;
return temp;
}
void reset()
{
fill(a, a + 1 + n, 0);
fill(b, b + 1 + n, 0);
fill(dp, dp + 1 + k, 0);
fill(nw, nw + 1 + k, 0);
}
fami lore()
{
if (fopen("recruitment.inp", "r"))
{
freefire("recruitment.inp", "r", stdin);
freefire("recruitment.out", "w", stdout);
}
SPED;
fact[0] = 1;
for (int i = 1; i <= 900000; ++i)
fact[i] = (fact[i - 1] * i) % mod;
inv[900000] = binpow(fact[900000], mod - 2);
for (int i = 900000 - 1; i >= 0; i--)
inv[i] = (inv[i + 1] * (i + 1)) % mod;
cin >> st;
while (st--)
{
cin >> n >> k;
for (int r = 0; r < k; ++r)
dp[r] = 0;
if (k >= 1)
dp[0] = 1;
for (int t = 2; t <= n - 1; ++t)
{
for (int r = 0; r < k; ++r)
nw[r] = 0;
lint S = 0;
for (int r = 0; r < k; ++r)
S = (S + dp[r]) % mod;
nw[0] = S;
for (int r = 0; r + 1 < k; ++r)
nw[r + 1] = (nw[r + 1] + dp[r] * (t - 1)) % mod;
b[t] = (dp[k - 1] * (t - 1)) % mod;
for (int r = 0; r < k; ++r)
dp[r] = nw[r] % mod;
}
a[0] = 1;
for (int m = 1; m <= n; ++m)
{
lint sum = 0;
for (int t = 1; t <= m + 1; ++t)
{
lint perm = (fact[m] * inv[m - (t - 1)]) % mod;
sum = (sum + perm * t) % mod;
}
a[m] = sum;
}
lint res = 0;
for (int i = k; i <= n - 1; ++i)
{
lint head = (((fact[n - 1] * inv[i]) % mod) * inv[n - 1 - i]) % mod;
lint tail = a[n - i - 1];
lint add = (((head * b[i]) % mod) * tail) % mod;
res = (res + add) % mod;
}
cout << res << endl;
reset();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIFNQRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBjaW4udGllKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgY291dC50aWUoMCk7CgojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgbGludCBsb25nIGxvbmcKI2RlZmluZSBmYW1pIHNpZ25lZAojZGVmaW5lIGxvcmUgbWFpbgojZGVmaW5lIGZyZWVmaXJlIGZyZW9wZW4KI2RlZmluZSBpbnQgbGludAoKY29uc3QgbGludCBJTkYgPSAweDFmMWYxZjFmMWYxZjFmMWY7CmNvbnN0IGxpbnQgTkVHID0gMHhFMUUxRTFFMUUxRTFFMUUxOwpjb25zdCBsaW50IG1vZCA9IDFlOSArIDE5OTcyMjA3OwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBuLCBrLCBzdDsKbGludCBmYWN0WzkwMDAwNl0sIGludls5MDAwMDZdOwpsaW50IGRwWzkwMDAwNl0sIG53WzkwMDAwNl07CmxpbnQgYVs5MDAwMDZdLCBiWzkwMDAwNl07CgpsaW50IGJpbnBvdyhsaW50IHgsIGxpbnQgaykKewogICAgaWYgKGsgPT0gMCkKICAgICAgICByZXR1cm4gMTsKCiAgICBsaW50IHRlbXAgPSBiaW5wb3coeCwgayA+PiAxKTsKICAgIHRlbXAgPSAodGVtcCAqIHRlbXApICUgbW9kOwoKICAgIGlmIChrICYgMSkKICAgICAgICB0ZW1wID0gKHRlbXAgKiB4KSAlIG1vZDsKCiAgICByZXR1cm4gdGVtcDsKfQoKdm9pZCByZXNldCgpCnsKICAgIGZpbGwoYSwgYSArIDEgKyBuLCAwKTsKICAgIGZpbGwoYiwgYiArIDEgKyBuLCAwKTsKICAgIGZpbGwoZHAsIGRwICsgMSArIGssIDApOwogICAgZmlsbChudywgbncgKyAxICsgaywgMCk7Cn0KCmZhbWkgbG9yZSgpCnsKICAgIGlmIChmb3BlbigicmVjcnVpdG1lbnQuaW5wIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVlZmlyZSgicmVjcnVpdG1lbnQuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlZWZpcmUoInJlY3J1aXRtZW50Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBTUEVEOwogICAgZmFjdFswXSA9IDE7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gOTAwMDAwOyArK2kpCiAgICAgICAgZmFjdFtpXSA9IChmYWN0W2kgLSAxXSAqIGkpICUgbW9kOwoKICAgIGludls5MDAwMDBdID0gYmlucG93KGZhY3RbOTAwMDAwXSwgbW9kIC0gMik7CgogICAgZm9yIChpbnQgaSA9IDkwMDAwMCAtIDE7IGkgPj0gMDsgaS0tKQogICAgICAgIGludltpXSA9IChpbnZbaSArIDFdICogKGkgKyAxKSkgJSBtb2Q7CgogICAgY2luID4+IHN0OwoKICAgIHdoaWxlIChzdC0tKQogICAgewogICAgICAgIGNpbiA+PiBuID4+IGs7CgogICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgazsgKytyKQogICAgICAgICAgICBkcFtyXSA9IDA7CgogICAgICAgIGlmIChrID49IDEpCiAgICAgICAgICAgIGRwWzBdID0gMTsKCiAgICAgICAgZm9yIChpbnQgdCA9IDI7IHQgPD0gbiAtIDE7ICsrdCkKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgazsgKytyKQogICAgICAgICAgICAgICAgbndbcl0gPSAwOwoKICAgICAgICAgICAgbGludCBTID0gMDsKCiAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgazsgKytyKQogICAgICAgICAgICAgICAgUyA9IChTICsgZHBbcl0pICUgbW9kOwoKICAgICAgICAgICAgbndbMF0gPSBTOwoKICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgKyAxIDwgazsgKytyKQogICAgICAgICAgICAgICAgbndbciArIDFdID0gKG53W3IgKyAxXSArIGRwW3JdICogKHQgLSAxKSkgJSBtb2Q7CgogICAgICAgICAgICBiW3RdID0gKGRwW2sgLSAxXSAqICh0IC0gMSkpICUgbW9kOwoKICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBrOyArK3IpCiAgICAgICAgICAgICAgICBkcFtyXSA9IG53W3JdICUgbW9kOwogICAgICAgIH0KCiAgICAgICAgYVswXSA9IDE7CgogICAgICAgIGZvciAoaW50IG0gPSAxOyBtIDw9IG47ICsrbSkKICAgICAgICB7CiAgICAgICAgICAgIGxpbnQgc3VtID0gMDsKCiAgICAgICAgICAgIGZvciAoaW50IHQgPSAxOyB0IDw9IG0gKyAxOyArK3QpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxpbnQgcGVybSA9IChmYWN0W21dICogaW52W20gLSAodCAtIDEpXSkgJSBtb2Q7CiAgICAgICAgICAgICAgICBzdW0gPSAoc3VtICsgcGVybSAqIHQpICUgbW9kOwogICAgICAgICAgICB9CgogICAgICAgICAgICBhW21dID0gc3VtOwogICAgICAgIH0KCiAgICAgICAgbGludCByZXMgPSAwOwoKICAgICAgICBmb3IgKGludCBpID0gazsgaSA8PSBuIC0gMTsgKytpKQogICAgICAgIHsKICAgICAgICAgICAgbGludCBoZWFkID0gKCgoZmFjdFtuIC0gMV0gKiBpbnZbaV0pICUgbW9kKSAqIGludltuIC0gMSAtIGldKSAlIG1vZDsKICAgICAgICAgICAgbGludCB0YWlsID0gYVtuIC0gaSAtIDFdOwogICAgICAgICAgICBsaW50IGFkZCA9ICgoKGhlYWQgKiBiW2ldKSAlIG1vZCkgKiB0YWlsKSAlIG1vZDsKICAgICAgICAgICAgcmVzID0gKHJlcyArIGFkZCkgJSBtb2Q7CiAgICAgICAgfQoKICAgICAgICBjb3V0IDw8IHJlcyAgPDwgZW5kbDsKICAgICAgICByZXNldCgpOwogICAgfQp9