#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef long long int ll; //#include using namespace std; ll gcd(ll a, ll b) { if (a < b)swap(a, b); if (b == 0)return a; return gcd(b, a % b); } int lcm(int a, int b) { return a * b / gcd(a, b); } int main() { int Q; Q = 1; //cin >> Q; while (Q--) { int n,m; cin >> n >> m; vectorp(n); vector>f(n, vector(m)); for (int i = 0; i < n; i++)cin >> p[i]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (p[i][j] == '.')continue; char c = p[i][j]; queue>s; queue < pair>t; s.push({ i ,j }); t.push({ i ,j }); f[i][j] = 1; while (t.size()) { int x = t.front().first; int y = t.front().second; t.pop(); if (x < n - 1 && p[x + 1][y] == c && !f[x + 1][y]) { t.push({ x + 1,y }); s.push({ x + 1,y }); f[x + 1][y] = 1; } if (x >0 && p[x - 1][y] == c && !f[x - 1][y]) { t.push({ x - 1,y }); s.push({ x - 1,y }); f[x - 1][y] = 1; } if (y < m - 1 && p[x ][y+1] == c && !f[x][y+1]) { t.push({ x ,y+1 }); s.push({ x ,y+1 }); f[x][y + 1] = 1; } if (y >0 && p[x][y - 1] == c && !f[x][y - 1]) { t.push({ x ,y - 1 }); s.push({ x ,y - 1 }); f[x][y - 1] = 1; } } if (s.size() > 3) { while (s.size()) { p[s.front().first][s.front().second] = '.'; s.pop(); } } } } for (int i = 0; i < n; i++)cout << p[i] << endl; } return 0; }