#include <cstring>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>

using namespace std;

const int D1[] = {-1, 0, 1, 0},
          D2[] = {0, -1, 0, 1};
const int INF = 0x3f3f3f3f;
const int N = 14;

char A[50][20][20];
bool S[20][20];
int dist[402], daux[402], dnow[402];
int size[402];
int ST[402], result[402], aux[402];
int comp[20][20], compnow;
int colcomp[402];
queue<int> Q;

int colnow;
void fill(int x, int y, int cmpnow)
{
	if (x < 1 || y < 1 || x > N || y > N || comp[x][y] || A[result[0]][x][y] - '0' != colnow) return;
	comp[x][y] = cmpnow;
	size[cmpnow] += x * y;
	
	for (int i = 0; i < 4; ++i)
		fill(x + D1[i], y + D2[i], cmpnow);
}

void greedy()
{
	while (true)
	{
		memset(comp, 0, sizeof(comp));
		memset(size, 0, sizeof(size));
		memset(colcomp, 0, sizeof(colcomp));
		
		compnow = 0;
		for (int i = 1; i <= N; ++i)
			for (int j = 1; j <= N; ++j)
				if (!comp[i][j])
				{
					colnow = A[result[0]][i][j] - '0';
					fill(i, j, ++compnow);
					colcomp[compnow] = colnow;
				}
		
		int whcomp = -1;
		for (int i = 1; i <= N; ++i)
			for (int j = 1; j <= N; ++j)
				if (comp[i][j] == 1)
					for (int k = 0; k < 4; ++k)
						if (i + D1[k] >= 1 && i + D1[k] <= N && j + D2[k] >= 1 && j + D2[k] <= N)
							if (comp[i][j] != comp[i + D1[k]][j + D2[k]] && (whcomp == -1 || size[comp[i + D1[k]][j + D2[k]]] > size[whcomp]))
								whcomp = comp[i + D1[k]][j + D2[k]];
		if (whcomp == -1) break;
		
		result[++result[0]] = colcomp[whcomp];
		for (int i = 1; i <= N; ++i)
			for (int j = 1; j <= N; ++j)
			{
				A[result[0]][i][j] = A[result[0] - 1][i][j];
				if (comp[i][j] == 1)
					A[result[0]][i][j] = result[result[0]] + '0';
			}
	}
}

int main()
{
	cin.sync_with_stdio(false);
	
	for (int i = 1; i <= N; ++i)
		cin >> (A[0][i] + 1);
	
	greedy();
	memcpy(aux, result, sizeof(aux));
	
	while (aux[0] > 25)
	{
		int where = rand() % 25 + 1;
		
		memcpy(result, aux, sizeof(result));
		
		for (int i = 0; i < 6; ++i)
			if (i != aux[where] && i != A[where - 1][1][1] - '0')
			{
				result[0] = where;
				result[where] = i;
				
				char oldcol = A[result[0] - 1][1][1], newcol = A[result[0]][1][1];
				for (int i = 1; i <= N; ++i)
					for (int j = 1; j <= N; ++j)
						if (A[result[0] - 1][i][j] == oldcol && A[result[0]][i][j] == newcol)
							A[result[0]][i][j] = result[result[0]] + '0';
				
				greedy();
		
				if (result[0] < aux[0])
					memcpy(aux, result, sizeof(aux));
			}
		
		memcpy(result, aux, sizeof(result));
		result[0] = where;
		
		char oldcol = A[result[0] - 1][1][1], newcol = A[result[0]][1][1];
		for (int i = 1; i <= N; ++i)
			for (int j = 1; j <= N; ++j)
				if (A[result[0] - 1][i][j] == oldcol && A[result[0]][i][j] == newcol)
					A[result[0]][i][j] = result[result[0]] + '0';
		
		
		greedy();
	}
	
	for (int i = 1; i <= aux[0]; ++i)
		cout << aux[i] << ' ';
	cout << '\n';
}