#include #include #include #include #include #include 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 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); }