/* Look at me! Look at me! Look at how large the monster inside me has become! */ #include #include #include #include #define FIT(a,b) for(vector::iterator a=b.begin();a!=b.end();a++) #define FITP(a,b) for(vector >::iterator a=b.begin();a!=b.end();a++) #define RIT(a,b) for(vector::reverse_iterator a=b.end();a!=b.begin();++a) #include #define ROF(a,b,c) for(int a=b;a>=c;--a) #include #include #define FOR(a,b,c) for(int a=b;a<=c;++a) #define REP(a,b) for(register int a=0;a #include #include #include #define f cin #define g cout #include #define INF 0x3f3f3f3f #define debug cerr<<"OK"; #define pii pair #define mp make_pair #define pb push_back #define fi first #define se second #define ld long double #define ll long long #define ull unsigned long long #define eps 1.e-7 #define BUFMAX 10100100 #define N 20 #define mod 666013 using namespace std; int dx[]={0,0,0,1,-1}; int dy[]={0,1,-1,0,0}; queue qx,qy; vector buc[N]; int viz[N][N],t,sol,v[N],cs; char s[N][N],be[N][N],a[N][N]; void fil(int x,int y,int col) { qx.push(x); qy.push(y); viz[x][y]=1; while(!qx.empty()) { x=qx.front(); y=qy.front(); qx.pop(); qy.pop(); FOR(i,1,4) { int xc=x+dx[i]; int yc=y+dy[i]; if(xc<1||yc<1||xc>14||yc>14) continue; if(viz[xc][yc]||a[xc][yc]!=col) continue; viz[xc][yc]=1; qx.push(xc); qy.push(yc); } } } void fil2(int x,int y,int col,int r) { qx.push(x); qy.push(y); while(!qx.empty()) { x=qx.front(); y=qy.front(); qx.pop(); qy.pop(); FOR(i,1,4) { int xc=x+dx[i]; int yc=y+dy[i]; if(xc<1||yc<1||xc>14||yc>14) continue; if(viz[xc][yc]==r) continue; if(viz[xc][yc]!=r-1&&a[xc][yc]!=col) continue; viz[xc][yc]=r; qx.push(xc); qy.push(yc); a[xc][yc]=col; } } } int go() { int sol=0; memset(viz,0,sizeof(viz)); FOR(i,1,14) FOR(j,1,14) a[i][j]=s[i][j]; fil(1,1,a[1][1]); fil2(1,1,v[1],2); fil2(1,1,v[2],3); fil2(1,1,v[3],4); fil2(1,1,v[4],5); fil2(1,1,v[5],6); FOR(i,1,14) FOR(j,1,14) sol+=(viz[i][j]!=0); return sol; } void back(int k,int l) { if(k>l) { cs=go(); if(cs>sol) { sol=cs; buc[t].clear(); FOR(j,1,5) buc[t].pb(v[j]); FOR(i,1,14) FOR(j,1,14) be[i][j]=a[i][j]; } return ; } FOR(i,0,5) { v[k]=i; if(k==1&&v[k]==s[1][1]) continue; if(v[k]==v[k-1]) continue; back(k+1,l); } } int main () { #ifndef ONLINE_JUDGE freopen("a.in","r",stdin); freopen("a.out","w",stdout); #endif FOR(i,1,14) f>>(s[i]+1); FOR(i,1,14) FOR(j,1,14) s[i][j]-='0'; FOR(i,1,5) { sol=0; ++t; back(1,4); FOR(j,1,14) FOR(k,1,14) s[j][k]=be[j][k]; } ++t; back(1,5); FOR(j,1,14) FOR(k,1,14) s[j][k]=be[j][k]; FOR(i,1,6) FIT(it,buc[i]) g<<*it<<" "; /* g<<"\n"; FOR(i,1,14) { FOR(j,1,14) g<