#include #include #include #include using namespace std; #define maxn 16 int n, m; int f[maxn][maxn]; set > > g, s; string ss; int v[maxn][maxn]; int sol[maxn*maxn]; int ff[maxn][maxn]; void add(int x, int y) { if(x<=0 || y<=0 || x>n || y>n) return; if(f[x][y]==0 && ff[x][y]==0) { ff[x][y]=1; s.insert(make_pair(v[x][y], make_pair(x, y))); if(v[x+1][y]==v[x][y]) add(x+1, y); if(v[x][y+1]==v[x][y]) add(x, y+1); if(v[x-1][y]==v[x][y]) add(x-1, y); if(v[x][y-1]==v[x][y]) add(x, y-1); } } void addNeighbors() { int x, y; for(set > > :: iterator it = g.begin(); it != g.end(); ++it) { x=(*it).second.first; y=(*it).second.second; add(x+1, y); add(x, y+1); add(x-1, y); add(x, y-1); } } int main() { //freopen("floodit.in", "r", stdin); //freopen("floodit.out", "w", stdout); n=14; for(int i=1; i<=n; ++i) { cin>>ss; for(int j=1; j<=n; ++j) v[i][j]=ss[j-1]-'0'+1; } f[1][1]=1; g.insert(make_pair(v[1][1], make_pair(1, 1))); addNeighbors(); while(s.size()>0) { int mx=0; int cl=1; for(int i=1; i<=6; ++i) { int nr=0; for(set > > :: iterator it = s.begin(); it != s.end(); ++it) if(it->first == i) ++nr; if(nr>mx) { mx=nr; cl=i; } } sol[++sol[0]]=cl-1; for(set > > :: iterator it = s.begin(); it != s.end(); ++it) if(it->first == cl) { g.insert(*it); f[it->second.first][it->second.second]=1; } for(set > > :: iterator it = s.begin(); it != s.end(); ++it) if(it->first == cl) s.erase(it); addNeighbors(); } for(int i=1; i<=sol[0]; ++i) printf("%d ", sol[i]); printf("\n"); return 0; }