#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v[20];
string a[20], b[20];
bool dp[500010][20];
void dfs(int s, int now)
{
dp[s][now] = true;
for(auto nxt: v[now])
{
if(s & (1 << nxt)) continue;
if(!dp[s | (1 << nxt)][nxt])
dfs(s | (1 << nxt), nxt);
}
}
int main()
{
int t;
cin >> t;
while(t --)
{
int ans = 0;
cin >> n;
for(int i = 0; i < (1 << n); i ++)
{
for(int j = 0; j < n; j ++)
dp[i][j] = false;
}
for(int i = 0; i < n; i ++)
{
cin >> a[i] >> b[i];
v[i].clear();
}
for(int i = 0; i < n; i ++)
{
for(int j = i + 1; j < n; j ++)
{
if(a[i] == a[j] || b[i] == b[j])
{
v[i].push_back(j);
v[j].push_back(i);
}
}
}
for(int i = 0; i < n; i ++)
{
dp[1 << i][i] = true;
dfs(1 << i, i);
}
for(int i = 0; i < (1 << n); i ++)
{
for(int j = 0; j < n; j ++)
if(dp[i][j]) ans = max(ans, __builtin_popcount(i));
}
cout << n - ans << endl;
}
return 0;
}