#include <iostream>
#include <cstdio>
#include <cctype>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <sstream>
#include <fstream>
#include <ctime>
#include <cassert>
#include <string.h>
using namespace std;
typedef long long LL;
#define MAXN 100000+5
int n;
LL k;
LL fact[MAXN];
LL f[MAXN], g[MAXN];
#define MOD 1000000007
LL pwr(LL x, int n) {
if (!n) return 1;
LL y = pwr(x, n>>1);
(y = y * y) %= MOD;
if (n&1) (y = x * y) %= MOD;
return y;
}
LL kPn(LL k, int n) {
LL ans = 1;
for (int i = 0; i < n; i++) {
(ans *= ((k-i) % MOD)) %= MOD;
}
return ans;
}
int main() {
fact[0] = 1;
for (int i = 1; i < MAXN; i++) {
(fact[i] = i * fact[i-1]) %= MOD;
}
int t, nsum = 0;
scanf("%d", &t);
assert(t >= 1 && t <= 1000);
while (t--) {
scanf("%d", &n);
assert(n >= 1 && n <= 100000);
scanf("%lld", &k);
assert(k >= 0 && k <= 1000000000000000000l);
LL kpn = kPn(k, n);
nsum += n;
f[0] = 1, g[0] = 1;
for (int i = 1; i <= n; i++) {
(f[i] = ((k-n) % MOD) * f[i-1]) %= MOD;
if (i >= 2) (f[i] += ((k-n) % MOD) * ((i-1) * f[i-2] % MOD)) %= MOD;
if (i >= 3) (f[i] += fact[i-1] * (((k-n+1) % MOD) * g[i-3] % MOD)) %= MOD;
(g[i] = g[i-1] + (f[i] * pwr(fact[i], MOD-2) % MOD)) %= MOD;
}
LL ans = (f[n] * kpn) % MOD;
if (ans < 0) ans += MOD;
printf("%lld\n", ans);
}
assert(nsum <= 1000000);
char ch;
scanf("%c",&ch);
assert(ch == '\n');
assert(scanf("%c", &ch) == EOF);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y2N0eXBlPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8ZGVxdWU+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPHN0cmluZy5oPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKdHlwZWRlZiBsb25nIGxvbmcgTEw7CiNkZWZpbmUgTUFYTiAxMDAwMDArNQogCmludCBuOwpMTCBrOwogCkxMIGZhY3RbTUFYTl07CkxMIGZbTUFYTl0sIGdbTUFYTl07CiAKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwogCkxMIHB3cihMTCB4LCBpbnQgbikgewogICAgaWYgKCFuKSByZXR1cm4gMTsKICAgIExMIHkgPSBwd3IoeCwgbj4+MSk7CiAgICAoeSA9IHkgKiB5KSAlPSBNT0Q7CiAgICBpZiAobiYxKSAgICAoeSA9IHggKiB5KSAlPSBNT0Q7CiAgICByZXR1cm4geTsKfQogCkxMIGtQbihMTCBrLCBpbnQgbikgewogICAgTEwgYW5zID0gMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgKGFucyAqPSAoKGstaSkgJSBNT0QpKSAlPSBNT0Q7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CiAKaW50IG1haW4oKSB7CiAgICBmYWN0WzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgTUFYTjsgaSsrKSB7CiAgICAgICAgKGZhY3RbaV0gPSBpICogZmFjdFtpLTFdKSAlPSBNT0Q7CiAgICB9CiAgICBpbnQgdCwgbnN1bSA9IDA7CiAgICBzY2FuZigiJWQiLCAmdCk7CiAgICBhc3NlcnQodCA+PSAxICYmIHQgPD0gMTAwMCk7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc2NhbmYoIiVkIiwgJm4pOwogICAgICAgIGFzc2VydChuID49IDEgJiYgbiA8PSAxMDAwMDApOwogICAgICAgIHNjYW5mKCIlbGxkIiwgJmspOwogICAgICAgIGFzc2VydChrID49IDAgJiYgayA8PSAxMDAwMDAwMDAwMDAwMDAwMDAwbCk7CiAgICAgICAgIAogICAgICAgIExMIGtwbiA9IGtQbihrLCBuKTsKICAgICAgICBuc3VtICs9IG47CiAKICAgICAgICBmWzBdID0gMSwgZ1swXSA9IDE7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIChmW2ldID0gKChrLW4pICUgTU9EKSAqIGZbaS0xXSkgJT0gTU9EOwogICAgICAgICAgICBpZiAoaSA+PSAyKSAoZltpXSArPSAoKGstbikgJSBNT0QpICogKChpLTEpICogZltpLTJdICUgTU9EKSkgJT0gTU9EOwogICAgICAgICAgICBpZiAoaSA+PSAzKSAoZltpXSArPSBmYWN0W2ktMV0gKiAoKChrLW4rMSkgJSBNT0QpICogZ1tpLTNdICUgTU9EKSkgJT0gTU9EOwogICAgICAgICAgICAoZ1tpXSA9IGdbaS0xXSArIChmW2ldICogcHdyKGZhY3RbaV0sIE1PRC0yKSAlIE1PRCkpICU9IE1PRDsKICAgICAgICB9CiAKICAgICAgICBMTCBhbnMgPSAoZltuXSAqIGtwbikgJSBNT0Q7CiAgICAgICAgaWYgKGFucyA8IDApICAgIGFucyArPSBNT0Q7CiAgICAgICAgcHJpbnRmKCIlbGxkXG4iLCBhbnMpOwogICAgfQogICAgYXNzZXJ0KG5zdW0gPD0gMTAwMDAwMCk7CiAKICAgIGNoYXIgY2g7CiAgICBzY2FuZigiJWMiLCZjaCk7CiAgICBhc3NlcnQoY2ggPT0gJ1xuJyk7CiAgICBhc3NlcnQoc2NhbmYoIiVjIiwgJmNoKSA9PSBFT0YpOwogICAgcmV0dXJuIDA7Cn0=