#include #define INF 2000000000 using namespace std; typedef long long ll; int read(){ int f = 1, x = 0; char c = getchar(); while(c < '0' || c > '9'){if(c == '-') f = -f; c = getchar();} while(c >= '0' && c <= '9')x = x * 10 + c - '0', c = getchar(); return f * x; } int n, m; char a[55], b[55]; int cnt[55][55]; int edge[55][55]; bool vis[55]; int match[55]; int aans[55]; void init(){ n = read(), m = read(); memset(cnt, 0, sizeof(cnt)); memset(edge, 0, sizeof(edge)); for (int i = 0; i < n; ++i){ scanf("%s%s", a, b); for (int j = 0; j < m; ++j){ for (int k = 0; k < m; ++k) if (a[j] == b[k]) ++cnt[j][k]; } } for (int i = 0; i < m; ++i) for (int j = 0; j < m; ++j) if (cnt[i][j] == n) edge[i][j] = 1; } int Edmond(int S){ for(int i = 0; i < m; ++i){ if(edge[S][i] && !vis[i]){ vis[i] = 1; if(match[i] < 0 || Edmond(match[i])){ match[i] = S; return 1; } } } return 0; } void solve(){ memset(match, -1, sizeof(match)); int ans = 0; for(int i=m - 1;i>= 0;--i){ memset(vis,0,sizeof(vis)); if(Edmond(i))ans++; } if (ans < m) printf("-1\n"); else { for (int i = 0; i < m; ++i) aans[match[i]] = i; for (int i = 0; i < m - 1; ++i) printf("%d ", aans[i] + 1 ); printf("%d\n", aans[m - 1] + 1); } } int main(){ int T = read(); while (T--){ init(); solve(); } return 0; }