#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long #define pb push_back #define mp make_pair #define pii pair #define pll pair #define all(x) (x).begin(), (x).end() #define fi first #define se second using namespace std; int i, j, x, y, newx, newy, mlc, cnt; char s[20][20], t[20][20], B[1005], a[30]; bool viz[16][16]; pii A[1005]; int dx[] = { -1, 0, 0, 1}; int dy[] = {0, -1, 1, 0}; deque q; void fill() { cnt = 0; memset(viz, 0, sizeof(viz)); char col = s[1][1]; q.pb(mp(1, 1)); while(!q.empty()) { x = q.front().fi; y = q.front().se; q.pop_front(); A[++cnt] = mp(x, y); for(int k = 0; k < 4; k++) { newx = x + dx[k]; newy = y + dy[k]; if(!viz[newx][newy] && s[newx][newy] == col) { viz[newx][newy] = 1; q.pb(mp(newx, newy)); } } } mlc = 0; for(int i = 1; i <= cnt; i++) for(int k = 0; k < 4; k++) { newx = A[i].fi + dx[k]; newy = A[i].se + dy[k]; if(newx >= 1 && newx <= 14 && newy >= 1 && newy <= 14 && !viz[newx][newy]) B[++mlc] = s[newx][newy]; } } void color(char x) { for(int i = 1; i <= cnt; i++) s[A[i].fi][A[i].se] = x; } bool check() { char col = s[1][1]; for(int i = 1; i <= 14; i++) for(int j = 1; j <= 14; j++) if(s[i][j] != col) return 0; return 1; } int main() { srand(time(0)); // freopen("test.in", "r", stdin); // freopen("test.out", "w", stdout); for(i = 1; i <= 14; i++) scanf("%s", t[i] + 1); for(int I = 1; I <= 50000; I++) { for(int i = 1; i <= 14; i++) for(int j = 1; j <= 14; j++) s[i][j] = t[i][j]; for(i = 1; i <= 25; i++) { fill(); if(!mlc) { a[i] = '0'; for(j = 1; j <= i; j++) printf("%d ", a[j] - '0'); return 0; } a[i] = B[1 + rand() % mlc]; color(a[i]); if(check()) { for(j = 1; j <= i; j++) printf("%d ", a[j] - '0'); return 0; } } } return 0; }