#include #include typedef long long ll; const int N=25,M=55; int T,n,m,ans; char s[N][M],t[N][M]; int xm[M],ym[M]; bool tr[M][M],vis[M]; bool find(int d) { for(int j=1;j<=m;j++) if(vis[j]==0&&tr[d][j]) { vis[j]=1; if(ym[j]==-1||find(ym[j])) { xm[d]=j; ym[j]=d; return true; } } return false; } inline void hungary() { ans=0; memset(xm,-1,sizeof(xm)); memset(ym,-1,sizeof(ym)); for(int i=m;i>0;i--) if(xm[i]==-1) { memset(vis,0,sizeof(vis)); if(find(i)) ans++; } } int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%s",s[i]+1); scanf("%s",t[i]+1); } memset(tr,0,sizeof(tr)); for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) if(s[1][i]==t[1][j]) tr[i][j]=1; for(int i=2;i<=n;i++) for(int j=1;j<=m;j++) for(int k=1;k<=m;k++) if(s[i][j]!=t[i][k]) tr[j][k]=0; hungary(); if(ans