#include <iostream> #include <fstream> using namespace std; ifstream fin("pharm.in"); int dl[]={-1,0,1,0},dc[]={0,1,0,-1}; char a[401][401],sc; int type,n,m,vmax,nrp,ceL,ceC,cl,cc,v[401*401]; struct mat{int viz; bool viz2;} b[401][401]; struct coada{short int l,c;} co[401*401]; void lee(int l,int c,int parte) { int inc=1,sf=1,i; co[1].l=l; co[1].c=c; b[l][c].viz=parte; while(inc<=sf) { l=co[inc].l; c=co[inc].c; for(i=0;i<=3;i++) { cl=l+dl[i]; cc=c+dc[i]; if((cl>=0 && cl<n && cc>=0 && cc<m) && a[l][c]==a[cl][cc] && b[cl][cc].viz==0) { b[cl][cc].viz=parte; co[++sf].l=cl; co[sf].c=cc; } } inc++; } v[parte]=sf; if(sf>vmax) vmax=sf; } void task1() { for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(b[i][j].viz==0) lee(i,j,++nrp); cout<<vmax<<'\n'; } void fill(int l,int c) { b[l][c].viz2=true; for(int i=0;i<=3;i++) { cl=l+dl[i]; cc=c+dc[i]; if(cl+dl[i]>=0 && cl+dl[i]<n && cc+dc[i]>=0 && cc+dc[i]<m) if(a[cl][cc]!=a[l][c]) { cl=cl+dl[i]; cc=cc+dc[i]; if(a[cl][cc]==a[l][c]) { if(v[b[l][c].viz]+v[b[cl][cc].viz]>vmax) vmax=v[b[l][c].viz]+v[b[cl][cc].viz],ceL=l+dl[i],ceC=c+dc[i],sc=a[l][c]; } } if((cl>=0 && cl<n && cc>=0 && cc<m) && a[l][c]==a[cl][cc] && b[cl][cc].viz2==false) fill(cl,cc); } b[l][c].viz2=false; } void task2() { for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(b[i][j].viz==0) lee(i,j,++nrp); int k=1; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(b[i][j].viz==k) { fill(i,j); k++; } cout<<ceL<<' '<<ceC<<'\n'<<sc; } int main() { cin>>type; cin>>n>>m; cin.get(); for(int i=0;i<n;i++) cin.getline(a[i],401); if(type==1) task1(); else task2(); return 0; }