#include #include #include #include #include using namespace std; #define MOD 1000000007 #define ADD(x,y) ((((long long)(x)) + ((long long)(y)))%(MOD)) // brute force uses permutations as states map,int> solve(int n, int k) { map,int> res, aux; vector id(n); for (int i = 0; i < n; i++) id[i] = i; res[id] = 1; for (int t = 0; t < k; t++) { aux.clear(); for(auto it = res.begin(); it != res.end(); it++) { vector xs = it->first; int cnt = it->second; for (int i = 0; i < n; i++) { for (int j = i + 1 ; j < n; j++) { // swap int s = xs[i]; xs[i] = xs[j]; xs[j] = s; aux[xs] = ADD(aux[xs],cnt); // swap back xs[j] = xs[i]; xs[i] = s; } } } res = aux; } return res; } int main(void) { int n,k,T,val; scanf("%d %d %d",&n,&k,&T); auto answers = solve(n,k); // presolve for every possible permutation vector v(n,0); for (int a = 0; a< T; a++) { for (int i = 0; i < n; i++) { scanf("%d",&val); v[i] = val-1; } printf("%d\n",answers[v]); } return 0; }