#include #include #include using namespace std; #define rep(i,s,t) for(register int i=s;i<=t;++i) #define _rep(i,s,t) for(register int i=s;i>=t;--i) const int N=1e5+11; char S[N],T[N]; int f[233][233]; int ss[233][233]; int tt,n,m,mt[233],mc[233],vis[233]; inline bool cmp(int x,int y){ return x>y; } inline bool dfs(int x,int dep){ rep(i,1,m) if(f[x][i]&&!mt[i]){ mt[i]=x; mc[x]=i; return 1; } int top=0,p=0,o; rep(i,1,m) if(f[x][i]&&mt[i]&&!vis[i]) ss[dep][++top]=mt[i]; sort(ss[dep]+1,ss[dep]+top+1,cmp); rep(i,1,top){ o=ss[dep][i]; vis[mc[o]]=1; if(dfs(o,dep+1)){ mc[x]=mc[o]; mt[mc[o]]=x; return 1; } } return 0; } int main(){ scanf("%d",&tt); while(tt--){ scanf("%d%d",&n,&m); rep(i,1,m){ rep(j,1,m) f[i][j]=1; mt[i]=0; } rep(i,1,n){ scanf("%s%s",S+1,T+1); rep(j,1,m) rep(k,1,m) if(S[j]!=T[k]) f[j][k]=0; } rep(i,1,m){ memset(vis,0,sizeof vis); if(!dfs(i,0)){ puts("-1"); goto end; } } rep(i,1,m-1) printf("%d ",mc[i]); printf("%d\n",mc[m]); end:; } return 0; }