#include #include #include #include #include #include #include using namespace std; const int Dx[] = {-1, 0, 1, 0}, Dy[] = {0, -1, 0, 1}; const int INF = 0x3f3f3f3f; char A[30][20][20]; bool S[20][20]; int dist[402], daux[402], dnow[402]; int who[30]; int size[402], mx[402], my[402]; int ST[402], result[402]; int comp[20][20], compnow; int colcomp[402]; queue Q; int colnow; void fill(int x, int y, int cmpnow) { if (x < 1 || y < 1 || x > 14 || y > 14 || comp[x][y] || A[result[0]][x][y] - '0' != colnow) return; comp[x][y] = cmpnow; mx[cmpnow] += x; my[cmpnow] += y; ++size[cmpnow]; for (int i = 0; i < 4; ++i) fill(x + Dx[i], y + Dy[i], cmpnow); } void getdist(int now) { for (int i = 1; i <= compnow; ++i) dist[i] = INF; dist[now] = 0; Q.push(now); while (!Q.empty()) { int now = Q.front(); Q.pop(); for (int i = 1; i <= 14; ++i) for (int j = 1; j <= 14; ++j) if (comp[i][j] == now) for (int k = 0; k < 4; ++k) if (i + Dx[k] >= 1 && i + Dx[k] <= 14 && j + Dy[k] >= 1 && j + Dy[k] <= 14) if (dist[comp[i + Dx[k]][j + Dy[k]]] == INF) { dist[comp[i + Dx[k]][j + Dy[k]]] = dist[now] + 1; Q.push(comp[i + Dx[k]][j + Dy[k]]); } } } int main() { cin.sync_with_stdio(false); int N = 14; for (int i = 1; i <= N; ++i) cin >> (A[0][i] + 1); srand(time(0)); while (true) { memset(comp, 0, sizeof(comp)); memset(size, 0, sizeof(size)); memset(mx, 0, sizeof(mx)); memset(my, 0, sizeof(my)); 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; } getdist(1); memcpy(daux, dist, sizeof(daux)); memset(dnow, 0, sizeof(dnow)); bool any = false; for (int i = 1; i <= compnow; ++i) if (daux[i] == 1) { any = true; getdist(i); for (int j = 1; j <= compnow; ++j) dnow[i] = max(dnow[i], dist[j]); } if (!any) break; int cand = 0, eq = 0; for (int i = 1; i <= compnow; ++i) if (daux[i] == 1 && (cand == 0 || dnow[i] < dnow[cand])) { cand = i; eq = 1; } else if (daux[i] == 1 && dnow[i] == dnow[cand]) ++eq; int fin = 0, rem = who[result[0]]; for (int i = 1; i <= compnow; ++i) if (daux[i] == 1 && dnow[i] == dnow[cand] && rem != 0) --rem; else if (daux[i] == 1 && dnow[i] == dnow[cand]) { fin = i; break; } if (eq != 1) who[result[0]] = (who[result[0]] + rand() % (eq - 1) + 1) % eq; result[++result[0]] = colcomp[fin]; 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 (daux[comp[i][j]] == 0) A[result[0]][i][j] = colcomp[fin] + '0'; } if (result[0] > 25) result[0] = rand() % 25; } for (int i = 1; i <= result[0]; ++i) cout << result[i] << ' '; cout << '\n'; }