#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LIM 405 using namespace std; int ty, n, m, currS; pair mat[LIM][LIM]; // id componenta conexa din care face parte int v[LIM * LIM]; char c[LIM][LIM]; bool viz[LIM][LIM]; int d[4][2] = {{-1, 0}, {0, +1}, {+1, 0}, {0, -1}}; void dfs(int ins, int jns, int id) { viz[ins][jns] = true; mat[ins][jns] = make_pair(id, c[ins][jns]); currS++; for(int i = 0; i < 4; i++) { int ni = ins + d[i][0]; int nj = jns + d[i][1]; if(ni >= 0 && ni < n && nj >= 0 && nj < m && !viz[ni][nj] && c[ins][jns] == c[ni][nj]) { dfs(ni, nj, id); } } } void responseTo2() { int mx = -1; int idChangei = -1, idChangej = -1; char chChange = ' '; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { for(int v1 = 0; v1 < 4; v1++) { for(int v2 = 0; v2 < 4; v2++) { if(v1 != v2) { int ni1 = i + d[v1][0]; int nj1 = j + d[v1][1]; int ni2 = i + d[v2][0]; int nj2 = j + d[v2][1]; if(ni1 >= 0 && ni1 < n && ni2 >= 0 && ni2 < n && nj1 >= 0 && nj1 < m && nj2 >= 0 && nj2 < m) { int idCompConex1 = mat[ni1][nj1].first; int idCompConex2 = mat[ni2][nj2].first; char chCompConex1 = mat[ni1][nj1].second; char chCompConex2 = mat[ni2][nj2].second; int sum_between = v[idCompConex1] + v[idCompConex2] + 1; if(idCompConex1 != idCompConex2 && chCompConex1 == chCompConex2 && mx < sum_between) { idChangei = i; idChangej = j; chChange = chCompConex1; mx = sum_between; } else { int s1 = v[idCompConex1] + 1; int s2 = v[idCompConex2] + 1; bool c1 = (mx < s1) ? true : false; bool c2 = (mx < s2) ? true : false; if(c1 || c2) { idChangei = i; idChangej = j; if(s1 == s2) { chChange = min(chCompConex1, chCompConex2); mx = s1; continue; } if (c1) { chChange = chCompConex1; mx = s1; } else { chChange = chCompConex2; mx = s2; } } } } } } } } } printf("%d %d\n", idChangei + 1, idChangej + 1); printf("%c\n", chChange); } int main() { // freopen("date.in", "r", stdin); // freopen("date.out","w", stdout); scanf("%d\n", &ty); scanf("%d %d\n", &n, &m); for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { scanf("%c", &c[i][j]); } scanf("\n"); } int mx = -1; int idCC = 1; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if(!viz[i][j]) { currS = 0; dfs(i, j, idCC); v[idCC] = currS; idCC++; mx = max(mx, currS); } } } // for(int i = 0; i < n; i++) { // for(int j = 0; j < m; j++) { // cout << mat[i][j].first << " "; // << mat[i][j].second // } // cout << endl; // } if(ty == 1) { printf("%d\n", mx); } else { responseTo2(); } return 0; }