#include<bits/stdc++.h>
using namespace std;
int ans=1e9,t,n,card[20],ago[10010];
int rd()
{
int x=0,sig=1;
char c;
for(c=getchar();c<'0'||c>'9';c=getchar())
if (c=='-') sig=-1;
for(;c>='0'&&c<='9';c=getchar())
x=x*10+c-48;
return x*sig;
}
void ccin()
{
for(int i=1;i<=20;i++)
card[i]=0;
memset(ago,0,sizeof(ago));
int fw;
for(int i=1;i<=n;i++)
{
int x;
x=rd();fw=rd();
if(x==1)card[14]++;
else
if(x==0)card[15]++;
else card[x]++;
}
}
inline void dfs(int dep,int now)
{
if(dep>=ans)return;
if(dep>ago[now])return;
ago[now]=dep;
int p=0;
for(int i=3;i<=14;i++)
{
if(card[i]==0)p=0;
else
{
p++;
if(p>=5)
{
for(int j=i-p+1;j<=i;j++)
card[j]--;
dfs(1+dep,now-p);
for(int j=i-p+1;j<=i;j++)
card[j]++;
}
}
}
p=0;
for(int i=3;i<=14;i++)
{
if(card[i]<2)p=0;
else
{
p++;
if(p>=3)
{
for(int j=i-p+1;j<=i;j++)
card[i]-=2;
dfs(dep+1,now-p);
for(int j=i-p+1;j<=i;j++)
card[i]+=2;
}
}
}
p=0;
for(int i=3;i<=14;i++)
{
if(card[i]<3)p=0;
else
{
p++;
if(p>=2)
{
for(int j=i-p+1;j<=i;j++)
card[j]-=3;
dfs(dep+1,now-p);
for(int j=i-p+1;j<=i;j++)
card[i]+=3;
}
}
}
for(int i=2;i<=14;i++)
{
if(card[i]>=3)
{
card[i]-=3;
for(int j=2;j<=15;j++)
{
if(card[j]>0&&j!=i)
{
card[j]--;
dfs(dep+1,now-4);
card[j]++;
}
}
for(int k=2;k<=15;k++)
{
if(card[k]>1&&k!=i)
{
card[k]-=2;
dfs(dep+1,now-6);
card[k]+=2;
}
}
if(card[i]>=4)
{
card[i]--;
for(int j=2;j<=15;j++)
{
if(card[j]>0&&j!=i)
{
card[j]--;
for(int k=2;k<=15;k++)
{
if(card[k]>0&&k!=j)
{
card[k]--;
dfs(dep+1,now-6);
card[k]++;
}
}
card[j]++;
}
}
for(int j=2;j<=15;j++)
{
if(card[j]>1&&j!=i)
{
card[j]-=2;
for(int k=2;k<=15;k++)
{
if(card[k]>1&&k!=j)
{
card[k]-=2;
dfs(dep+1,now-8);
card[k]+=2;
}
}
card[j]+=2;
}
}
card[i]++;
}
card[i]+=3;
}
}
for(int i=2;i<=15;i++)
if(card[i]>0)dep++;
ans=min(dep,ans);
return;
}
int main()
{
t=rd();
while(t--)
{
n=rd();
ccin();
dfs(0,n);
cout<<ans<<endl;
ans=1e9;
}
return 0;
}