#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]; } } set C[26]; 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++) { for (int k = 0; k < 26; k++) { C[k].clear(); } 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 id = ni * M + nj; int r = root(id); int c = A[ni][nj] - 'a'; C[c].insert(r); } } for (int k = 0; k < 26; k++) { int sum = 1; for (set :: iterator it = C[k].begin(); it != C[k].end(); it++) { sum += sz[*it]; } if (sum > 1 && sum > ans) { ans = sum; pi = i; pj = j; cmax = 'a' + k; } } } } cout << pi + 1 << ' ' << pj + 1 << '\n'; cout << cmax << '\n'; } return 0; }