#include <stdio.h>
#include <string.h>

int map[12][6];
char input_map[12][8];

int group_num;
int group[12*6][2];

void tansaku(int x,int y,char color) {
	if(x<0 || x>=6 || y<0 || y>=12)return;
	if(map[y][x]!=0 || input_map[y][x]!=color)return;
	group[group_num][0]=y;
	group[group_num][1]=x;
	group_num++;
	map[y][x]=1;
	tansaku(x-1,y,color);
	tansaku(x+1,y,color);
	tansaku(x,y-1,color);
	tansaku(x,y+1,color);
}

int main(void) {
	int data_num,cur_data;
	int i,j,k;
	int rensa,deleted;
	scanf("%d",&data_num);
	for(cur_data=0;cur_data<data_num;cur_data++) {
		for(i=0;i<12;i++)scanf("%s",input_map[i]);
		for(rensa=0;;rensa++) {
			memset(map,0,sizeof(map));
			for(i=0;i<12;i++) {
				for(j=0;j<6;j++) {
					if(input_map[i][j]=='.' || input_map[i][j]=='O') {
						map[i][j]=1;
					} else {
						group_num=0;
						tansaku(j,i,input_map[i][j]);
						for(k=0;k<group_num;k++) {
							map[group[k][0]][group[k][1]]=group_num;
						}
					}
				}
			}
			deleted=0;
			for(i=0;i<12;i++) {
				for(j=0;j<6;j++) {
					if(map[i][j]>=4) {
						input_map[i][j]='.';
						if(i>0 && input_map[i-1][j]=='O')input_map[i-1][j]='.';
						if(i<11 && input_map[i+1][j]=='O')input_map[i+1][j]='.';
						if(j>0 && input_map[i][j-1]=='O')input_map[i][j-1]='.';
						if(j<5 && input_map[i][j+1]=='O')input_map[i][j+1]='.';
						deleted=1;
					}
				}
			}
			if(!deleted)break;
			for(i=11;i>0;i--) {
				for(j=0;j<6;j++) {
					if(input_map[i][j]=='.') {
						for(k=i;k>=0;k--) {
							if(input_map[k][j]!='.') {
								input_map[i][j]=input_map[k][j];
								input_map[k][j]='.';
								break;
							}
						}
					}
				}
			}
		}
		printf("%d\n",rensa);
	}
	return 0;
}