#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#define LOCAL #define ll long long #define maxn 100010 #define maxm 1005 #define mod 1000000007 using namespace std; int n, m; ll d[maxm][11][2]; // 访问到第i个位置,已经使用了j个传送器,尾端连续k个 ll fn(int u) { if(u == 0) return 1; else return((u*fn(u-1)) % mod); } int main() { #ifdef LOCAL freopen("data.in.txt", "r", stdin); freopen("data.out.txt", "w", stdout); #endif int t; cin >> t; while(t--) { scanf("%d%d", &n, &m); memset(d, 0, sizeof(d)); int p = 0; d[0][0][1] = 1; for(int i = 2; i <= n-1; i++) { for(int j = 0; j <= m; j++) for(int k = 0; k <= 10; k++) d[j][k][p] = 0; for(int j = min(m, i-1); j >= 0; j--) { for(int k = min(10, j); k >= 1; k--) d[j][k][p] = (d[j-1][k-1][p^1] * (i-1)) % mod; for(int k = min(10, j); k >= 0; k--) d[j][0][p] = (d[j][0][p] + d[j][k][p^1]) % mod; } p ^= 1; } ll ans = 0; int ok = 0; for(int k = 0; k <= 10; k++) { if(d[m][k][p^1] != 0) ok = 1; ans = (ans + d[m][k][p^1]) % mod; } if(ok == 0) printf("-1\n"); else printf("%lld\n", ans); } return 0; }