#include<bits/stdc++.h>
using namespace std;
const int N = 15, big = 2e9;
int t, n, a[N], mn = big;
bool bk, sk;
bool kong(){
for(int i = 1; i <= 13; i++) if(a[i]) return false;
if(bk) return false;
if(sk) return false;
return true;
}
void dfs(int cnt){
if(cnt >= mn) return;
if(kong()){
mn = min(mn, cnt);
return;
}
if(bk && sk){
bk = false, sk = false;
dfs(cnt+1);
bk = true, sk = true;
}
for(int i = 1; i <= 13; i++){
for(int j = 1; j <= 4; j++){
if(a[i] >= j){
a[i] -= j;
dfs(cnt+1);
a[i] += j;
}
}
}
for(int i = 1; i <= 13; i++){
if(a[i] < 3) continue;
for(int j = 1; j <= 13; j++){
if(i == j) continue;
if(a[j] >= 1){
a[i] -= 3, a[j]--;
dfs(cnt+1);
a[i] += 3, a[j]++;
}
if(a[j] >= 2){
a[i] -= 3, a[j] -= 2;
dfs(cnt+1);
a[i] += 3, a[j] += 2;
}
}
}
for(int i = 7; i <= 10; i++){
if(a[i-4] && a[i-3] && a[i-2] && a[i-1] && a[i]){
a[i-4]--, a[i-3]--, a[i-2]--, a[i-1]--, a[i]--;
dfs(cnt+1);
a[i-4]++, a[i-3]++, a[i-2]++, a[i-1]++, a[i]++;
}
}
for(int i = 5; i <= 10; i++){
if(a[i-2] >= 2 && a[i-1] >= 2 && a[i] >= 2){
a[i-2] -= 2, a[i-1] -= 2, a[i] -= 2;
dfs(cnt+1);
a[i-2] += 2, a[i-1] += 2, a[i] += 2;
}
}
for(int i = 3; i <= 10; i++){
if(a[i-1] >= 3 && a[i] >= 3){
a[i-1] -= 3, a[i] -= 3;
dfs(cnt+1);
a[i-1] += 3, a[i] += 3;
}
}
for(int i = 1; i <= 13; i++){
if(a[i] < 4) continue;
for(int j = 1; j <= 13; j++){
if(i == j || !a[j]) continue;
for(int k = 1; k <= 13; k++){
if(k == i || !a[k]) continue;
a[i] -= 4, a[j]--, a[k]--;
dfs(cnt+1);
a[i] += 4, a[j]++, a[k]++;
}
}
}
int sum = 0;
for(int i = 1; i <= 13; i++) sum += a[i];
if(bk) sum++;
if(sk) sum++;
mn = min(mn, sum+cnt);
return;
}
void solve(){
mn = big;
memset(a, 0, sizeof(a));
bk = sk = false;
cin >> n;
for(int i = 1; i <= n; i++){
int x, y; cin >> x >> y;
if(x == 0){
if(y == 1) sk = true;
if(y == 0) bk = true;
continue;
}
a[x]++;
}
dfs(0);
cout << mn << "\n";
}
int main() {
cin >> t;
while(t--){
solve();
}
return 0;
}