#include #include using namespace std; ifstream fin("ferma.in"); ofstream fout("ferma.out"); const int Dx[] = {-1, 0, 0, 1}; const int Dy[] = {0, -1, 1, 0}; char A[405][405], snul[11], solc; int N, M, q; int maxim, solx, soly; int nr, marime; int B[405][405]; struct zone { char cul; int mar; }; zone V[160800]; void fill(int i, int j) { ++marime; B[i][j] = nr; for (int k = 0; k < 4; ++k) { int ii = i + Dx[k]; int jj = j + Dy[k]; if ((ii > N || ii < 1) || (jj > M || jj < 1)) continue; if (A[ii][jj] == A[i][j] && !B[ii][jj]) fill(ii, jj); } } void check(int i, int j) { if (V[B[i - 1][j]].cul == V[B[i + 1][j]].cul && (V[B[i - 1][j]].mar + V[B[i + 1][j]].mar > maxim) && V[B[i][j]].cul != V[B[i - 1][j]].cul) { solx = i; soly = j; solc = V[B[i - 1][j]].cul; maxim = V[B[i - 1][j]].mar + V[B[i + 1][j]].mar; } if (V[B[i][j + 1]].cul == V[B[i][j - 1]].cul && (V[B[i][j + 1]].mar + V[B[i][j - 1]].mar > maxim) && V[B[i][j]].cul != V[B[i][j + 1]].cul) { solx = i; soly = j; solc = V[B[i][j + 1]].cul; maxim = V[B[i][j + 1]].mar + V[B[i][j - 1]].mar; } } int main() { fin >> q; fin >> N >> M; fin.getline(snul, 11); for (int i = 1; i <= N; ++i) fin.getline(A[i] + 1, M + 5); for (int i = 1; i <= N; ++i) for (int j = 1; j <= M; ++j) if (!B[i][j]) { ++nr; marime = 0; fill(i, j); V[nr].cul = A[i][j]; V[nr].mar = marime; } maxim = 0; if (q == 1) { for (int i = 1; i <= nr; ++i) maxim = max(maxim, V[i].mar); fout << maxim << '\n'; } else { for (int i = 2; i <= N - 1; ++i) for (int j = 2; j <= M - 1; ++j) { check(i, j); } fout << solx << ' ' << soly << '\n'; fout << solc << '\n'; } return 0; }