#include <bits/stdc++.h>
using namespace std;
const int dy[] = {-1, 0, 1, 0}, dx[] = {0, -1, 0, 1};
int h, w;
string in[1000];
void put(int y1, int x1, int y2, int x2) {
  bool use[10] = {};
  for (int d = 0; d < 4; d++) {
    int y = y1 + dy[d], x = x1 + dx[d];
    if (y < 0 || x < 0 || y >= h || x >= w || !isdigit(in[y][x])) continue;
    use[in[y][x] - '0'] = 1;
  }
  for (int d = 0; d < 4; d++) {
    int y = y2 + dy[d], x = x2 + dx[d];
    if (y < 0 || x < 0 || y >= h || x >= w || !isdigit(in[y][x])) continue;
    use[in[y][x] - '0'] = 1;
  }
  for (int i = 0; i < 10; i++)
    if (!use[(y1 + x1 * 3 + i) % 10]) {
      in[y1][x1] = in[y2][x2] = '0' + (y1 + x1 * 3 + i) % 10;
      break;
    }
}
int get(int y, int x, int c, bool paint) {
  if (paint)
    in[y][x] = '0' + c;
  else
    in[y][x] = '-';
  for (int d = 0; d < 4; d++) {
    int ny = y + dy[d], nx = x + dx[d];
    if (ny < 0 || nx < 0 || ny >= h || nx >= w) continue;
    if (!paint && isdigit(in[ny][nx])) c = in[ny][nx] - '0';
    if (paint && in[ny][nx] == '-' || !paint && in[ny][nx] == '.')
      get(ny, nx, c, paint);
  }
  return c;
}
void run() {
  cin >> h >> w;
  for (int i = 0; i < h; i++) cin >> in[i];
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++) {
      if (j < w - 1 && in[i][j] == '.' && in[i][j + 1] == '.')
        put(i, j, i, j + 1);
      if (i < h - 1 && in[i][j] == '.' && in[i + 1][j] == '.')
        put(i, j, i + 1, j);
    }
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++)
      if (in[i][j] == '.') {
        int c = get(i, j, -1, 0);
        if (c < 0) {
          cout << -1 << endl;
          return;
        }
        get(i, j, c, 1);
      }
  for (int i = 0; i < h; i++) cout << in[i] << endl;
}
int main() {
  run();
  return 0;
}
