#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;
}