#include #include #include #include #include #define pb push_back #define mp make_pair #define xx first #define yy second #define rep(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;i++) #define dwn(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;i--) using namespace std; inline int read() { int x=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } typedef long long ll; typedef pair pii; const int N=55; int n,m,tim; int vis[N],match[N],ans[N]; int ok[N][N]; bool dfs(int x) { rep(y,1,m) if(ok[x][y]) { if (vis[y]==tim) continue; vis[y]=tim; if (!match[y] || dfs(match[y])) { match[y]=x; return 1; } } return 0; } char A[N],B[N]; void solve() { n=read();m=read(); memset(match,0,sizeof(match)); rep(i,1,m) rep(j,1,m) ok[i][j]=1; rep(i,1,n) { scanf("%s%s",A+1,B+1); rep(j,1,m) rep(k,1,m) if(A[j]!=B[k]) ok[j][k]=0; } dwn(i,m,1) { ++tim; if (!dfs(i)) { puts("-1"); return; } } rep(i,1,m) ans[match[i]]=i; rep(i,1,m) printf("%d%c",ans[i],i==m?'\n':' '); } int main() { int T=read(); while(T--) solve(); return 0; }