#include using namespace std; #define MAXN 405 int di[] = { 1, 0, -1, 0 }; int dj[] = { 0, 1, 0, -1 }; int T, N, M; string A[MAXN]; int P[MAXN * MAXN]; int sz[MAXN * MAXN]; int root(int t) { if (P[t] == t) { return t; } return P[t] = root(P[t]); } void unite(int a, int b) { if (rand() & 1) { P[a] = b; sz[b] += sz[a]; } else { P[b] = a; sz[a] += sz[b]; } } int main() { // freopen("date.in", "r", stdin); // freopen("date.out","w", stdout); cin.sync_with_stdio(false); srand(time(0)); cin >> T; cin >> N >> M; for (int i = 0; i < N; i++) { cin >> A[i]; } for (int i = 0; i < N * M; i++) { P[i] = i; sz[i] = 1; } for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { for (int d = 0; d < 4; d++) { int ni = i + di[d]; int nj = j + dj[d]; if (ni >= 0 && ni < N && nj >= 0 && nj < M && A[i][j] == A[ni][nj]) { int r1 = root(i * M + j); int r2 = root(ni * M + nj); if (r1 != r2) { unite(r1, r2); } } } } } if (T == 1) { int ans = 0; for (int i = 0; i < N * M; i++) { if (P[i] == i) { ans = max(ans, sz[i]); } } cout << ans << endl; } else { int ans = 0; int pi = -1; int pj = -1; char cmax = -1; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { int id = i * M + j; for (int d1 = 0; d1 < 4; d1++) { int ni1 = i + di[d1]; int nj1 = j + dj[d1]; if (ni1 >= 0 && ni1 < N && nj1 >= 0 && nj1 < M && A[i][j] != A[ni1][nj1]) { int id1 = ni1 * M + nj1; int r1 = root(id1); if (sz[r1] + 1 > ans) { ans = sz[r1] + 1; pi = i; pj = j; cmax = A[ni1][nj1]; } for (int d2 = 0; d2 < 4; d2++) { int ni2 = i + di[d2]; int nj2 = j + dj[d2]; if (d2 != d1 && ni2 >= 0 && ni2 < N && nj2 >= 0 && nj2 < M && A[i][j] != A[ni2][nj2] && A[ni1][nj1] == A[ni2][nj2]) { int id2 = ni2 * M + nj2; int r2 = root(id2); if (r2 != r1) { if (sz[r1] + sz[r2] + 1 > ans) { ans = sz[r1] + sz[r2] + 1; pi = i; pj = j; cmax = A[ni1][nj1]; } } } } } } } } cout << pi + 1 << ' ' << pj + 1 << '\n'; cout << cmax << '\n'; } return 0; }