#include<iostream>
#include<string>
#include<map>
#include<queue>
using namespace std;
const int INF = 1 << 30;
int bfs(const string& str){
  const int dy[] = { 0, 1, 1, 1}, dx[] = { 1, -1, 0, 1}, d[] = { 1, 3, 4, 5};
  queue< string > que;
  map< string , bool > used;
  int ret = INF;
  que.push(str);
  while(!que.empty()){
    string s = que.front();
    que.pop();
    ret = min<int>( ret, s.size());
    if(s.empty()) return ret;
    if(used[s]++) continue;
    for(int i = 0, y = 0; i < s.size(); i += 4, y++){
      for(int x = 0; x < 4 && i + x < s.size(); x++){
        for(int j = 0; j < 4; j++){
          int ny = y + dy[j], nx = x + dx[j];
          if( nx < 0 || nx >= 4) continue;
          if( i + x + d[j] >= s.size()) break;
          if( s[i + x] == s[i + x + d[j]]){
            string next = s;
            next.erase(next.begin() + i + x);
            next.erase(next.begin() + i + x + d[j] - 1);
            que.push(next);
          }
        }
      }
    }
  }
  return ret;
}
int main(){
  int n;
  cin >> n;
  while(n--){
    string res;
    for(int i = 0; i < 20; i++){
      char c;
      cin >> c;
      res += c;
    }
    cout << bfs(res) << endl;
  }
}