#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <queue>
using namespace std;
int main(){

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

	int t;
	cin>>t;
	char field[12][6];
	while(t--){
		for(int i = 0; i < 12; i++)
			for(int j = 0; j < 6; j++)
				cin>>field[i][j];
		bool fin=false;
		bool isCheck[12][6];
		int loopNum=-1;
		while(!fin){
			memset(isCheck,0,sizeof(isCheck));

			fin=true;
			for(int i = 0; i < 12; i++){
				for(int j = 0; j < 6; j++){
					if(!isCheck[i][j]&&field[i][j]!='.'&&field[i][j]!='O'){
						char col=field[i][j];
						vector<pair<int,int> > vpii;
						queue<pair<int,int> > q;
						q.push(make_pair(i,j));

						while(q.size()){
							pair<int,int> cp=q.front();q.pop();
							if(isCheck[cp.first][cp.second]||field[cp.first][cp.second]!=col)
								continue;
							isCheck[cp.first][cp.second]=true;
							vpii.push_back(cp);
							for(int k = 0; k < 4; k++){
								int ny=cp.first+dy[k];
								int nx=cp.second+dx[k];
								if(ny>=0&&nx>=0&&ny<12&&nx<6)
									q.push(make_pair(ny,nx));
							}
						}
						// 4ÂÈã¯¶FÌÕæªAµÄ¢êÎAÁ·
						// »ÌÛ»ê¼êÌÕæÌlûüÉ é¨¶áÜàª«Þ
						if(vpii.size()>=4){
							for(int k = 0; k < vpii.size(); k++){
								pair<int,int> p=vpii[k];
								field[p.first][p.second]='.';
								for(int l = 0; l < 4; l++){
									int ny=p.first+dy[l];
									int nx=p.second+dx[l];
									if(ny>=0&&nx>=0&&ny<12&&nx<6)
										if(field[ny][nx]=='O')
											field[ny][nx]='.';
								}
							}
							fin=false;
						}
					}
				}
			}
			// º
			for(int j = 0; j < 6; j++){
				int cnt=0;
				for(int i = 12-1; i >= 0; i--){
					if(field[i][j]!='.'){
						field[11-cnt][j]=field[i][j];
						if(11-cnt!=i)
							field[i][j]='.';
						cnt++;
					}
				}
			}
			loopNum++;
		}
		cout<<loopNum<<endl;
	}

	return 0;
}