#include <iostream>
using namespace std;
char f[12][7];

int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};

void remove(int x, int y, char a){
  if( x<0 || x>=12 ) return;
  if( y<0 || y>=6 ) return;
  if( f[x][y] != a ) return;

  f[x][y] = '.';
  for( int d=0;d<4;d++ ){
    int nx = x+dx[d];
    int ny=y+dy[d];
    if( f[nx][ny] == 'O' ){
      f[nx][ny] = '.';
    }else
      remove(x+dx[d], y+dy[d], a);
  }
}

int count(int x, int y, char a){
  if( x<0 || x>=12 ) return 0;
  if( y<0 || y>=6 ) return 0;
  if( f[x][y] != a ) return 0;

  f[x][y] = 'C';
  int rtn=1;
  for( int d=0;d<4;d++ )
    rtn += count(x+dx[d], y+dy[d], a);

  f[x][y] = a;
  return rtn;
}


bool is_remove(){
  bool rtn = false;
  for( int i=0;i<12;i++ ){
    for( int j=0;j<6;j++ ){
      if( f[i][j] != '.' && f[i][j] != 'O' ){
	int c = count(i, j, f[i][j] );
	if( c >= 4 ){
	  rtn = true;
	  remove(i, j, f[i][j]);
	}
      }
    }
  }
  if( rtn ){
    // ティツ青ステ、ツクツ凝・ツ?ヲテァツ青?
    for( int j=0;j<6;j++ ){
      for( int i=12;i>=0;i-- ){
	if( f[i][j] == '.' ){
	  for( int k=i-1;k>=0;k-- ){
	    if( f[k][j] != '.' ){
	      f[i][j] = f[k][j];
	      f[k][j] = '.';
	      break;
	    }
	  }
	}
      }
    }
  }

  return rtn;
}

void pr(){
  for( int i=0;i<12;i++ )
    cout << f[i] << endl;
}

int main(){
  int datasetn;

  cin >> datasetn;
  while( datasetn-- ){
    for( int i=0;i<12;i++ ){
      cin >> f[i];
      //      cout << f[i] << endl;
    }


    int ans=0;
    //    pr();//
    while( is_remove() ){
      ans++;
      //      pr();//
    }
    cout << ans << endl;

    //    break;
  }
  return 0;
}