#include <iostream>
#include <queue>
using namespace std;
char map[12][6];
bool visit[12][6];
bool check = false;
int result = 0;
void down(int i, int j) {
int top = i;
int bot = i;
int n = 0;
for (int l = i; l >= 0; l--) {
if (map[l][j] != '.') {
map[bot - n][j] = map[l][j];
map[l][j] = '.';
n++;
}
}
}
void boom(int i, int j) {
char name = map[i][j];
map[i][j] = '.';
if (i > 0)
if (map[i - 1][j] == name)
boom(i - 1, j);
if (j > 0)
if (map[i][j - 1] == name)
boom(i, j - 1);
if (i < 11)
if (map[i + 1][j] == name)
boom(i + 1, j);
if (j < 5)
if (map[i][j + 1] == name)
boom(i, j + 1);
}
void bfs(int i, int j) {
queue<pair<int, int>> q;
pair<int, int> p;
int block = 0;
p.first = i;
p.second = j;
q.push(p);
char cur = map[i][j];
visit[i][j] = true;
block++;
while (!q.empty()) {
i = q.front().first;
j = q.front().second;
if (i > 0)
if (map[i - 1][j] == cur && !visit[i - 1][j]) {
p.first = i - 1;
p.second = j;
q.push(p);
visit[i - 1][j] = true;
block++;
}
if (j > 0)
if (map[i][j - 1] == cur && !visit[i][j - 1]) {
p.first = i;
p.second = j - 1;
q.push(p);
visit[i][j - 1] = true;
block++;
}
if (i < 11)
if (map[i + 1][j] == cur && !visit[i + 1][j]) {
p.first = i + 1;
p.second = j;
q.push(p);
visit[i + 1][j] = true;
block++;
}
if (j < 5)
if (map[i][j + 1] == cur && !visit[i][j + 1]) {
p.first = i;
p.second = j + 1;
q.push(p);
visit[i][j + 1] = true;
block++;
}
q.pop();
}
if (block > 3) {
boom(i, j);
check = true;
}
}
int main() {
char cur;
for (int i = 0; i < 12; i++)
for (int j = 0; j < 6; j++) {
cin >> map[i][j];
visit[i][j] = false;
}
while (true) {
check = false;
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 6; j++) {
visit[i][j] = false;
}
}
for (int i = 0; i < 12; i++)
for (int j = 0; j < 6; j++) {
if (map[i][j] != '.' && !visit[i][j]) {
cur = map[i][j];
bfs(i, j);
}
}
if (!check) {
break;
}
result++;
for (int i = 11; i >= 0; i--) {
for (int j = 5; j >= 0; j--) {
if (map[i][j] == '.')
down(i, j);
}
}
}
cout << result;
return 0;
}