#include #include #include using namespace std; #define inf (1<<30) #define mm 405 int harta[mm][mm]; int seen[mm][mm]; int sz[mm][mm]; int d[160001], n, m, t; int bi=0,bj=0,bc=0,bs=0; queue< pair > q; int dx [4] = {1, 0, -1, 0}; int dy [4] = {0, 1, 0, -1}; set::iterator it; int verific(int x, int y) { if (x <= 0 || y <= 0 || x > n || y > m) return 0; return 1; } void BFS(int i, int j, int index) { q.push(make_pair(i,j)); sz[i][j] = index; d[index] = 0; while(!q.empty()) { int x = q.front().first; int y = q.front().second; q.pop(); for(int i = 0; i<4; i++) { int cx = x + dx[i]; int cy = y + dy[i]; if(!seen[cx][cy] and harta[cx][cy] == harta[x][y] and verific(cx,cy)) { seen[cx][cy] = 1; sz[cx][cy] = index; d[index]++; q.push(make_pair(cx,cy)); } } } if (!d[index]) d[index]++; } int main() { cin >> t >> n >> m; for(int i = 1; i<=n; i++) for(int j = 1; j<=m; j++) { char c; cin >> c; harta[i][j] = (c - 'a') + 1; } int cnt = 0; for(int i = 1; i<=n; i++) for(int j = 1; j<=m; j++) if(!seen[i][j]) { cnt++; BFS(i,j,cnt); } if (t == 1) { int best = 0; for(int i = 1; i<=cnt; i++) best = max(best,d[i]); cout< s; set culori; vector< pair > poz; for(int ii = 0; ii < 4; ii++) { int x,y; x = i + dx[ii]; y = j + dy[ii]; if(verific(x,y)) { if (s.find(sz[x][y]) == s.end()) { culori.insert(harta[x][y]); poz.push_back(make_pair(x,y)); s.insert(sz[x][y]); } } } for(it = culori.begin(); it != culori.end(); it++) { int best_l = 0; if (*it != harta[i][j]) best_l++; for(int k = 0; k < poz.size(); k++) if (harta[poz[k].first][poz[k].second] == *it) best_l += d[sz[poz[k].first][poz[k].second]]; if (best_l > bs) { bs = best_l; bi = i; bj = j; bc = *it; } } } char c = 'a'; bc--; while(bc) c++, bc--; cout<