#include using namespace std; int head[222],to[5555],cap[5555],dist[222],nxt[5555],cur[222],curf; int n,m,s,t,cnt,x,y,z,test,ans[55],fuck[55],lst; char st[55],str[55]; bool used[55],vis[55],f[55][55],dead; void addedge(int s,int t,int cp) { cnt++; nxt[cnt]=head[s];head[s]=cnt; to[cnt]=t;cap[cnt]=cp; } void bfs() { memset(dist,-1,sizeof(dist)); queue q; q.push(s); dist[s]=0; while(!q.empty()) { int x=q.front();q.pop(); for (int i=head[x];i;i=nxt[i]) { if (!cap[i]) continue; if (!~dist[to[i]]) { dist[to[i]]=dist[x]+1; q.push(to[i]); } } } } int dfs(int i,int f) { if (i==t) return f; int tmp=f; for (int &j=cur[i];j;j=nxt[j]) { if (!cap[j] || dist[to[j]]!=dist[i]+1) continue; int d=dfs(to[j],min(cap[j],tmp)); if (d) { cap[j]-=d; cap[j^1]+=d; tmp-=d; if (!tmp) break; } else dist[to[j]]=0; } return f-tmp; } int dinic() { int res=0; while(1) { for (int i=1;i<=t;i++) cur[i]=head[i]; bfs(); if (!~dist[t]) break; res+=dfs(s,2e9); } return res; } int dft(int i) { if (i==s) return 1; vis[i]=1; for (int j=head[i];j;j=nxt[j]) { if (to[i]==t || vis[to[i]]) continue; int d=dft(to[i]); if (d) { cap[i]--; cap[i^1]++; return 1; } } return 0; } int main() { scanf("%d",&test); while(test--) { scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { for (int j=1;j<=m;j++) f[i][j]=1; } for (int i=1;i<=n;i++) { scanf("%s%s",st,str); for (int j=1;j<=m;j++) { for (int k=1;k<=m;k++) { if (st[j-1]!=str[k-1]) f[j][k]=0; } } } memset(used,0,sizeof(used));s=2*m+1;t=s+1; memset(ans,-1,sizeof(ans));dead=0; /*for (int i=1;i<=m;i++) { for (int j=1;j<=m;j++) cout<=m-i) { ans[i]=j; used[j]=1; break; } lst=j; } if (dead) break; if (ans[i]==-1) { dead=1; break; } } if (dead) { printf("-1\n"); continue; } for (int i=1;i<=m;i++) { if (i==m) printf("%d\n",ans[i]); else printf("%d ",ans[i]); } } return 0; }