显示原始代码
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int MAX_N = 1005;
int dp[MAX_N][MAX_N][2];
const int mod = 1e9 + 7;
void add(int& a, int b) { a = (a + b) % mod; }
int mulMod(ll a, ll b) { return (a * b) % mod; }
int main() {
cin.tie(0)->sync_with_stdio(0);
cin.exceptions(cin.failbit);
int T;
cin >> T;
memset(dp, 0, sizeof(dp));
dp[1][0][0] = 1;
int n = 1001;
for (int i = 1; i < n; i++) {
for (int k = 0; k < i; k++) {
add(dp[i + 1][k + 1][1], mulMod(dp[i][k][0], 2));
add(dp[i + 1][k + 1][1], dp[i][k][1]);
add(dp[i + 1][k][1], dp[i][k][1]);
add(dp[i + 1][k][0], mulMod(i - k - 1, dp[i][k][0]));
add(dp[i + 1][k][0], mulMod(i - k, dp[i][k][1]));
if (k > 0) {
add(dp[i + 1][k - 1][0], mulMod(k, dp[i][k][0]));
add(dp[i + 1][k - 1][0], mulMod(k - 1, dp[i][k][1]));
}
}
}
while (T--) {
int n, k;
cin >> n >> k;
cout << (dp[n][k][0] + dp[n][k][1]) % mod << "\n";
}
return 0;
}