#include #include char a[400][401]; unsigned long int groups[400][400], gvector[160000]; int n, m, is, js, seen[400][400]; unsigned long int max = 0, l = 0, g = 0; char cs; void Init() { int i, j; for (i = 0; i < n; i++) for (j = 0; j < m; j++) seen[i][j] = 0; } void Lee(int x, int y) { char c = a[x][y]; l++; seen[x][y] = 1; groups[x][y] = g; if (x - 1 >= 0) if ((!seen[x-1][y]) && (c == a[x-1][y])) Lee(x-1, y); if (x + 1 < n) if ((!seen[x+1][y]) && (c == a[x+1][y])) Lee(x+1,y); if (y-1 >= 0) if ((!seen[x][y-1]) && (c == a[x][y-1])) Lee(x,y-1); if (y+1 < m) if ((!seen[x][y+1]) && (c == a[x][y+1])) Lee(x,y+1); } void Check(int x, int y) { if (x - 1 >= 0) { if ((gvector[groups[x-1][y]] + 1 > max) && (groups[x-1][y] != groups[x][y])) { is = x; js = y; cs = a[x-1][y]; max++; } else if ((gvector[groups[x-1][y]] + 1 == max) && (groups[x-1][y] != groups[x][y]) && (cs > a[x-1][y])) { is = x; js = y; cs = a[x-1][y]; } } if (x + 1 < n) { if ((gvector[groups[x+1][y]] + 1 > max) && (groups[x+1][y] != groups[x][y])) { is = x; js = y; cs = a[x+1][y]; max++; } else if ((gvector[groups[x+1][y]] + 1 == max) && (groups[x+1][y] != groups[x][y]) && (cs > a[x+1][y])) { is = x; js = y; cs = a[x+1][y]; } } if (y - 1 >= 0) { if ((gvector[groups[x][y-1]] + 1 > max) && (groups[x][y-1] != groups[x][y])) { is = x; js = y; cs = a[x][y-1]; max++; } else if ((gvector[groups[x][y-1]] + 1 == max) && (groups[x][y-1] != groups[x][y]) && (cs > a[x][y-1])) { is = x; js = y; cs = a[x][y-1]; } } if (y + 1 < m) { if ((gvector[groups[x][y+1]] + 1 > max) && (groups[x][y+1] != groups[x][y])) { is = x; js = y; cs = a[x][y+1]; max++; } else if ((gvector[groups[x][y+1]] + 1 == max) && (groups[x][y+1] != groups[x][y]) && (cs > a[x][y+1])) { is = x; js = y; cs = a[x][y+1]; } } if (x - 1 >= 0) { if (y - 1 >= 0) if ((groups[x-1][y] != groups[x][y-1]) && (a[x-1][y] == a[x][y-1]) && (groups[x-1][y] != groups[x][y]) && (groups[x][y] != groups[x][y-1])) { if (gvector[groups[x-1][y]] + gvector[groups[x][y-1]] + 1 > max) { is = x; js = y; cs = a[x-1][y]; max = gvector[groups[x-1][y]] + gvector[groups[x][y-1]] + 1; } else if ((gvector[groups[x-1][y]] + gvector[groups[x][y-1]] + 1 == max) && (cs > a[x-1][y])) { is = x; js = y; cs = a[x-1][y]; } } if (x + 1 < n) if ((groups[x-1][y] != groups[x+1][y]) && (a[x-1][y] == a[x+1][y]) && (groups[x-1][y] != groups[x][y]) && (groups[x][y] != groups[x+1][y])) { if (gvector[groups[x-1][y]] + gvector[groups[x+1][y]] + 1 > max) { is = x; js = y; cs = a[x-1][y]; max = gvector[groups[x-1][y]] + gvector[groups[x+1][y]] + 1; } else if ((gvector[groups[x-1][y]] + gvector[groups[x+1][y]] + 1 == max) && (cs > a[x-1][y])) { is = x; js = y; cs = a[x-1][y]; } } if (y+1 < m) if ((groups[x-1][y] != groups[x][y+1]) && (a[x-1][y] == a[x][y+1]) && (groups[x-1][y] != groups[x][y]) && (groups[x][y] != groups[x][y+1])) { if (gvector[groups[x-1][y]] + gvector[groups[x][y+1]] + 1 > max) { is = x; js = y; cs = a[x-1][y]; max = gvector[groups[x-1][y]] + gvector[groups[x][y+1]] + 1; } else if ((gvector[groups[x-1][y]] + gvector[groups[x][y+1]] + 1 == max) && (cs > a[x-1][y])) { is = x; js = y; cs = a[x-1][y]; } } } if (y - 1 >= 0) { if (x + 1 < n) if ((groups[x][y-1] != groups[x+1][y]) && (a[x][y-1] == a[x+1][y]) && (groups[x+1][y] != groups[x][y]) && (groups[x][y-1] != groups[x][y])) { if (gvector[groups[x][y-1]] + gvector[groups[x+1][y]] + 1 > max) { is = x; js = y; cs = a[x][y-1]; max = gvector[groups[x][y-1]] + gvector[groups[x+1][y]] + 1; } else if ((gvector[groups[x][y-1]] + gvector[groups[x+1][y]] + 1 == max) && (cs > a[x][y-1])) { is = x; js = y; cs = a[x][y-1]; } } if (y+1 < m) if ((groups[x][y-1] != groups[x][y+1]) && (a[x][y-1] == a[x][y+1]) && (groups[x][y-1] != groups[x][y]) && (groups[x][y+1] != groups[x][y])) { if (gvector[groups[x][y-1]] + gvector[groups[x][y+1]] + 1 > max) { is = x; js = y; cs = a[x][y-1]; max = gvector[groups[x][y-1]] + gvector[groups[x][y+1]] + 1; } else if ((gvector[groups[x][y-1]] + gvector[groups[x][y+1]] + 1 == max) && (cs > a[x][y-1])) { is = x; js = y; cs = a[x][y-1]; } } } if (x + 1 < n) if (y + 1 < m) if ((groups[x+1][y] != groups[x][y+1]) && (a[x+1][y] == a[x][y+1]) && (groups[x+1][y] != groups[x][y]) && (groups[x][y+1] != groups[x][y])) { if (gvector[groups[x+1][y]] + gvector[groups[x][y+1]] + 1 > max) { is = x; js = y; cs = a[x+1][y]; max = gvector[groups[x+1][y]] + gvector[groups[x][y+1]] + 1; } else if ((gvector[groups[x+1][y]] + gvector[groups[x][y+1]] + 1 == max) && (cs > a[x+1][y])) { is = x; js = y; cs = a[x+1][y]; } } } int main() { int i, j, type; scanf("%d%d%d", &type, &n, &m); gets(a[0]); for (i = 0; i < n; i++) gets(a[i]); Init(); for (i = 0; i < n; i++) for (j = 0; j < m; j++) if (!seen[i][j]) { l = 0; g++; Lee(i, j); gvector[g] = l; if (l > max) max = l; } if (type == 1) printf("%lu", max); if (type == 2) { for (i = 0; i < n; i++) for (j = 0; j < m; j++) Check(i, j); printf("%d %d\n%c", is+1, js+1, cs); } return 0; }