#include #include using namespace std; #define MAX_N 499 #define MAX_M 499 int hasColor[27], color[27], type, m, n, colors, value,maxZones; int pharm[MAX_N][MAX_M], temp[MAX_N][MAX_M], dimens[MAX_N][MAX_M], zone[MAX_N][MAX_M],zoneViz[MAX_N * MAX_N +64], zoneCNT; int dx[] = { -1, 0, 1, 0 }; int dy[] = { 0, 1, 0, -1 }; int inter(int x, int y) { return (1 <= x && x <= n && 1 <= y && y <= m); } void fill(int x, int y, int val) { int xn, yn,k; temp[x][y] = 0; for (k = 0; k < 4; k++) { xn = x + dx[k]; yn = y + dy[k]; if (inter(xn, yn) && temp[xn][yn] == val) { value++; fill(xn, yn, temp[xn][yn]); } } dimens[x][y] = value; zone[x][y] = zoneCNT; } void readData() { int i, j; char c; cin >> type; cin >> n >> m; for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { cin >> c; if (!hasColor[c - 'a']) { colors++; color[c - 'a'] = colors; pharm[i][j] = colors; hasColor[c - 'a'] = 1; } else { pharm[i][j] = color[c - 'a']; } } } } void compute() { int i, j, k, l, max = 0, x1, x2, y1, y2, cX, cY, nr; int viz[4], vecini[6], p; for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { temp[i][j] = pharm[i][j]; } } for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { if (temp[i][j]) { zoneCNT++; value = 1; fill(i, j, temp[i][j]); if (value > max) max = value; } } } if (type == 1) { cout << max; } else { for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { for (k = 0; k < 4; k++) viz[k] = 0; p = 0; for (k = 0; k < 4; k++) { x1 = i + dx[k]; y1 = j + dy[k]; if (inter(x1, y1)) { if(!viz[k]) vecini[++p] = k; if (pharm[x1][y1] != pharm[i][j]) { for (l = k + 1; l < 4; l++) { x2 = i + dx[l]; y2 = j + dy[l]; if (inter(x2, y2)) { if (zone[x1][y1] == zone[x2][y2]) { vecini[++p] = l; viz[l] = 1; } } else viz[l] = 1; } } } } for (k = 0; k < 4; k++) viz[k] = 0; for (k = 1; k < p; k++) { x1 = i + dx[vecini[k]]; y1 = j + dy[vecini[k]]; int count = dimens[x1][y1]; if (!viz[vecini[k]]) { for (l = k + 1; l <= p; l++) { if (!viz[vecini[l]]) { x2 = i + dx[vecini[l]]; y2 = j + dy[vecini[l]]; if (pharm[x2][y2] == pharm[x1][y1]) { if (zone[x2][y2] != zone[x1][y1]) { count = count + dimens[x2][y2]; } viz[vecini[l]] = 1; } } } } if (count > maxZones) { cX = i; cY = j; nr = pharm[x1][y1]; maxZones = count; } else if (count == maxZones) { if (i < cX || (i == cX && j < cY)) { cX = i; cY = j; nr = pharm[x1][y1]; } } } } } int col; for (i = 0; i < 26; i++) { if (nr == color[i]) col = i; } cout << cX << " " << cY << "\n" << (char)(col + 'a'); } } int main() { readData(); compute(); return 0; }