#include #include #include using namespace std; #define DIM 402 int mat[DIM][DIM], freq[DIM][DIM], nr_casute, type, mx, N, M, p, i, j, total, vect[DIM * DIM]; char carac; int dx[] = {0, -1, 0, 1, 0}; int dy[] = {0, 0, 1, 0, -1}; int pozi, pozj; int prr[DIM * DIM + 1]; int prrr = 0; void myfill(int i, int j, int &nr_casute); void second_fill(int i, int j, int &nr_casute); int main() { #ifndef ONLINE_JUDGE freopen("input.txt","r",stdin); #endif // ONLINE_JUDGE cin >> type; cin >> N >> M; for(i = 1; i <= N; i++) { for(j = 1; j <= M; j++) { cin >> carac; mat[i][j] = carac - 'a' + 1; } } if(type == 1) { for(i = 1; i <= N; i++) { for(j = 1; j <= M; j++) { if(freq[i][j] == 0) { nr_casute = 0; myfill(i, j, nr_casute); mx = max(nr_casute, mx); } } } cout << mx << '\n'; } else { p = 1; for(i = 1; i <= N; i++) { for(j = 1; j <= M; j++) { if(freq[i][j] == 0) { nr_casute = 0; second_fill(i, j, nr_casute); vect[p] = nr_casute; ++p; } } } mx = 0; prrr = 1; for(i = 1; i <= N; i++) { for(j = 1; j <= M; j++) { for(int x = 1; x <= 26;x++) { total = 1; for(int y = 1; y <= 4; y++) { if(mat[dx[y] + i][dy[y] + j] == x && mat[i][j] != x && prr[freq[dx[y] + i][dy[y] + j]] < prrr) { total += vect[freq[dx[y] + i][dy[y] + j]]; prr[freq[dx[y] + i][dy[y] + j]] = prrr; } } if(total > mx) { mx = total; pozi = i; pozj = j; carac = x + 'a' - 1; } prrr++; } } } cout << pozi << ' ' << pozj << '\n' << carac ; } return 0; } void myfill(int i, int j, int &nr_casute) { nr_casute++; freq[i][j] = 1; if(i > 1 && mat[i - 1][j] == mat[i][j] && freq[i - 1][j] == 0) { myfill(i - 1, j, nr_casute); } if(i < N && mat[i + 1][j] == mat[i][j] && freq[i + 1][j] == 0) { myfill(i + 1, j, nr_casute); } if(j > 1 && mat[i][j - 1] == mat[i][j] && freq[i][j - 1] == 0) { myfill(i, j - 1, nr_casute); } if(j < M && mat[i][j + 1] == mat[i][j] && freq[i][j + 1] == 0) { myfill(i, j + 1, nr_casute); } } void second_fill(int i, int j, int &nr_casute) { nr_casute++; freq[i][j] = p; if(i > 1 && mat[i - 1][j] == mat[i][j] && freq[i - 1][j] == 0) { second_fill(i - 1, j, nr_casute); } if(i < N && mat[i + 1][j] == mat[i][j] && freq[i + 1][j] == 0) { second_fill(i + 1, j, nr_casute); } if(j > 1 && mat[i][j - 1] == mat[i][j] && freq[i][j - 1] == 0) { second_fill(i, j - 1, nr_casute); } if(j < M && mat[i][j + 1] == mat[i][j] && freq[i][j + 1] == 0) { second_fill(i, j + 1, nr_casute); } }