// 4k 4k+3 #include #include #include using namespace std; #define next NEXT const int MAXN = 100000 + 10; const int MOD = 1000000000 + 7; int a[MAXN], b[MAXN], pos[MAXN], ret, fw[MAXN], tn, n, k, fac[MAXN], next, type_a, type_b; int get_permutation_rank (int *a, int mod) { fac[0] = 1; int ret = 0; for(int i = 1; i <= n; i++) fw[i] = 0, fac[i] = (fac[i - 1] * 1LL * i) % mod; for(int i = 1; i <= n; i++) { int kk = 0; for(int j = a[i] - 1; j > 0; j &= (j - 1)) kk += fw[j]; kk = a[i] - 1 - kk; ret = (ret + fac[n - i] * 1LL * kk) % mod; for(int j = a[i]; j <= n; j = 2 * j - (j & (j - 1))) ++fw[j]; } return ret; } bool inv (int *a) { for(int i = 1; i <= n; i++) fw[i] = 0; long long cnt = 0; for(int i = 1; i <= n; i++) { cnt += i - 1; for(int j = a[i]; j > 0; j &= (j - 1)) cnt -= fw[j]; for(int j = a[i]; j <= n; j = 2 * j - (j & (j - 1))) ++fw[j]; } return cnt % 2; } int main () { ios_base::sync_with_stdio(false); cin >> tn; while (tn--) { cin >> n >> k; for(int i = 1; i <= n; i++) { cin >> b[i]; pos[b[i]] = i; } for(int i = 1; i <= n; i++) cin >> a[i]; if (k == n) { bool fail = false; for(int i = 2; i <= n; i++) { if (pos[a[i - 1]] == n) next = 1; else next = pos[a[i - 1]] + 1; if (next != pos[a[i]]) fail = true; } if (!fail) cout << a[1] << endl; else cout << -1 << endl; continue; } int rank_a = get_permutation_rank(a, 4); int rank_b = get_permutation_rank(b, 4); type_a = (rank_a == 0 || rank_a == 3); if (k % 2 == 0) { cout << (get_permutation_rank(a, MOD) + 1) % MOD << endl; continue; } if (inv(a) != inv(b)) { cout << -1 << endl; continue; } int q = get_permutation_rank(a, MOD); q = ((q - rank_a + MOD) * 500000004LL) % MOD; if (type_a == 1) { if (rank_a == 3) ++q; } else { if (rank_a == 2) ++q; } cout << (q + 1) % MOD << endl; } return 0; }