#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int mod = 1000000007; int dp[2][1050][14]; void add(int& a, int b) { a += b; if (a >= mod) a -= mod; } int mul(int a, int b) { return 1LL * a * b % mod; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while (t--) { int n, m; cin >> n >> m; if (n <= 2 && m == 0) { cout << 1 << "\n"; continue; } if (m > n - 2) { cout << -1 << "\n"; continue; } memset(dp, 0, sizeof dp); dp[0][0][0] = 1; for (int i = 2; i <= n - 1; i++) { int ci = i & 1; int ni = 1 - ci; for (int j = 0; j <= m; j++) { if (j < m) { for (int k = 0; k <= 10; k++) { if (k < 10) { add(dp[ni][j + 1][k + 1], mul(dp[ci][j][k], i - 1)); } add(dp[ni][j][0], dp[ci][j][k]); } } else { for (int k = 0; k <= 10; k++) { add(dp[ni][j][0], dp[ci][j][k]); } } } memset(dp[ci], 0, sizeof dp[ci]); } int ans = 0; int i = n & 1; for (int j = 0; j <= 10; j++) { add(ans, dp[i][m][j]); } cout << ans << "\n"; } }