#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <ctime>
using namespace std;
ifstream fin("date.in");
#define MAX 15
int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};

int viz[MAX][MAX], a[MAX][MAX][26];
int fr[6], rez[26];

void executa(int i, int j, int pas)
{
    if(viz[i][j])
        return;
    viz[i][j] = 1;
    fr[a[i][j][pas]]++;
    for(int k = 0 ; k < 4 ; k++)
    {
        int noui = i + dir[k][0];
        int nouj = j + dir[k][1];
        if(noui <= 0 || noui > 14 || nouj <= 0 || nouj > 14)
            continue;

        if(a[i][j][pas] == a[noui][nouj][pas])
        {
            executa(noui, nouj, pas);
        }
    }
}

void ff(int i, int j, int pas)
{
    viz[i][j] = 1;
    for(int k = 0 ; k < 4 ; k++)
    {
        int noui = i + dir[k][0];
        int nouj = j + dir[k][1];
        if(noui <= 0 || noui > 14 || nouj <= 0 || nouj > 14)
            continue;
        if(!viz[noui][nouj])
        {
            if(a[i][j][pas] == a[noui][nouj][pas])
            {
                ff(noui, nouj, pas);
            }
            else
            {
                executa(noui, nouj, pas);
            }
        }
    }
}

void af(int k)
{
    for(int i = 1 ; i <= k ; i++)
    {
        cout << rez[i] << " ";
    }
    cout << "\n";
}

void mark(int i, int j, int initcul, int cul, int k)
{
    if(a[i][j][k] == initcul)
        a[i][j][k] = cul;
    else
        return;
    for(int l = 0 ; l < 4 ; l++)
    {
        int noui = i + dir[l][0];
        int nouj = j + dir[l][1];
        if(noui <= 0 || noui > 14 || nouj <= 0 || nouj > 14)
            continue;
        mark(noui, nouj, initcul, cul, k);
    }
}

void backt(int k)
{
  //  cout << k << "\n";
    memset(viz, 0, sizeof(viz));
    memset(fr, 0, sizeof(fr));
    ff(1, 1, k - 1);

    int s = 0;
    for(int i = 0 ; i <= 5 ; i++)
    {
        s += fr[i];
    }
    if(s == 0)
    {
        af(k - 1);
        exit(0);
    }

    if(k > 25)
    {
        return;
    }
    pair<int, int> ord[6];
    for(int i = 0 ; i <= 5 ; i++)
    {
        ord[i] = make_pair(-fr[i], i);
    }
    sort(ord, ord + 6);
    for(int i = 0 ; i <= 5 ; i++)
    {
      //  if(ord[i].first == 0)
        //    continue;
        int cul = ord[i].second;
        for(int j = 1 ; j <= 14 ; j++)
        {
            for(int l = 1 ; l <= 14 ; l++)
            {
                a[j][l][k] = a[j][l][k - 1];
               // cout << a[j][l][k];
            }
          //  cout << "\n";
        }
       // cout << "\n";
        rez[k] = cul;
        if(cul != a[1][1][k])
            mark(1, 1, a[1][1][k], cul, k);
        backt(k + 1);
    }

}


int main()
{
   // srand(time(0));
    int i, j;
    char c;

    for(i = 1 ; i <= 14 ; i++)
    {
        for(j = 1 ; j <= 14 ; j++)
        {
            cin >> c;
            a[i][j][0] = c - '0';
        }
    }
    backt(1);
}