#include <stdio.h>

char island[12][12];

void format(int x, int y);
int check(void);

int main(void) {
	int i, j, k, value = 0;
	for (k = 0; k < 20; k++) {
		format(12, 12);													//配列の初期化
		for (i = 0; i < 12; i++) {
			for (j = 0; j < 12; j++) {
				island[j][i] = getchar();								//配列へ格納
				if (island[0][0] == '\n') { return 0; }
			}
			getchar();
		}
		printf("%d\n", check());
		getchar();
	}
	return 0;
}

int check(void) {
	int i, j, flag = 0, value = 0;
	do {
		flag = 0;
		for (i = 0; i < 12; i++) {
			for (j = 0; j < 12; j++) {
				if (flag == 0 && island[j][i] == '1') {					//初回のみ処理
					island[j][i] = '2';									//マーキング
					if (j < 12 - 1 && island[j + 1][i] == '1') {		//一番右以外なら右側を調べる
						island[j + 1][i] = '2';							//マーキング
					}
					if (i < 12 - 1 && island[j][i + 1] == '1') {		//一番下以外なら下側を調べる
						island[j][i + 1] = '2';							//マーキング
					}
					flag = 1;
				}
				if (island[j][i] == '1' || island[j][i] == '2') {		//常に処理
					if (j < 12 - 1 && island[j + 1][i] == '2') {		//一番右以外なら右側を調べる
						island[j][i] = '2';								//マーキング
					}
					if (j > 0 && island[j - 1][i] == '1') {				//一番左以外なら左側を調べる
						if (island[j][i] == '2') { island[j - 1][i] = '2'; }	//マーキング
					}
					if (j < 12 - 1 && island[j + 1][i] == '1') {		//一番右以外なら右側を調べる
						if (island[j][i] == '2') { island[j + 1][i] = '2'; }	//マーキング
					}
					if (i < 12 - 1 && island[j][i + 1] == '1') {		//一番下以外なら下側を調べる
						if (island[j][i] == '2') { island[j][i + 1] = '2'; }	//マーキング
					}
				}
				if (i > 0 && island[j][i - 1] == '2') {					//一番上下以外なら上側を調べる
					island[j][i - 1] = '0';								//消去
				}
			}
		}
		value += flag;
	} while (flag != 0);
	return value;
}

void format(int x, int y) {
	int i, j;
	for (i = 0; i < x; i++) {
		for(j = 0; j < y; j++){
			island[j][i] = 0;
		}
	}
}

