#include #include #include #include #include using namespace std; int m,n; vector< string > color; vector< vector > zone; int nrzones=0; vector zone_size(1,0); int i_dir[] = {1,-1,0, 0}; int j_dir[] = {0, 0,1,-1}; typedef pair PII; bool valid(int i, int j){ return i>0 && i<=m && j>0 && j<=n ; } void bfs(int i, int j) { queue< PII > q; q.push(PII(i,j)); char c=color[i][j]; int z=zone[i][j]; while(!q.empty()){ int ci=q.front().first; int cj=q.front().second; q.pop(); for(int d=0;d<4;++d){ int ii=ci+i_dir[d]; int jj=cj+j_dir[d]; if(valid(ii,jj) && color[ii][jj]==c && !zone[ii][jj]){ zone[ii][jj]=z; ++zone_size[z]; q.push(PII(ii,jj)); } } } } int main() { int type; cin>>type>>m>>n; color.resize(m+2); bool problem=false; string s; getline(cin,s); // '\n' -- probably... if(s.size()>=unsigned(n)) problem=true; color[0]=string(n+2,'#'); color[m+1]=string(n+2,'#'); for(int i=1; i<=m; ++i){ if(!problem) getline(cin,s); else problem=false; color[i]="#"+s.substr(0,n)+"#"; } zone.resize(m+2,vector(n+2,0)); for(int i=1; i<=m; ++i) for(int j=1; j<=n; ++j) if(!zone[i][j]){ ++nrzones; zone[i][j]=nrzones; zone_size.push_back(1); bfs(i,j); } if(type==1){ int max=0; for(int i=1;i<(int) zone_size.size();++i) if(zone_size[i]>max) max=zone_size[i]; cout<0;--i) for(int j=n;j>0;--j) for(int d=0;d<4;++d){ char nc = color[i+i_dir[d]][j+j_dir[d]]; if(nc==color[i][j]) continue; vector nzones(5,0); int nrnz=0; for(int e=0;e<4;++e) if(nc==color[i+i_dir[e]][j+j_dir[e]]){ int cz=zone[i+i_dir[e]][j+j_dir[e]]; int k=0; while(kmax || (curr==max && !(maxi==i&&maxj==j&&maxc<=nc) )) max=curr, maxi=i, maxj=j, maxc=nc; } cout<