#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <utility>
using namespace std;
int cost[501][501],xx,yy,n,m;
char mat[501][501];
bool visit[501][501],first = true;
int a[] = {-1,0,0,1}, b[] = {0,-1,1,0};
void check(int x,int y,int level) {
visit[x][y] = true;
cost[x][y] = level;
for(int i = 0; i < 4; ++i) {
xx = x + a[i];
yy = y + b[i];
if(0 <= xx and xx < n and 0 <= yy and yy < m and mat[xx][yy] == '.') {
if(level + 1 < cost[xx][yy] or !visit[xx][yy]) check(xx,yy,level + 1);
}
}
}
int max() {
int r = -1;
for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j) if(mat[i][j] == '.') r = max(r,cost[i][j]);
return r;
}
void show() {
if(!first) puts("---");
int r = max();
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
if(cost[i][j] == r) printf("X");
else printf("%c",mat[i][j]);
}
puts("");
}
}
int main() {
while(scanf("%d %d",&n,&m) == 2) {
queue<pair<int,int> > cola;
for(int i = 0; i < n; ++i) {
scanf("\n");
for(int j = 0; j < m; ++j) {
scanf("%c",&mat[i][j]);
if(mat[i][j] == 'V') cola.push(make_pair(i,j));
}
}
memset(cost,-1,sizeof cost);
memset(visit,0,sizeof visit);
while(!cola.empty()) {
pair<int,int> aux = cola.front();
check(aux.first, aux.second,0);
cola.pop();
}
show();
first = false;
}
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPHV0aWxpdHk+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgY29zdFs1MDFdWzUwMV0seHgseXksbixtOwpjaGFyIG1hdFs1MDFdWzUwMV07CmJvb2wgdmlzaXRbNTAxXVs1MDFdLGZpcnN0ID0gdHJ1ZTsKCmludCBhW10gPSB7LTEsMCwwLDF9LCBiW10gPSB7MCwtMSwxLDB9OwoKdm9pZCBjaGVjayhpbnQgeCxpbnQgeSxpbnQgbGV2ZWwpIHsKICB2aXNpdFt4XVt5XSA9IHRydWU7CiAgY29zdFt4XVt5XSA9IGxldmVsOwogIGZvcihpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgIHh4ID0geCArIGFbaV07CiAgICB5eSA9IHkgKyBiW2ldOwogICAgaWYoMCA8PSB4eCBhbmQgeHggPCBuIGFuZCAwIDw9IHl5IGFuZCB5eSA8IG0gYW5kIG1hdFt4eF1beXldID09ICcuJykgewogICAgICBpZihsZXZlbCArIDEgPCBjb3N0W3h4XVt5eV0gb3IgIXZpc2l0W3h4XVt5eV0pIGNoZWNrKHh4LHl5LGxldmVsICsgMSk7CiAgICB9CiAgfQp9CgppbnQgbWF4KCkgewogIGludCByID0gLTE7CiAgZm9yKGludCBpID0gMDsgaSA8IG47ICsraSkgZm9yKGludCBqID0gMDsgaiA8IG07ICsraikgaWYobWF0W2ldW2pdID09ICcuJykgciA9IG1heChyLGNvc3RbaV1bal0pOwogIHJldHVybiByOwp9Cgp2b2lkIHNob3coKSB7CiAgaWYoIWZpcnN0KSBwdXRzKCItLS0iKTsKICBpbnQgciA9IG1heCgpOwogIGZvcihpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgIGZvcihpbnQgaiA9IDA7IGogPCBtOyArK2opIHsKICAgICAgaWYoY29zdFtpXVtqXSA9PSByKSBwcmludGYoIlgiKTsKICAgICAgZWxzZSBwcmludGYoIiVjIixtYXRbaV1bal0pOwogICAgfQogICAgcHV0cygiIik7CiAgfQp9CgppbnQgbWFpbigpIHsKICB3aGlsZShzY2FuZigiJWQgJWQiLCZuLCZtKSA9PSAyKSB7CiAgICBxdWV1ZTxwYWlyPGludCxpbnQ+ID4gY29sYTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgc2NhbmYoIlxuIik7CiAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBtOyArK2opIHsKICAgICAgICBzY2FuZigiJWMiLCZtYXRbaV1bal0pOwogICAgICAgIGlmKG1hdFtpXVtqXSA9PSAnVicpIGNvbGEucHVzaChtYWtlX3BhaXIoaSxqKSk7CiAgICAgIH0KICAgIH0KICAgIG1lbXNldChjb3N0LC0xLHNpemVvZiBjb3N0KTsKICAgIG1lbXNldCh2aXNpdCwwLHNpemVvZiB2aXNpdCk7CiAgICB3aGlsZSghY29sYS5lbXB0eSgpKSB7CiAgICAgIHBhaXI8aW50LGludD4gYXV4ID0gY29sYS5mcm9udCgpOwogICAgICBjaGVjayhhdXguZmlyc3QsIGF1eC5zZWNvbmQsMCk7CiAgICAgIGNvbGEucG9wKCk7CiAgICB9CiAgICBzaG93KCk7CiAgICBmaXJzdCA9IGZhbHNlOwogIH0KICByZXR1cm4gMDsKfQo=