#include #include #include #define Nmax 405 #define Qmax 200005 using namespace std; int TYPE,N,M,nrt; char c[Nmax][Nmax]; int dx[5]={0, 0,1,-1}, dy[5]={1,-1,0, 0}; int used[Nmax][Nmax]; int _xx,_yy; int quant[Qmax]; int cnt; void Fill(int x,int y) { used[x][y] = nrt; cnt++; for(int i = 0; i <= 3; ++i) { _xx = x + dx[i]; _yy = y + dy[i]; if(used[_xx][_yy] != nrt && c[x][y] == c[_xx][_yy]) Fill(_xx,_yy); } } void Read() { scanf("%d",&TYPE); scanf("%d%d",&N,&M); for(int i = 0; i <= M + 1; ++i) c[0][i] = c[N+1][i] = '#'; for(int i = 1; i <= N; ++i) { scanf("%s",c[i]+1); c[i][0] = '#'; c[i][M+1] = '#'; } } int maxi = 0; void solve1() { for(int i = 1; i <= N; ++i) for(int j = 1; j <= M; ++j) if(used[i][j] == 0) { cnt = 0; ++nrt; Fill(i,j); quant[nrt] = cnt; if(cnt > maxi) maxi = cnt; } } int usd[405*405+100]; void solve2() { int _i,_j,crt,bestus = 0; int besti,bestj,nn = 0; char bestc; for(int i = 1; i <= N; ++i) for(int j = 1; j <= M; ++j) { char vechi = c[i][j]; for(char nou = 'a'; nou <= 'z'; ++nou) { ++nn; crt = 1; c[i][j] = nou; for(int ii = 0; ii <= 3; ++ii) { _i = i + dx[ii]; _j = j + dy[ii]; if(c[i][j] == c[_i][_j] && usd[used[_i][_j]] != nn) { usd[used[_i][_j]] = nn; crt += quant[used[_i][_j]]; if(vechi == c[_i][_j]) /// era tot din asta --crt; /// il scoatem pe ala gata numarat } } if(bestus < crt) { bestus = crt; bestc = c[i][j]; besti = i; bestj = j; } } c[i][j] = vechi; } printf("%d %d\n%c\n",besti,bestj,bestc); } int main() { freopen("ferma1.in","r",stdin); freopen("ferma1.out","w",stdout); Read(); solve1(); if(TYPE == 1) { printf("%d\n",maxi); return 0; } solve2(); return 0; }