#include <bits/stdc++.h>
const int mx[] = {1, 0, -1, 0};
const int my[] = {0, 1, 0, -1};
char s[1010][1010];
int g[1010][1010];
int q[10][2], qn, tot;
int n, m;
inline int move(int x, int y, int k) {
  x += mx[k];
  y += my[k];
  return x >= 0 && x < n && y >= 0 && y < m;
}
void Block(int x, int y) {
  tot++;
  s[x][y] = '?';
  q[qn][0] = x;
  q[qn++][1] = y;
  for (int i = 0; i < 4; i++)
    if (move(x, y, i)) {
      int tx = x + mx[i], ty = y + my[i];
      if (s[tx][ty] != '.') continue;
      g[tx][ty]--;
      if (tot == 1 || !g[tx][ty]) Block(tx, ty);
    }
}
int check() {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (s[i][j] == '.') {
        qn = 0;
        tot = 0;
        Block(i, j);
        if (tot < 2 || tot > 5) return 0;
        int pr = 0;
        for (int k = 0; k < qn; k++)
          for (int p = 0; p < 4; p++)
            if (move(q[k][0], q[k][1], p)) {
              char c = s[q[k][0] + mx[p]][q[k][1] + my[p]];
              if (c >= '0' && c <= '9') pr |= (1 << (c - '0'));
            }
        for (int col = 0; col < 10; col++)
          if ((pr & (1 << col)) == 0) {
            for (int k = 0; k < qn; k++) s[q[k][0]][q[k][1]] = '0' + col;
            break;
          }
      }
  return 1;
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%s", s[i]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (s[i][j] == '.') {
        g[i][j] = 0;
        for (int k = 0; k < 4; k++)
          if (move(i, j, k)) g[i][j] += (s[i + mx[k]][j + my[k]] == '.');
      }
  if (check()) {
    for (int i = 0; i < n; i++) printf("%s\n", s[i]);
  } else
    puts("-1");
  return 0;
}
