#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
const lint INF = 0x1f1f1f1f1f1f1f1f;
const lint NEG = 0xE1E1E1E1E1E1E1E1;
const lint mod = 1e9 + 19972207;
using namespace std;
int t;
lint ways;
lint p[260005], gt[260005], inv[260005], a[260005];
int n;
lint k;
vector<lint> maku;
lint binpow(lint x, lint SA)
{
if (SA == 0)
return 1;
lint temp = binpow(x, SA >> 1);
temp *= temp;
temp %= mod;
if (SA & 1)
{
temp *= x;
temp %= mod;
}
return temp;
}
void Try(int idx, int cnt, int mask)
{
if (idx == n)
{
if (cnt == 0)
maku.emplace_back(mask);
return;
}
if (cnt < 0)
return;
Try(idx + 1, cnt + 1, mask | (1 << idx)); /// mask 1 là bit đó cho sang trái, else cho sang phải
Try(idx + 1, cnt - 1, mask);
}
string debug(lint masku)
{
string res;
for (int i = 0; i < n; i++)
res += char('0' + (masku >> i & 1));
// reverse(res.begin(), res.end());
return res;
}
void solve12()
{
maku.clear();
Try(0, 0, 0);
if (maku.size() < k)
{
cout << -1 << endl;
return;
}
sort(maku.begin(), maku.end());
int cntl = 0, cntr = 0;
static int l[25], r[25];
for (int i = 0; i < n; i++)
{
if (maku[k - 1] >> i & 1)
l[++cntl] = a[i + 1];
else
r[++cntr] = a[i + 1];
}
sort(l + 1, l + 1 + cntl, greater<int>());
sort(r + 1, r + 1 + cntr, greater<int>());
lint res = 0;
int cnt = 1;
for (int i = 1; i <= cntl; i++)
{
res += (l[i] * p[cnt++]) % mod;
res %= mod;
}
for (int i = 1; i <= cntr; i++)
{
res += (r[i] * p[cnt++]) % mod;
res %= mod;
}
cout << res << endl;
}
void solve3()
{
int cnt = 1;
lint res = 0;
for (lint i = n; i >= 1; i--)
{
res += (i * p[cnt++]) % mod;
res %= mod;
}
for (lint i = 2 * n; i >= n + 1; i--)
{
res += (i * p[cnt++]) % mod;
res %= mod;
}
cout << res << endl;
}
fami lore()
{
if (fopen("permutations.inp", "r"))
{
freefire("permutations.inp", "r", stdin);
freefire("permutations.out", "w", stdout);
}
SPED;
p[0] = 1;
for (int i = 1; i <= 260000; i++)
{
p[i] = p[i - 1] * 22071997;
p[i] %= mod;
}
gt[0] = 1;
for (int i = 1; i <= 260000; i++)
{
gt[i] = gt[i - 1] * i;
gt[i] %= mod;
}
inv[260000] = binpow(gt[260000], mod - 2);
for (int i = 259999; i >= 0; i--)
{
inv[i] = inv[i + 1] * (i + 1);
inv[i] %= mod;
}
iota(a + 1, a + 1 + 260000, 1);
cin >> t;
while (t--)
{
cin >> n >> k;
if (k == 1)
{
solve3();
}
else if (n <= 13)
{
n *= 2;
solve12();
}
else
cout << -1 << endl;
}
}
// Let your soul wander where dreams are born.
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIFNQRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBjaW4udGllKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgY291dC50aWUoMCk7CgojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgbGludCBsb25nIGxvbmcKI2RlZmluZSBmYW1pIHNpZ25lZAojZGVmaW5lIGxvcmUgbWFpbgojZGVmaW5lIGZyZWVmaXJlIGZyZW9wZW4KCmNvbnN0IGxpbnQgSU5GID0gMHgxZjFmMWYxZjFmMWYxZjFmOwpjb25zdCBsaW50IE5FRyA9IDB4RTFFMUUxRTFFMUUxRTFFMTsKY29uc3QgbGludCBtb2QgPSAxZTkgKyAxOTk3MjIwNzsKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgdDsKbGludCB3YXlzOwpsaW50IHBbMjYwMDA1XSwgZ3RbMjYwMDA1XSwgaW52WzI2MDAwNV0sIGFbMjYwMDA1XTsKaW50IG47CmxpbnQgazsKdmVjdG9yPGxpbnQ+IG1ha3U7CgpsaW50IGJpbnBvdyhsaW50IHgsIGxpbnQgU0EpCnsKICAgIGlmIChTQSA9PSAwKQogICAgICAgIHJldHVybiAxOwogICAgbGludCB0ZW1wID0gYmlucG93KHgsIFNBID4+IDEpOwogICAgdGVtcCAqPSB0ZW1wOwogICAgdGVtcCAlPSBtb2Q7CiAgICBpZiAoU0EgJiAxKQogICAgewogICAgICAgIHRlbXAgKj0geDsKICAgICAgICB0ZW1wICU9IG1vZDsKICAgIH0KICAgIHJldHVybiB0ZW1wOwp9Cgp2b2lkIFRyeShpbnQgaWR4LCBpbnQgY250LCBpbnQgbWFzaykKewogICAgaWYgKGlkeCA9PSBuKQogICAgewogICAgICAgIGlmIChjbnQgPT0gMCkKICAgICAgICAgICAgbWFrdS5lbXBsYWNlX2JhY2sobWFzayk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGNudCA8IDApCiAgICAgICAgcmV0dXJuOwoKICAgIFRyeShpZHggKyAxLCBjbnQgKyAxLCBtYXNrIHwgKDEgPDwgaWR4KSk7IC8vLyBtYXNrIDEgbMOgIGJpdCDEkcOzIGNobyBzYW5nIHRyw6FpLCBlbHNlIGNobyBzYW5nIHBo4bqjaQogICAgVHJ5KGlkeCArIDEsIGNudCAtIDEsIG1hc2spOwp9CgpzdHJpbmcgZGVidWcobGludCBtYXNrdSkKewogICAgc3RyaW5nIHJlczsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIHJlcyArPSBjaGFyKCcwJyArIChtYXNrdSA+PiBpICYgMSkpOwogICAgLy8gcmV2ZXJzZShyZXMuYmVnaW4oKSwgcmVzLmVuZCgpKTsKICAgIHJldHVybiByZXM7Cn0KCnZvaWQgc29sdmUxMigpCnsKICAgIG1ha3UuY2xlYXIoKTsKICAgIFRyeSgwLCAwLCAwKTsKCiAgICBpZiAobWFrdS5zaXplKCkgPCBrKQogICAgewogICAgICAgIGNvdXQgPDwgLTEgPDwgZW5kbDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc29ydChtYWt1LmJlZ2luKCksIG1ha3UuZW5kKCkpOwogICAgaW50IGNudGwgPSAwLCBjbnRyID0gMDsKICAgIHN0YXRpYyBpbnQgbFsyNV0sIHJbMjVdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgaWYgKG1ha3VbayAtIDFdID4+IGkgJiAxKQogICAgICAgICAgICBsWysrY250bF0gPSBhW2kgKyAxXTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJbKytjbnRyXSA9IGFbaSArIDFdOwogICAgfQoKICAgIHNvcnQobCArIDEsIGwgKyAxICsgY250bCwgZ3JlYXRlcjxpbnQ+KCkpOwogICAgc29ydChyICsgMSwgciArIDEgKyBjbnRyLCBncmVhdGVyPGludD4oKSk7CgogICAgbGludCByZXMgPSAwOwogICAgaW50IGNudCA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBjbnRsOyBpKyspCiAgICB7CiAgICAgICAgcmVzICs9IChsW2ldICogcFtjbnQrK10pICUgbW9kOwogICAgICAgIHJlcyAlPSBtb2Q7CiAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBjbnRyOyBpKyspCiAgICB7CiAgICAgICAgcmVzICs9IChyW2ldICogcFtjbnQrK10pICUgbW9kOwogICAgICAgIHJlcyAlPSBtb2Q7CiAgICB9CgogICAgY291dCA8PCByZXMgPDwgZW5kbDsKfQoKdm9pZCBzb2x2ZTMoKQp7CiAgICBpbnQgY250ID0gMTsKICAgIGxpbnQgcmVzID0gMDsKICAgIGZvciAobGludCBpID0gbjsgaSA+PSAxOyBpLS0pCiAgICB7CiAgICAgICAgcmVzICs9IChpICogcFtjbnQrK10pICUgbW9kOwogICAgICAgIHJlcyAlPSBtb2Q7CiAgICB9CiAgICBmb3IgKGxpbnQgaSA9IDIgKiBuOyBpID49IG4gKyAxOyBpLS0pCiAgICB7CiAgICAgICAgcmVzICs9IChpICogcFtjbnQrK10pICUgbW9kOwogICAgICAgIHJlcyAlPSBtb2Q7CiAgICB9CiAgICBjb3V0IDw8IHJlcyA8PCBlbmRsOwp9CgpmYW1pIGxvcmUoKQp7CiAgICBpZiAoZm9wZW4oInBlcm11dGF0aW9ucy5pbnAiLCAiciIpKQogICAgewogICAgICAgIGZyZWVmaXJlKCJwZXJtdXRhdGlvbnMuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlZWZpcmUoInBlcm11dGF0aW9ucy5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBTUEVEOwogICAgcFswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSAyNjAwMDA7IGkrKykKICAgIHsKICAgICAgICBwW2ldID0gcFtpIC0gMV0gKiAyMjA3MTk5NzsKICAgICAgICBwW2ldICU9IG1vZDsKICAgIH0KICAgIGd0WzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDI2MDAwMDsgaSsrKQogICAgewogICAgICAgIGd0W2ldID0gZ3RbaSAtIDFdICogaTsKICAgICAgICBndFtpXSAlPSBtb2Q7CiAgICB9CiAgICBpbnZbMjYwMDAwXSA9IGJpbnBvdyhndFsyNjAwMDBdLCBtb2QgLSAyKTsKICAgIGZvciAoaW50IGkgPSAyNTk5OTk7IGkgPj0gMDsgaS0tKQogICAgewogICAgICAgIGludltpXSA9IGludltpICsgMV0gKiAoaSArIDEpOwogICAgICAgIGludltpXSAlPSBtb2Q7CiAgICB9CiAgICBpb3RhKGEgKyAxLCBhICsgMSArIDI2MDAwMCwgMSk7CgogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKQogICAgewogICAgICAgIGNpbiA+PiBuID4+IGs7CiAgICAgICAgaWYgKGsgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIHNvbHZlMygpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChuIDw9IDEzKQogICAgICAgIHsKICAgICAgICAgICAgbiAqPSAyOwogICAgICAgICAgICBzb2x2ZTEyKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgY291dCA8PCAtMSA8PCBlbmRsOwogICAgfQp9Ci8vIExldCB5b3VyIHNvdWwgd2FuZGVyIHdoZXJlIGRyZWFtcyBhcmUgYm9ybi4=