#include<stdio.h>
#include<string.h> int map[100][100],mark[100],link[100],max2,k; int find(int u) { int i; for(i=1;i<=k;i++) { if(!mark[i]&&map[u][i]) { mark[i]=1; if(!link[i]||find(link[i])) { link[i]=u; return 1; } } }return 0; } int seach(char c) { if(c=='C') return 1; if(c=='D') return 2; if(c=='S') return 3; if(c=='H') return 4; if(c=='T') return 10; if(c=='J') return 11; if(c=='Q') return 12; if(c=='K') return 13; if(c=='A') return 14; if(c>='2'&&c<='9') return c-'0'; } int main() { int i,j,sum,ans,ans2,t,a,b,diyi[100],dier[100]; char c,ch; scanf("%d",&t); while(t--) { scanf("%d",&k); memset(map,0,sizeof(map)); memset(link,0,sizeof(link)); for(i=1;i<=k;i++) { scanf(" %c%c",&c,&ch); a=seach(c); b=seach(ch); diyi[i]=(a-1)*4+b; } for(i=1;i<=k;i++) { scanf(" %c%c",&c,&ch); a=seach(c); b=seach(ch); dier[i]=(a-1)*4+b; } sum=0; for(i=1;i<=k;i++) for(j=1;j<=k;j++) if(dier[i]>diyi[j]) map[i][j]=1;//重要的地方不能写成map[dier[i]][diyi[j]]=1这样会超时巧妙地将其转化为k个数的比较 for(i=1;i<=k;i++) { memset(mark,0,sizeof(mark)); sum+=find(i); } printf("%d\n",sum); } return 0; }