#include #include #include #define lmax 405 using namespace std; char cul,cara,ccurent,cmax; int tip,n,m,l,c,nrz,maxim,zona_c; int ap[lmax],dl[5]={0,-1,0,1,0},dc[5]={0,0,1,0,-1}; queue >q; pair poz; struct el { char car; int zona,nr; }v[5],a[lmax][lmax]; inline bool bun(int a,int b) { return a>0 && b>0 && a<=n && b<=m; } inline bool comp1(el e1,el e2) { if (e1.zona!=e2.zona) return e1.zonae1.nr; } inline bool comp2(el e1,el e2) { return e1.car<=e2.car; } inline void lee(int l,int c) { a[l][c].zona=zona_c; char caract=a[l][c].car; q.push(make_pair(l,c)); while (!q.empty()) { ap[zona_c]++; poz=q.front(); q.pop(); for (int j=1;j<=4;j++) { int lc=poz.first+dl[j]; int cc=poz.second+dc[j]; if (bun(lc,cc) && a[lc][cc].zona==0 && a[lc][cc].car==caract) { q.push(make_pair(lc,cc)); a[lc][cc].zona=zona_c; } } } } int main() { // freopen("ferma3.in","r",stdin); //freopen("ferma3.out","w",stdout); scanf("%d %d %d",&tip,&n,&m); scanf("%c",&cara); for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) scanf("%c",&a[i][j].car); scanf("%c",&cara); } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) if (a[i][j].zona==0) { zona_c++; lee(i,j); } if (tip==1) { printf("%d",zona_c); return 0; } else { for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) a[i][j].nr=ap[a[i][j].zona]; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { v[1]=a[i-1][j]; v[2]=a[i+1][j]; v[3]=a[i][j-1]; v[4]=a[i][j+1]; sort(v+1,v+5,comp1); for (int k=1;k<=4;k++) if (v[k].zona==v[k-1].zona) v[k].nr=0; sort(v+1,v+5,comp2); int ma=v[1].nr; cmax=v[1].car; for (int k=2;k<=5;k++) if (v[k].car==v[k-1].car) {nrz+=v[k].nr; } else { if (nrz>ma) { ma=nrz; cmax=ccurent; } nrz=v[k].nr; ccurent=v[k].car; } if (ma>maxim) { maxim=ma; l=i; c=j; cul=cmax; } } printf("%d %d\n%c",l,c,cul); } return 0; }