#include<cstdio>
#include<vector>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<map>
#include<set>
#include<queue>
#include<algorithm>

using namespace std;

int ap[30][30], a[30][30], N, K1, K2, b[30][30];
char sir[30];
vector < int > ans;

void dfs (int i, int j, int ap_cul, int cul)
{
    if (a[i][j] != cul)
        return ;

    if (ap[i][j])
        return ;

    ap[i][j] = ap_cul;

    dfs (i + 1, j, ap_cul, cul);
    dfs (i - 1, j, ap_cul, cul);
    dfs (i, j + 1, ap_cul, cul);
    dfs (i, j - 1, ap_cul, cul);
}

int vol (int ap_cul)
{
    int v = 0;
    for (int i=1; i<=N; i++)
        for (int j=1; j<=N; j++)
            if (ap[i][j] != ap_cul && ap[i][j] != 1)
            {
                if (ap[i-1][j] == ap_cul || ap[i+1][j] == ap_cul || ap[i][j+1] == ap_cul || ap[i][j-1] == ap_cul ||
                    ap[i-1][j] == 1 || ap[i+1][j] == 1 || ap[i][j+1] == 1 || ap[i][j-1] == 1)
                        v += K1;
            }
    for (int i=1; i<=N; i++)
        for (int j=1; j<=N; j++)
            if (ap[i][j] == ap_cul)
                v += K2;
    return v;
}

bool finished ()
{
    for (int i=1; i<=N; i++)
        for (int j=1; j<=N; j++)
            if (a[i][j] != a[1][1])
                return 0;
    return 1;
}

int main()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);

N = 14;
for (int i=1; i<=N; i++)
{
    gets (sir + 1);
    for (int j=1; j<=N; j++)
        a[i][j] = sir[j] - '0';
}

for (int i=0; i<=N + 1; i++)
    for (int j=0; j<=N + 1; j++)
        if (i == 0 || j == 0 || i == N + 1 || j == N + 1)
            a[i][j] = -1;

for (int i=0; i<=N + 1; i++)
    for (int j=0; j<=N + 1; j++)
        b[i][j] = a[i][j];

for (K1 = 1; K1 <= 3; K1 ++)
    for (K2 = K1 + 1; K2 <= 4; K2 ++)
    {
        for (int i=0; i<=N+1; i++)
            for (int j=0; j<=N+1; j++)
                a[i][j] = b[i][j];

        vector < int > curr;
        while (1)
        {
            if (finished ())
                break;

            for (int i=1; i<=N; i++)
                for (int j=1; j<=N; j++)
                    ap[i][j] = 0;

            int nr_cul = 1, best = 0, how;
            dfs (1, 1, 1, a[1][1]);
            for (int C = 0; C < 6; C ++)
            if (C != a[1][1])
            {
                ++nr_cul;
                for (int i=1; i<=N; i++)
                    for (int j=1; j<=N; j++)
                        if (ap[i][j] == 0 && a[i][j] == C && (ap[i-1][j] == 1 || ap[i][j-1] == 1 || ap[i+1][j] == 1 || ap[i][j+1] == 1))
                            dfs (i, j, nr_cul, C);

                int succes = vol (nr_cul);
                if (succes > best)
                    best = succes, how = C;
            }

            curr.push_back (how);

            for (int i=1; i<=N; i++)
                for (int j=1; j<=N; j++)
                    if (ap[i][j] == 1)
                        a[i][j] = how;

        /*    for (int i=1; i<=N; i++, printf ("\n"))
                for (int j=1; j<=N; j++)
                    printf ("%d", ap[i][j]);
            printf ("\n\n");*/
        }
        if ((K1 == 1 && K2 == 2) || curr.size() < ans.size())
            ans = curr;
    }

for (int i=0; i<ans.size(); i++)
    printf ("%d ", ans[i]);

return 0;
}