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

}

05-29 00:25