#include <iostream>
#include <cstring>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <utility>
using namespace std;//이름공간 선언
string maps[12][6];
int visit[12][6];//방문 기록
int dx[] = {-1,1,0,0};
int dy[] = {0,0,-1,1};
int ans = 0;//연쇄 폭발 횟수
//입력
void input(){
for(int i=0;i<12;i++){
for(int j=0;j<6;j++){
cin>>maps[i][j];
}
}
}
//초기화
void init(){
for(int i=0;i<12;i++){
for(int j=0;j<6;j++){
visit[i][j] = 0;
}
}
}
//bfs탐색
bool bfs(int x,int y){
init();//방문지점 초기화
string color = maps[x][y];
int cnt = 0;//개수 체크
bool flag = false;//폭발이 일어나는가?
queue<pair<int,int>> q;
queue<pair<int,int>> boom;//폭발한 위치를 담는 큐
q.push({x,y});
boom.push({x,y});
while(!q.empty()){
int cx = q.front().first;
int cy = q.front().second;
visit[cx][cy] = 1;//방문체크
cnt++;//개수 세기
q.pop();
//다음지점 탐색
for(int i=0;i<4;i++){
int nx = cx + dx[i];
int ny = cy + dy[i];
//범위내에 있고 미방문,색깔이 같으면
if(nx>=0 && nx<12 && ny>=0 && ny<6){
if(maps[nx][ny]==color && visit[nx][ny]==0){
visit[nx][ny] = 1;//방문체크
q.push({nx,ny});
boom.push({nx,ny});//좌표 넣기
}
}
}
}
//폭발이 일어나는가?
if(cnt>=4){
flag = true;
//터졌으니 빈공간으로
while(!boom.empty()){
int bx = boom.front().first;
int by = boom.front().second;
maps[bx][by] = ".";
boom.pop();
}
}
return flag;
}
//내리기
void godown(){
for(int j=0;j<6;j++){
for(int i=11;i>=0;i--){
if(maps[i][j] == "."){
//.가 안나올때까지
for(int k=i-1;k>=0;k--){
if(maps[k][j] != "."){
maps[i][j] = maps[k][j];
maps[k][j] = ".";
break;
}
}
}
}
}
}
//뿌요뿌요
void puyo(){
//연쇄가 일어나지 않을때까지 탐색
while(true){
bool boom_flag = false;//터졌는가?
//맵 탐색
for(int i=11;i>=0;i--){
for(int j=0;j<6;j++){
if(maps[i][j] != "."){
if(bfs(i,j)==true){
boom_flag = true;
}
}
}
}
//연쇄 폭발이 이루어 졌으면 한번 더
if(boom_flag == true){
godown();//내리기
ans++;
}else{
return;//반목문 종료
}
}
}
int main(){
cin.tie(0);
cout.tie(0);
input();//입력
puyo();//탐색하기
cout<<ans;//출력
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y2N0eXBlPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8dXRpbGl0eT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ly/snbTrpoTqs7XqsIQg7ISg7Ja4CnN0cmluZyBtYXBzWzEyXVs2XTsKaW50IHZpc2l0WzEyXVs2XTsvL+uwqeusuCDquLDroZ0KaW50IGR4W10gPSB7LTEsMSwwLDB9OwppbnQgZHlbXSA9IHswLDAsLTEsMX07CmludCBhbnMgPSAwOy8v7Jew7IeEIO2PreuwnCDtmp/siJgKCi8v7J6F66ClCnZvaWQgaW5wdXQoKXsKCWZvcihpbnQgaT0wO2k8MTI7aSsrKXsKCQlmb3IoaW50IGo9MDtqPDY7aisrKXsKCQkJY2luPj5tYXBzW2ldW2pdOwoJCX0KCX0KfQoKLy/stIjquLDtmZQKdm9pZCBpbml0KCl7Cglmb3IoaW50IGk9MDtpPDEyO2krKyl7CgkJZm9yKGludCBqPTA7ajw2O2orKyl7CgkJCXZpc2l0W2ldW2pdID0gMDsKCQl9Cgl9Cn0KCi8vYmZz7YOQ7IOJCmJvb2wgYmZzKGludCB4LGludCB5KXsKCWluaXQoKTsvL+uwqeusuOyngOygkCDstIjquLDtmZQKCXN0cmluZyBjb2xvciA9IG1hcHNbeF1beV07CglpbnQgY250ID0gMDsvL+qwnOyImCDssrTtgawKCWJvb2wgZmxhZyA9IGZhbHNlOy8v7Y+t67Cc7J20IOydvOyWtOuCmOuKlOqwgD8KCXF1ZXVlPHBhaXI8aW50LGludD4+IHE7CglxdWV1ZTxwYWlyPGludCxpbnQ+PiBib29tOy8v7Y+t67Cc7ZWcIOychOy5mOulvCDri7TripQg7YGQCglxLnB1c2goe3gseX0pOwoJYm9vbS5wdXNoKHt4LHl9KTsKCQoJd2hpbGUoIXEuZW1wdHkoKSl7CgkJaW50IGN4ID0gcS5mcm9udCgpLmZpcnN0OwoJCWludCBjeSA9IHEuZnJvbnQoKS5zZWNvbmQ7CgkJdmlzaXRbY3hdW2N5XSA9IDE7Ly/rsKnrrLjssrTtgawKCQljbnQrKzsvL+qwnOyImCDshLjquLAKCQlxLnBvcCgpOwoJCQoJCS8v64uk7J2M7KeA7KCQIO2DkOyDiQoJCWZvcihpbnQgaT0wO2k8NDtpKyspewoJCQlpbnQgbnggPSBjeCArIGR4W2ldOwoJCQlpbnQgbnkgPSBjeSArIGR5W2ldOwoJCQkvL+uylOychOuCtOyXkCDsnojqs6Ag66+467Cp66y4LOyDieq5lOydtCDqsJnsnLzrqbQKCQkJaWYobng+PTAgJiYgbng8MTIgJiYgbnk+PTAgJiYgbnk8Nil7CgkJCQlpZihtYXBzW254XVtueV09PWNvbG9yICYmIHZpc2l0W254XVtueV09PTApewoJCQkJCXZpc2l0W254XVtueV0gPSAxOy8v67Cp66y47LK07YGsCgkJCQkJcS5wdXNoKHtueCxueX0pOwoJCQkJCWJvb20ucHVzaCh7bngsbnl9KTsvL+yijO2RnCDrhKPquLAKCQkJCX0KCQkJfQoJCX0KCX0KCQoJLy/tj63rsJzsnbQg7J287Ja064KY64qU6rCAPwoJaWYoY250Pj00KXsKCQlmbGFnID0gdHJ1ZTsKCQkvL+2EsOyhjOycvOuLiCDruYjqs7XqsITsnLzroZwKCQl3aGlsZSghYm9vbS5lbXB0eSgpKXsKCQkJaW50IGJ4ID0gYm9vbS5mcm9udCgpLmZpcnN0OwoJCQlpbnQgYnkgPSBib29tLmZyb250KCkuc2Vjb25kOwoJCQltYXBzW2J4XVtieV0gPSAiLiI7CgkJCWJvb20ucG9wKCk7CgkJfQoJfQoJcmV0dXJuIGZsYWc7Cn0KCi8v64K066as6riwCnZvaWQgZ29kb3duKCl7Cglmb3IoaW50IGo9MDtqPDY7aisrKXsKCQlmb3IoaW50IGk9MTE7aT49MDtpLS0pewoJCQlpZihtYXBzW2ldW2pdID09ICIuIil7CgkJCQkvLy7qsIAg7JWI64KY7Jis65WM6rmM7KeACgkJCQlmb3IoaW50IGs9aS0xO2s+PTA7ay0tKXsKCQkJCQlpZihtYXBzW2tdW2pdICE9ICIuIil7CgkJCQkJCW1hcHNbaV1bal0gPSBtYXBzW2tdW2pdOwoJCQkJCQltYXBzW2tdW2pdID0gIi4iOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9Cn0KCi8v67+M7JqU67+M7JqUCnZvaWQgcHV5bygpewogICAgLy/sl7Dsh4TqsIAg7J287Ja064KY7KeAIOyViuydhOuVjOq5jOyngCDtg5Dsg4kKICAgIHdoaWxlKHRydWUpewogICAgCWJvb2wgYm9vbV9mbGFnID0gZmFsc2U7Ly/thLDsoYzripTqsIA/CiAgICAJLy/rp7Ug7YOQ7IOJCiAgICAJZm9yKGludCBpPTExO2k+PTA7aS0tKXsKICAgIAkJZm9yKGludCBqPTA7ajw2O2orKyl7CiAgICAJCQlpZihtYXBzW2ldW2pdICE9ICIuIil7CiAgICAJCQkJaWYoYmZzKGksaik9PXRydWUpewogICAgCQkJCQkJYm9vbV9mbGFnID0gdHJ1ZTsKICAgIAkJCQkJfQogICAgCQkJCX0KICAgIAkJfQogICAgCX0KICAgIAkvL+yXsOyHhCDtj63rsJzsnbQg7J2066Oo7Ja0IOyhjOycvOuptCDtlZzrsogg642UCiAgICAJaWYoYm9vbV9mbGFnID09IHRydWUpewogICAgCQlnb2Rvd24oKTsvL+uCtOumrOq4sAogICAgCQlhbnMrKzsKICAgIAl9ZWxzZXsKICAgIAkJcmV0dXJuOy8v67CY66qp66y4IOyiheujjAogICAgCX0KICAgIH0KfQppbnQgbWFpbigpewogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgCiAgICBpbnB1dCgpOy8v7J6F66ClCiAgICBwdXlvKCk7Ly/tg5Dsg4ntlZjquLAKICAgIGNvdXQ8PGFuczsvL+y2nOugpQogICAgcmV0dXJuIDA7Cn0=