#include <bits/stdc++.h>
using namespace std;
int i, j, k, l, n, m, s, an;
const int N = 1201;
const int w[4][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
int a[N][N], ans[N][N];
bool cheak(int x, int y) {
  if ((x < 1) || (x > n) || (y < 1) || (y > m)) return false;
  return true;
}
void dfs(int x, int y, int t) {
  bool ok = false;
  int X[5], Y[5], V[5];
  bool ff[6];
  memset(ff, true, sizeof(ff));
  if (t == 2) {
    for (int i = 0; i < 2; i++) {
      int x1 = x + w[i * 2][0];
      int y1 = y + w[i * 2][1];
      if (!cheak(x1, y1)) continue;
      int x2 = x + w[i * 2 + 1][0];
      int y2 = y + w[i * 2 + 1][1];
      if (!cheak(x2, y2)) continue;
      if ((a[x1][y1] == 1) && (a[x2][y2] == 1)) {
        ok = true;
        X[0] = x;
        X[1] = x1;
        X[2] = x2;
        Y[0] = y;
        Y[1] = y1;
        Y[2] = y2;
        V[0] = a[x][y];
        V[1] = a[x1][y1];
        V[2] = a[x2][y2];
        a[x1][y1] = a[x2][y2] = a[x][y] = 0;
        for (int j = 0; j < 3; j++)
          for (int k = 0; k < 4; k++) {
            int xx = X[j] + w[k][0];
            int yy = Y[j] + w[k][1];
            if (cheak(xx, yy) && (ans[xx][yy] > 0)) ff[ans[xx][yy]] = false;
          }
        int v;
        for (int j = 1; j < 5; j++)
          if (ff[j]) {
            v = j;
            break;
          }
        ans[x1][y1] = ans[x2][y2] = ans[x][y] = v;
        break;
      }
    }
  } else {
    for (int i = 0; i < 4; i++) {
      int x1 = x + w[i][0];
      int y1 = y + w[i][1];
      int x2 = x1 + w[i][0];
      int y2 = y1 + w[i][1];
      if (!cheak(x1, y1)) continue;
      if (!cheak(x2, y2)) continue;
      if ((a[x1][y1] == 2) && (a[x2][y2] == 1)) {
        ok = true;
        X[0] = x;
        X[1] = x1;
        X[2] = x2;
        Y[0] = y;
        Y[1] = y1;
        Y[2] = y2;
        V[0] = a[x][y];
        V[1] = a[x1][y1];
        V[2] = a[x2][y2];
        a[x1][y1] = a[x2][y2] = a[x][y] = 0;
        for (int j = 0; j < 3; j++)
          for (int k = 0; k < 4; k++) {
            int xx = X[j] + w[k][0];
            int yy = Y[j] + w[k][1];
            if (cheak(xx, yy) && (ans[xx][yy] > 0)) ff[ans[xx][yy]] = false;
          }
        int v;
        for (int j = 1; j < 5; j++)
          if (ff[j]) {
            v = j;
            break;
          }
        ans[x1][y1] = ans[x2][y2] = ans[x][y] = v;
        break;
      }
    }
  }
  if (!ok) {
    printf("NO");
    exit(0);
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    getchar();
    char st[N];
    scanf("%s", st + 1);
    for (int j = 1; j <= m; j++) {
      a[i][j] = 0;
      if (st[j] == 'w') a[i][j] = 1;
      if (st[j] == 'b') a[i][j] = 2;
      if (a[i][j] > 0) s++;
    }
  }
  if (s % 3 != 0) {
    printf("NO");
    return 0;
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (a[i][j] > 0) dfs(i, j, a[i][j]);
  printf("YES\n");
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++)
      if (ans[i][j])
        printf("%c", ans[i][j] + 'a' - 1);
      else
        printf(".");
    printf("\n");
  }
  return 0;
}
