WA on test 11
//author : yhy
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using Pii = pair<int, int>;
const int kMaxN = 505, kMaxM = kMaxN * kMaxN, kD[][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
int n, m, k, r, idx, cut[kMaxM], dfn[kMaxM], low[kMaxM];
vector<int> e[kMaxM];
char c[kMaxN][kMaxN];
void T(int x) {
dfn[x] = low[x] = ++idx;
int fl = 0;
for (int nxt : e[x]) {
if (!dfn[nxt]) {
T(nxt), low[x] = min(low[x], low[nxt]);
low[x] >= dfn[nxt] && (fl++, cut[x] |= (x != r || fl > 1));
} else {
low[x] = min(low[x], dfn[nxt]);
}
}
}
int G(int x, int y) {
return (x - 1) * m + y;
}
signed main() {
cin.tie(0)->ios::sync_with_stdio(0), cin >> n >> m >> k;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> c[i][j];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (c[i][j] != '#') {
for (int x = 0; x < 4; x++) {
int nx = i + kD[x][0], ny = j + kD[x][1];
nx >= 1 && ny >= 1 && nx <= n && ny <= m && c[nx][ny] != '#' && (e[G(i, j)].push_back(G(nx, ny)), 0);
}
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
c[i][j] != '#' && (r = G(i, j), T(r), 0);
}
}
for (int i = 1; i <= n; cout << '\n', i++) {
for (int j = 1; j <= m; j++) {
if (c[i][j] == '.') {
if (k && !cut[G(i, j)]) {
cout << 'X', k--;
} else {
cout << '.';
}
} else {
cout << '#';
}
}
}
return 0;
}