#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; 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; for(i = 3; i <= N; i++) { for(j = 4; j <= M; j++) { for(int x = 2; x <= 4; x++) { for(int y = 4; y <= 4; y++) { if(x != y) { if(mat[dx[x] + i][dy[x] + j] == mat[dx[y] + i][dy[y] + j] && mat[dx[y] + i][dy[y] + j] != mat[i][j]) { total = vect[freq[dx[x] + i][dy[x] + j]] + vect[freq[dx[y] +i][dy[y] + j]] + 1; } else { total = max(vect[freq[dx[x] + i][dy[x] + j]], vect[freq[dx[y] +i][dy[y] + j]]) + 1; } if(mx < total) { pozi = i; pozj = j; carac = mat[dx[x] + i][dy[x] + j] + 'a' - 1; mx = total; } } } } } } 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); } }