#include #define N 25 #define M 55 using namespace std; int n,m; int fa[M]; bool mp[M][M],vis[M]; char str[N][M],ans[N][M]; inline void Rd(int &res){ char c;res=0; while(c=getchar(),c<48); do res=(res<<3)+(res<<1)+(c^48); while(c=getchar(),c>47); return; } bool getfa(int x){ vis[x]=1; bool key=0; for(int i=1;i<=m;i++)if(!mp[i][x]&&!fa[i]){ key=1; fa[i]=x; break; } if(!key){ for(int i=m;i>=1;i--)if(!mp[i][x]&&!vis[fa[i]]&&fa[i]){ key=getfa(fa[i]); if(key){fa[i]=x;break;} } } return key; } int main(){ int T; Rd(T); while(T--){ Rd(n);Rd(m); for(int i=1;i<=m;i++)for(int j=1;j<=m;j++)mp[i][j]=0; for(int i=1;i<=m;i++)fa[i]=0; for(int i=1;i<=n;i++)scanf("%s%s",str[i]+1,ans[i]+1); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ for(int k=1;k<=m;k++){ if(str[i][j]!=ans[i][k])mp[j][k]|=1; } } } bool key=1; for(int i=1;i<=m;i++){ memset(vis,0,sizeof(vis)); key&=getfa(i); if(!key)break; } if(!key)puts("-1"); else{ for(int i=1;i