tle on #13
#include<bits/stdc++.h>
#define int short int
using namespace std;
int T,n,sum[30];
int ans=13;
int a,b;
inline int min(int x,int y){
return x<y?x:y;
}
void dfs(int step){
if(step>=ans)return ;
int k=0;
for(int i=3;i<=14;i++){
if(!sum[i])k=0;
else {
k++;
if(k>=5){
for(int j=i-k+1;j<=i;j++)sum[j]--;
dfs(step+1);
for(int j=i-k+1;j<=i;j++)sum[j]++;
}
}
}//单顺子
k=0;
for(int i=3;i<=14;i++){
if(sum[i]<2)k=0;
else {
k++;
if(k>=3){
for(int j=i-k+1;j<=i;j++)sum[j]-=2;
dfs(step+1);
for(int j=i-k+1;j<=i;j++)sum[j]+=2;
}
}
}//双顺子
k=0;
for(int i=3;i<=14;i++){
if(sum[i]<3)k=0;
else {
k++;
if(k>=3){
for(int j=i-k+1;j<=i;j++)sum[j]-=3;
dfs(step+1);
for(int j=i-k+1;j<=i;j++)sum[j]+=3;
}
}
} //三顺子
k=0;
for(int i=2;i<=14;i++){
if(sum[i]>=3){
sum[i]-=3;
for(int j=2;j<=15;j++){
if(j==i)continue;
if(sum[j]){
sum[j]--;
dfs(step+1);
sum[j]++;
}
}
sum[i]+=3;
}
} //三带一
for(int i=2;i<=14;i++){
if(sum[i]>=3){
sum[i]-=3;
for(int j=2;j<=14;j++){
if(j==i)continue;
if(sum[j]>=2){
sum[j]-=2;
dfs(step+1);
sum[j]+=2;
}
}
sum[i]+=3;
}
} //三带二
for(int i=2;i<=14;i++){
if(sum[i]>=4){
sum[i]-=4;
for(int j=2;j<=15;j++){
if(j==i)continue;
if(sum[j]>=1){
sum[j]--;
for(int l=2;l<=15;l++){
if(l==j||l==i)continue;
if(sum[l]){
sum[l]--;
dfs(step+1);
sum[l]++;
}
}
sum[j]++;
}
}
for(int j=2;j<=14;j++){
if(j==i)continue;
if(sum[j]>=2){
sum[j]-=2;
for(int l=2;l<=14;l++){
if(l==j||l==i)continue;
if(sum[l]>=2){
sum[l]-=2;
dfs(step+1);
sum[l]+=2;
}
}
sum[j]+=2;
}
}
sum[i]+=4;
}
} //四带二
for(int i=2;i<=14;i++){
if(sum[i]>=4){
sum[i]-=4;
dfs(step+1);
sum[i]+=4;
}
}//炸弹
for(int i=2;i<=14;i++){
if(sum[i]>=3){
sum[i]-=3;
dfs(step+1);
sum[i]+=3;
}
} //三张牌
for(int i=2;i<=14;i++){
if(sum[i]>=2){
sum[i]-=2;
dfs(step+1);
sum[i]+=2;
}
} //对子牌
if(sum[15]&&sum[16]){
sum[15]--,sum[16]--;
dfs(step+1);
sum[15]++,sum[16]++;
}//火箭
int res=0;
for(int i=2;i<=16;i++){
res+=sum[i];
}//单张牌
ans=min(ans,res+step);
}
void solve(){
for(int i=2;i<=16;i++)sum[i]=0;
ans=40;
for(int i=1;i<=n;i++){
cin>>a>>b;
if(a==0&&b==1)sum[15]++;
else if(a==0&&b==2)sum[16]++;
else if(a==1)sum[14]++;
else sum[a]++;
}
dfs(0);
cout<<ans<<"\n";
}
signed main(){
cin>>T>>n;
for(int i=1;i<=T;i++)solve();
return 0;
}