#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MOD = 1e9 + 7;
void solve() {
int t;
if (!(cin >> t)) return;
vector<pair<int, int>> queries(t);
int max_n = 0;
for (int i = 0; i < t; i++) {
cin >> queries[i].first >> queries[i].second;
max_n = max(max_n, queries[i].first);
}
// DP table: dp[i][j] is the number of permutations of length i+1
// (using 0 to i) with exactly j distinct MEX values.
vector<vector<long long>> dp(max_n + 1, vector<long long>(max_n + 3, 0));
if (max_n >= 2) {
dp[1][3] = 2; // Base case: For N=2, the permutations {0,1} and {1,0} both have 3 distinct MEXes.
for (int i = 2; i < max_n; i++) {
for (int j = 3; j <= i + 2; j++) {
dp[i][j] = (dp[i-1][j] * (i - 1) % MOD + 2 * dp[i-1][j-1] % MOD) % MOD;
}
}
}
for (int i = 0; i < t; i++) {
int n = queries[i].first;
int k = queries[i].second;
if (n == 1) {
// For N=1, the only permutation is {0}, which has exactly 1 distinct MEX value (1).
if (k == 1) cout << 1 << "\n";
else cout << 0 << "\n";
} else {
if (k > n + 1) cout << 0 << "\n";
else cout << dp[n-1][k] << "\n";
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
solve();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNT0QgPSAxZTkgKyA3OwoKdm9pZCBzb2x2ZSgpIHsKICAgIGludCB0OwogICAgaWYgKCEoY2luID4+IHQpKSByZXR1cm47CiAgICAKICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gcXVlcmllcyh0KTsKICAgIGludCBtYXhfbiA9IDA7CiAgICAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdDsgaSsrKSB7CiAgICAgICAgY2luID4+IHF1ZXJpZXNbaV0uZmlyc3QgPj4gcXVlcmllc1tpXS5zZWNvbmQ7CiAgICAgICAgbWF4X24gPSBtYXgobWF4X24sIHF1ZXJpZXNbaV0uZmlyc3QpOwogICAgfQogICAgCiAgICAvLyBEUCB0YWJsZTogZHBbaV1bal0gaXMgdGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnMgb2YgbGVuZ3RoIGkrMSAKICAgIC8vICh1c2luZyAwIHRvIGkpIHdpdGggZXhhY3RseSBqIGRpc3RpbmN0IE1FWCB2YWx1ZXMuCiAgICB2ZWN0b3I8dmVjdG9yPGxvbmcgbG9uZz4+IGRwKG1heF9uICsgMSwgdmVjdG9yPGxvbmcgbG9uZz4obWF4X24gKyAzLCAwKSk7CiAgICAKICAgIGlmIChtYXhfbiA+PSAyKSB7CiAgICAgICAgZHBbMV1bM10gPSAyOyAvLyBCYXNlIGNhc2U6IEZvciBOPTIsIHRoZSBwZXJtdXRhdGlvbnMgezAsMX0gYW5kIHsxLDB9IGJvdGggaGF2ZSAzIGRpc3RpbmN0IE1FWGVzLgogICAgICAgIAogICAgICAgIGZvciAoaW50IGkgPSAyOyBpIDwgbWF4X247IGkrKykgewogICAgICAgICAgICBmb3IgKGludCBqID0gMzsgaiA8PSBpICsgMjsgaisrKSB7CiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IChkcFtpLTFdW2pdICogKGkgLSAxKSAlIE1PRCArIDIgKiBkcFtpLTFdW2otMV0gJSBNT0QpICUgTU9EOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHQ7IGkrKykgewogICAgICAgIGludCBuID0gcXVlcmllc1tpXS5maXJzdDsKICAgICAgICBpbnQgayA9IHF1ZXJpZXNbaV0uc2Vjb25kOwogICAgICAgIAogICAgICAgIGlmIChuID09IDEpIHsKICAgICAgICAgICAgLy8gRm9yIE49MSwgdGhlIG9ubHkgcGVybXV0YXRpb24gaXMgezB9LCB3aGljaCBoYXMgZXhhY3RseSAxIGRpc3RpbmN0IE1FWCB2YWx1ZSAoMSkuCiAgICAgICAgICAgIGlmIChrID09IDEpIGNvdXQgPDwgMSA8PCAiXG4iOwogICAgICAgICAgICBlbHNlIGNvdXQgPDwgMCA8PCAiXG4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChrID4gbiArIDEpIGNvdXQgPDwgMCA8PCAiXG4iOwogICAgICAgICAgICBlbHNlIGNvdXQgPDwgZHBbbi0xXVtrXSA8PCAiXG4iOwogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0=