#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000")
using namespace std;
int matrix[1010][1010];
bool vis[1010][1010];
string str[1010];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
char s[1010];
int n, m;
queue<pair<int, int> > q;
void upd(int x, int y) {
  for (int i = x - 3; i <= x + 3; i++) {
    for (int j = y - 3; j <= y + 3; j++) {
      if (i < 0 || j < 0 || i >= n || j >= m) continue;
      if (matrix[i][j] != 1) continue;
      if (vis[i][j]) continue;
      if (str[i][j] == 'w') {
        int cnt = 0;
        for (int k = 0; k < 4; k++) {
          int nx = i + dx[k];
          int ny = j + dy[k];
          if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
          if (str[nx][ny] == 'b' && matrix[nx][ny] == 1) cnt++;
        }
        if (cnt == 1) q.push(make_pair(i, j)), vis[i][j] = true;
      }
      if (str[i][j] == 'b') {
        int cnt = 0;
        for (int k = 0; k < 4; k++) {
          int nx = i + dx[k];
          int ny = j + dy[k];
          if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
          if (str[nx][ny] == 'w' && matrix[nx][ny] == 1) cnt++;
        }
        if (cnt != 4) q.push(make_pair(i, j)), vis[i][j] = true;
      }
    }
  }
}
bool us[4];
void go(int x, int y) {
  pair<int, int> c1;
  pair<int, int> c2 = make_pair(-1, -1);
  pair<int, int> c3 = make_pair(-1, -1);
  c1 = make_pair(x, y);
  for (int i = x - 2; i <= x + 2; i++) {
    for (int j = y - 2; j <= y + 2; j++) {
      if (i >= 0 && j >= 0 && i < n && j < m && matrix[i][j] == matrix[x][y]) {
        if (i == c1.first && j == c1.second) continue;
        if (c2 == make_pair(-1, -1)) {
          c2 = make_pair(i, j);
        } else
          c3 = make_pair(i, j);
      }
    }
  }
  for (int i = 0; i < 4; i++) us[i] = false;
  for (int i = 0; i < 4; i++) {
    int nx = c1.first + dx[i];
    int ny = c1.second + dy[i];
    if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
    if (str[nx][ny] >= 'a' && str[nx][ny] <= 'd') us[str[nx][ny] - 'a'] = true;
  }
  for (int i = 0; i < 4; i++) {
    int nx = c2.first + dx[i];
    int ny = c2.second + dy[i];
    if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
    if (str[nx][ny] >= 'a' && str[nx][ny] <= 'd') us[str[nx][ny] - 'a'] = true;
  }
  for (int i = 0; i < 4; i++) {
    int nx = c3.first + dx[i];
    int ny = c3.second + dy[i];
    if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
    if (str[nx][ny] >= 'a' && str[nx][ny] <= 'd') us[str[nx][ny] - 'a'] = true;
  }
  int c = -1;
  for (int i = 0; i < 4; i++) {
    if (!us[i]) {
      c = i;
      break;
    }
  }
  if (c == -1) assert(0);
  str[c1.first][c1.second] = 'a' + c;
  str[c2.first][c2.second] = 'a' + c;
  str[c3.first][c3.second] = 'a' + c;
  matrix[c1.first][c1.second] = 0;
  matrix[c2.first][c2.second] = 0;
  matrix[c3.first][c3.second] = 0;
  for (int i = 0; i < 4; i++) {
    int nx = c1.first + dx[i];
    int ny = c1.second + dy[i];
    if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
    if (matrix[nx][ny] == 1) go(nx, ny);
  }
  for (int i = 0; i < 4; i++) {
    int nx = c2.first + dx[i];
    int ny = c2.second + dy[i];
    if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
    if (matrix[nx][ny] == 1) go(nx, ny);
  }
  for (int i = 0; i < 4; i++) {
    int nx = c3.first + dx[i];
    int ny = c3.second + dy[i];
    if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
    if (matrix[nx][ny] == 1) go(nx, ny);
  }
}
int main() {
  scanf("%d %d\n", &n, &m);
  int dom = 0;
  for (int i = 0; i < n; i++) {
    gets(s);
    str[i] = s;
    for (int j = 0; j < m; j++) {
      if (str[i][j] == 'w' || str[i][j] == 'b') matrix[i][j] = 1;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (str[i][j] == 'w') {
        int cnt = 0;
        for (int k = 0; k < 4; k++) {
          int nx = i + dx[k];
          int ny = j + dy[k];
          if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
          if (str[nx][ny] == 'b') cnt++;
        }
        if (cnt == 1) q.push(make_pair(i, j)), vis[i][j] = true;
      }
      if (str[i][j] == 'b') {
        int cnt = 0;
        for (int k = 0; k < 4; k++) {
          int nx = i + dx[k];
          int ny = j + dy[k];
          if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
          if (str[nx][ny] == 'w') cnt++;
        }
        if (cnt != 4) q.push(make_pair(i, j)), vis[i][j] = true;
      }
    }
  }
  while (!q.empty()) {
    int x = q.front().first;
    int y = q.front().second;
    q.pop();
    if (str[x][y] == 'w') {
      for (int k = 0; k < 4; k++) {
        int nx = x + dx[k];
        int ny = y + dy[k];
        if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
        if (str[nx][ny] == 'b' && matrix[nx][ny] == 1) {
          int nx2 = nx + dx[k];
          int ny2 = ny + dy[k];
          if (nx2 < 0 || ny2 < 0 || nx2 >= n || ny2 >= m) {
            continue;
          }
          if (str[nx2][ny2] != 'w') {
            continue;
          }
          if (matrix[nx2][ny2] != 1 || matrix[nx][ny] != 1 ||
              matrix[x][y] != 1) {
            continue;
          }
          matrix[x][y] = dom + 2;
          matrix[nx][ny] = dom + 2;
          matrix[nx2][ny2] = dom + 2;
          dom++;
          upd(nx, ny);
          break;
        }
      }
    }
    if (str[x][y] == 'b') {
      for (int k = 0; k < 4; k++) {
        int nx = x + dx[k];
        int ny = y + dy[k];
        if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
        if (str[nx][ny] == 'w' && matrix[nx][ny] == 1) {
          int nx2 = x - dx[k];
          int ny2 = y - dy[k];
          if (nx2 < 0 || ny2 < 0 || nx2 >= n || ny2 >= m) {
            continue;
          }
          if (str[nx2][ny2] != 'w') {
            continue;
          }
          if (matrix[nx2][ny2] != 1 || matrix[nx][ny] != 1 ||
              matrix[x][y] != 1) {
            continue;
          }
          matrix[x][y] = dom + 2;
          matrix[nx][ny] = dom + 2;
          matrix[nx2][ny2] = dom + 2;
          dom++;
          upd(x, y);
          break;
        }
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (matrix[i][j] == 1) {
        printf("NO\n");
        return 0;
      }
      if (matrix[i][j] > 1) {
        str[i][j] = 'w';
      }
    }
  }
  printf("YES\n");
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (matrix[i][j] > 1 && (str[i][j] == 'w' || str[i][j] == 'b')) {
        go(i, j);
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      printf("%c", str[i][j]);
    }
    printf("\n");
  }
  return 0;
}
