#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl "\n"
bool chk(vector<vector<bool>> &g) {
int n = g.size(), m = g[0].size();
bool flag = 1;
for (int r = 0; r < n; ++r) {
for (int c = 0; c < m; ++c) {
if (!g[r][c]) {
flag = 0;
break;
}
}
}
return flag;
}
bool solve(int i, int j, vector<vector<bool>> &g, vector<vector<int>> &ans) {
int n = g.size(), m = g[0].size();
cout << i << " " << j << endl;
for (int a = 0; a < n; ++a) {
for (int b = 0; b < m; ++b) {
cout << g[a][b];
}
cout << " ";
for (int b = 0; b < m; ++b) {
cout << ans[a][b];
}
cout << endl;
}
cout << "----" << endl;
if (i == n) {
return chk(g);
}
int nexti, nextj;
if (j+1 < m) {
nexti = i;
nextj = j+1;
} else {
nexti = i+1;
nextj = 0;
}
ans[i][j] = 1;
bool f1 = solve(nexti, nextj, g, ans);
if (f1) return 1;
ans[i][j] = 2;
if (i-1 > 0) g[i-1][j] = !g[i-1][j];
if (j-1 > 0) g[i][j-1] = !g[i][j-1];
if (i+1 < n) g[i+1][j] = !g[i+1][j];
if (j+1 < m) g[i][j+1] = !g[i][j+1];
if (chk(g)) return 1;
bool f2 = solve(nexti, nextj, g, ans);
if (f2) return 1;
ans[i][j] = 3;
g[i][j] = !g[i][j];
if (chk(g)) return 1;
bool f3 = solve(nexti, nextj, g, ans);
if (f3) return 1;
if (!f2) {
if (i-1 > 0) g[i-1][j] = !g[i-1][j];
if (j-1 > 0) g[i][j-1] = !g[i][j-1];
if (i+1 < n) g[i+1][j] = !g[i+1][j];
if (j+1 < m) g[i][j+1] = !g[i][j+1];
ans[i][j] = 2;
}
if (!f3) {
g[i][j] = !g[i][j];
ans[i][j] = 3;
}
return 0;
}
int main() {
int n, m;
cin >> n >> m;
vector<vector<bool>> g(n, vector<bool>(m));
char c;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> c;
g[i][j] = (c == 'W');
}
}
vector<vector<int>> ans(n, vector<int>(m));
bool f = solve(0, 0, g, ans);
if (!f) {
cout << -1 << endl;
} else {
cout << 1 << endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cout << ans[i][j];
}
cout << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVuZGwgIlxuIgoKYm9vbCBjaGsodmVjdG9yPHZlY3Rvcjxib29sPj4gJmcpIHsKCWludCBuID0gZy5zaXplKCksIG0gPSBnWzBdLnNpemUoKTsKCWJvb2wgZmxhZyA9IDE7Cglmb3IgKGludCByID0gMDsgciA8IG47ICsrcikgewoJCWZvciAoaW50IGMgPSAwOyBjIDwgbTsgKytjKSB7CgkJCWlmICghZ1tyXVtjXSkgewoJCQkJZmxhZyA9IDA7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCXJldHVybiBmbGFnOwp9Cgpib29sIHNvbHZlKGludCBpLCBpbnQgaiwgdmVjdG9yPHZlY3Rvcjxib29sPj4gJmcsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJmFucykgewoJaW50IG4gPSBnLnNpemUoKSwgbSA9IGdbMF0uc2l6ZSgpOwoJY291dCA8PCBpIDw8ICIgIiA8PCBqIDw8IGVuZGw7Cglmb3IgKGludCBhID0gMDsgYSA8IG47ICsrYSkgewoJCWZvciAoaW50IGIgPSAwOyBiIDwgbTsgKytiKSB7CgkJCWNvdXQgPDwgZ1thXVtiXTsKCQl9CgkJY291dCA8PCAiICI7CgkJZm9yIChpbnQgYiA9IDA7IGIgPCBtOyArK2IpIHsKCQkJY291dCA8PCBhbnNbYV1bYl07CgkJfQoJCWNvdXQgPDwgZW5kbDsKCX0KCWNvdXQgPDwgIi0tLS0iIDw8IGVuZGw7CgkKCWlmIChpID09IG4pIHsKCQlyZXR1cm4gY2hrKGcpOwoJfQoJCglpbnQgbmV4dGksIG5leHRqOwoJaWYgKGorMSA8IG0pIHsKCQluZXh0aSA9IGk7CgkJbmV4dGogPSBqKzE7Cgl9IGVsc2UgewoJCW5leHRpID0gaSsxOwoJCW5leHRqID0gMDsKCX0KCQoJYW5zW2ldW2pdID0gMTsKCWJvb2wgZjEgPSBzb2x2ZShuZXh0aSwgbmV4dGosIGcsIGFucyk7CglpZiAoZjEpIHJldHVybiAxOwoJCglhbnNbaV1bal0gPSAyOwoJaWYgKGktMSA+IDApIGdbaS0xXVtqXSA9ICFnW2ktMV1bal07CglpZiAoai0xID4gMCkgZ1tpXVtqLTFdID0gIWdbaV1bai0xXTsKCWlmIChpKzEgPCBuKSBnW2krMV1bal0gPSAhZ1tpKzFdW2pdOwoJaWYgKGorMSA8IG0pIGdbaV1baisxXSA9ICFnW2ldW2orMV07CglpZiAoY2hrKGcpKSByZXR1cm4gMTsKCWJvb2wgZjIgPSBzb2x2ZShuZXh0aSwgbmV4dGosIGcsIGFucyk7CglpZiAoZjIpIHJldHVybiAxOwoJCglhbnNbaV1bal0gPSAzOwoJZ1tpXVtqXSA9ICFnW2ldW2pdOwoJaWYgKGNoayhnKSkgcmV0dXJuIDE7Cglib29sIGYzID0gc29sdmUobmV4dGksIG5leHRqLCBnLCBhbnMpOwoJaWYgKGYzKSByZXR1cm4gMTsKCQoJaWYgKCFmMikgewoJCWlmIChpLTEgPiAwKSBnW2ktMV1bal0gPSAhZ1tpLTFdW2pdOwoJCWlmIChqLTEgPiAwKSBnW2ldW2otMV0gPSAhZ1tpXVtqLTFdOwoJCWlmIChpKzEgPCBuKSBnW2krMV1bal0gPSAhZ1tpKzFdW2pdOwoJCWlmIChqKzEgPCBtKSBnW2ldW2orMV0gPSAhZ1tpXVtqKzFdOwoJCWFuc1tpXVtqXSA9IDI7Cgl9CgkKCWlmICghZjMpIHsKCQlnW2ldW2pdID0gIWdbaV1bal07CgkJYW5zW2ldW2pdID0gMzsKCX0KCQoJcmV0dXJuIDA7Cn0KCmludCBtYWluKCkgewoJaW50IG4sIG07CgljaW4gPj4gbiA+PiBtOwoJdmVjdG9yPHZlY3Rvcjxib29sPj4gZyhuLCB2ZWN0b3I8Ym9vbD4obSkpOwoJY2hhciBjOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKCQlmb3IgKGludCBqID0gMDsgaiA8IG07ICsraikgewoJCQljaW4gPj4gYzsKCQkJZ1tpXVtqXSA9IChjID09ICdXJyk7CgkJfQoJfQoJdmVjdG9yPHZlY3RvcjxpbnQ+PiBhbnMobiwgdmVjdG9yPGludD4obSkpOwoJYm9vbCBmID0gc29sdmUoMCwgMCwgZywgYW5zKTsKCWlmICghZikgewoJCWNvdXQgPDwgLTEgPDwgZW5kbDsKCX0gZWxzZSB7CgkJY291dCA8PCAxIDw8IGVuZGw7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKCQkJZm9yIChpbnQgaiA9IDA7IGogPCBtOyArK2opIHsKCQkJCWNvdXQgPDwgYW5zW2ldW2pdOwoJCQl9CgkJCWNvdXQgPDwgZW5kbDsKCQl9Cgl9CgkKCXJldHVybiAwOwp9