import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class Main{ private static boolean isMatch(int k,int j) { int match = 0; for (int i = 0; i < n; i++) { if(s[2*i].charAt(k)!=s[2*i+1].charAt(j)) { return false; } } return true; } private static int n, m; private static int[] p = new int[60], vis = new int[60]; private static String[] s = new String[50]; private static boolean flag = false; private static void DFS(int i) { if (i == m) { flag = true; return; } for (int j = 0; j < m; j++) { if (vis[j] == 0&&!flag) { vis[j] = 1; if(isMatch(i, j)) { p[i] = j; DFS(i + 1); } vis[j] = 0; } } } private static boolean preMatch() { Map counts =new HashMap(); for(int i=0;i<26;i++) { counts.put((char) ('a'+i), 0); } for(int i=0;i c:counts.entrySet()) { if(c.getValue()!=0) { return false; } } } return true; } public static void main(String[] args) throws IOException { StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); PrintWriter pr = new PrintWriter(System.out); int K; st.nextToken(); K = (int) st.nval; while (K-- > 0) { flag = false; Arrays.fill(vis, 0); st.nextToken(); n = (int) st.nval; st.nextToken(); m = (int) st.nval; for (int i = 0; i < 2 * n; i++) { st.nextToken(); s[i] = st.sval; } if(preMatch()) { DFS(0); } if (flag) { for (int i = 0; i < m; i++) { pr.print(p[i]+1); if (i != m - 1) { pr.print(" "); } } pr.println(); } else { pr.println(-1); } pr.flush(); } } }