#include <bits/stdc++.h>
using namespace std;
char a[1005][1005];
int id[1005][1005][2];
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
vector<int> b[1000005];
vector<int> r[1000005];
void addedge(int x, int y) {
  b[x].push_back(y);
  r[y].push_back(x);
}
int idn;
int n, m;
bool valid(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m; }
void chk(int xx, int yy, int i, int j, int f) {
  for (int k = 0; k < 4; k++) {
    if (valid(xx + dx[k], yy + dy[k]) && a[xx + dx[k]][yy + dy[k]] == 'b' &&
        (i != xx + dx[k] || j != yy + dy[k])) {
      addedge(id[i][j][f], id[xx + dx[k]][yy + dy[k]][1 - k % 2]);
    }
  }
}
int u[1000005], ucs = 0;
int g[1000005];
vector<int> st;
vector<int> gg[1000005];
void dfs(int x) {
  u[x] = ucs;
  for (int i = 0; i < (int)b[x].size(); i++)
    if (u[b[x][i]] != ucs) dfs(b[x][i]);
  st.push_back(x);
}
void dfs2(int x, int c) {
  g[x] = c;
  u[x] = ucs;
  gg[c].push_back(x);
  for (int i = 0; i < (int)r[x].size(); i++)
    if (u[r[x][i]] != ucs) dfs2(r[x][i], c);
}
int sccn = 0;
vector<int> sccg[1000005], sccrev[1000005];
int pos[1000005][3];
int Q[1000005], qb, qe;
int use[1000005];
int sccdeg[1000005];
void chkuse(int x) {
  for (int i = 0; i < (int)gg[x].size(); i++) {
    int e = gg[x][i];
    if (use[g[id[pos[e][0]][pos[e][1]][1 - pos[e][2]]]] == 1) {
      use[x] = 0;
      return;
    }
  }
}
void findsol() {
  qb = qe = 0;
  for (int i = 1; i <= sccn; i++)
    if (sccg[i].size() == 0) {
      Q[qe++] = i;
    }
  while (qb < qe) {
    int x = Q[qb++];
    use[x] = 1;
    for (int i = 0; i < (int)sccg[x].size(); i++)
      if (!use[sccg[x][i]]) {
        use[x] = 0;
        break;
      }
    if (use[x]) chkuse(x);
    for (int i = 0; i < (int)sccrev[x].size(); i++)
      if (--sccdeg[sccrev[x][i]] == 0) Q[qe++] = sccrev[x][i];
  }
}
void scc() {
  ++ucs;
  for (int i = 1; i <= idn; i++)
    if (u[i] != ucs) dfs(i);
  ++ucs;
  while (!st.empty()) {
    if (u[st.back()] != ucs) dfs2(st.back(), ++sccn);
    st.pop_back();
  }
  for (int i = 1; i <= idn; i++)
    for (int j = 0; j < (int)b[i].size(); j++)
      if (g[i] != g[b[i][j]]) {
        sccdeg[g[i]]++;
        sccg[g[i]].push_back(g[b[i][j]]);
        sccrev[g[b[i][j]]].push_back(g[i]);
      }
}
bool test() {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (a[i][j] == 'b') {
        if (g[id[i][j][0]] == g[id[i][j][1]]) return false;
      }
  return true;
}
char grid[1005][1005];
int color[1000005];
int getcolor(int x) {
  int f[5] = {}, i = pos[x][0], j = pos[x][1];
  if (pos[x][2] == 1) {
    for (int X = -1; X <= 1; X++)
      for (int p = -2; p <= 2; p++)
        if (valid(i + X, j + p) && grid[i + X][j + p] >= 'a') {
          f[grid[i + X][j + p] - 'a' + 1] = 1;
        }
  } else {
    for (int X = -2; X <= 2; X++)
      for (int p = -1; p <= 1; p++)
        if (valid(i + X, j + p) && grid[i + X][j + p] >= 'a') {
          f[grid[i + X][j + p] - 'a' + 1] = 1;
        }
  }
  for (int w = 1; w <= 4; w++)
    if (f[w] == 0) {
      color[x] = w;
      return 1;
    }
  puts("QQ");
  return 0;
}
int main(void) {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%s", a[i]);
  int nB = 0, nW = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (a[i][j] == 'b')
        ++nB;
      else if (a[i][j] == 'w')
        ++nW;
  if (nB * 2 != nW) {
    puts("NO");
    return 0;
  }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (a[i][j] == 'b') {
        id[i][j][0] = ++idn;
        pos[idn][0] = i;
        pos[idn][1] = j;
        pos[idn][2] = 0;
        id[i][j][1] = ++idn;
        pos[idn][0] = i;
        pos[idn][1] = j;
        pos[idn][2] = 1;
      }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (a[i][j] == 'b') {
        for (int k = 0; k < 2; k++) {
          int xx = i + dx[k], yy = j + dy[k];
          int x2 = i + dx[k + 2], y2 = j + dy[k + 2];
          if (valid(xx, yy) && valid(x2, y2) && a[xx][yy] == 'w' &&
              a[x2][y2] == 'w') {
            chk(xx, yy, i, j, k);
            chk(x2, y2, i, j, k);
          } else {
            addedge(id[i][j][k], id[i][j][k ^ 1]);
          }
        }
      }
  scc();
  if (test() == false) {
    puts("NO");
    return 0;
  }
  puts("YES");
  findsol();
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) grid[i][j] = '.';
    grid[i][m] = '\0';
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      int x = id[i][j][0];
      if (use[g[x]]) {
        getcolor(x);
        char c = color[x] + 'a' - 1;
        grid[i][j] = c;
        grid[i + dx[0]][j + dy[0]] = c;
        grid[i - dx[0]][j - dy[0]] = c;
      }
      x = id[i][j][1];
      if (use[g[x]]) {
        getcolor(x);
        char c = color[x] + 'a' - 1;
        grid[i][j] = c;
        grid[i + dx[1]][j + dy[1]] = c;
        grid[i - dx[1]][j - dy[1]] = c;
      }
    }
  }
  for (int i = 0; i < n; i++) puts(grid[i]);
  return 0;
}
