//11 j 12 q 13k 14a 15:2 16:king
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int card[18];
int min1=0x7fffffff;
void read(){
string a,b;
cin>>a>>b;
if(a[0]=='0')
{ card[16]++;
return;
}
if(a.length()==1)
{
if(a[0]=='2')
card[15]++;
else if(a[0]=='1')
card[14]++;
else
card[a[0]-'0']++;
return;
}
else{
int x=(a[0]-'0')*10+a[1]-'0';
card[x]++;
}
}
void dfs(int now,int one,int two){
int sum1=0,sum2=0;
int shunzinow=0;
for(int i=3;i<=14;i++){//3顺
if(card[i]>=3){
shunzinow++;
if(shunzinow>=2){
for(int j=i-shunzinow+1;j<=i;j++)
card[j]-=3;
dfs(now+1,one,two);
for(int j=i-shunzinow+1;j<=i;j++)
card[j]+=3;
}
}
else{
shunzinow=0;
}
}
shunzinow=0;
for(int i=3;i<=14;i++){//2顺
if(card[i]>=2){
shunzinow++;
if(shunzinow>=3){
for(int j=i-shunzinow+1;j<=i;j++)
card[j]-=2;
dfs(now+1,one,two);
for(int j=i-shunzinow+1;j<=i;j++)
card[j]+=2;
}
}
else{
shunzinow=0;
}
}
shunzinow=0;
for(int i=3;i<=14;i++){//1顺
if(card[i]>=1){
shunzinow++;
if(shunzinow>=5){
for(int j=i-shunzinow+1;j<=i;j++)
card[j]-=1;
dfs(now+1,one,two);
for(int j=i-shunzinow+1;j<=i;j++)
card[j]+=1;
}
}
else{
shunzinow=0;
}
}
shunzinow=0;
for(int i=3;i<=15;i++){//4带
if(card[i]==4){
card[i]-=4;
dfs(now+1,one+2,two);
dfs(now+1,one,two+2);
card[i]+=4;
}
}
for(int i=3;i<=15;i++){//3带
if(card[i]>=3){
card[i]-=3;
dfs(now+1,one+1,two);
dfs(now+1,one,two+1);
card[i]+=3;
}
}
for(int i=3;i<=15;i++){
sum1+=card[i]%2;
sum2+=card[i]/2;
}
if(card[16]==1)
sum1+=1;
else if(card[16]==2)
sum1+=2;
sum2=max(sum2-two,0);
if(sum1-one>=2&&card[16]==2)
{
sum1--;
}
sum1=max(sum1-one,0);
min1=min(min1,sum1+sum2+now);
}
int main(){
int t,n;
cin>>t>>n;
for(int t1=1;t1<=t;t1++){
memset(card,0,sizeof(card));
for(int i=1;i<=n;i++)
{
read();
}
min1=0x7fffffff;
dfs(0,0,0);
cout<<min1<<endl;
}
return 0;
}
没次数了,万分感谢