#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize ("O3","unroll-loops")
#pragma GCC target("avx2")
#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second
const int maxn = 200;
int n, m;
char table[1 + maxn][1 + maxn];
vector<pair<pii, int> > graph[1 + maxn][1 + maxn];
pair<pii, int> pr[1 + maxn][1 + maxn];
bool vis[1 + maxn][1 + maxn];
int edge_cnt;
bool in_matching[1 + maxn * maxn];
bool dfs(pii cur) {
if(vis[cur.fi][cur.se]) {
return false;
}
vis[cur.fi][cur.se] = true;
for(pair<pii, int> nei : graph[cur.fi][cur.se]) {
if(pr[nei.fi.fi][nei.fi.se].se == 0 || dfs(pr[nei.fi.fi][nei.fi.se].fi)) {
pr[nei.fi.fi][nei.fi.se] = mp(cur, nei.se);
return true;
}
}
return false;
}
void solve() {
cin >> n >> m;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
cin >> table[i][j];
if(table[i][j] == '.') {
continue;
}
pii a, b;
if(table[i][j] == '/') {
a = mp(i - 1, j);
b = mp(i, j - 1);
}
if(table[i][j] == '\\') {
a = mp(i - 1, j - 1);
b = mp(i, j);
}
edge_cnt++;
if(a.fi % 2 == 1) {
swap(a, b);
}
graph[a.fi][a.se].pb(mp(b, edge_cnt));
}
}
for(int i = 1; i <= n; i += 2) {
for(int j = 0; j <= m; j++) {
pr[i][j] = mp(mp(-1, -1), 0);
}
}
int matching_size = 0;
for(int i = 0; i <= n; i += 2) {
for(int j = 0; j <= m; j++) {
for(int i2 = 0; i2 <= n; i2 += 2) {
for(int j2 = 0; j2 <= m; j2++) {
vis[i2][j2] = false;
}
}
if(dfs(mp(i, j))) {
matching_size++;
}
}
}
cout << matching_size << "\n";
for(int i = 1; i <= n; i += 2) {
for(int j = 0; j <= m; j++) {
int idx = pr[i][j].se;
if(idx != 0) {
in_matching[idx] = true;
}
}
}
int cur_edge = 0;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if(table[i][j] == '.') {
cout << '.';
} else {
cur_edge++;
if(in_matching[cur_edge]) {
cout << table[i][j];
} else {
cout << '.';
}
}
}
cout << "\n";
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
while(T--) {
solve();
}
}