#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1111;
int n, m;
char tmp[MAXN];
int g[MAXN][MAXN];
int ans[MAXN][MAXN];
bool check() {
  int i, j, del;
  int pos[5];
  vector<int> c[2];
  fill(pos, pos + 5, -1);
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      if (g[i][j]) {
        if (pos[g[i][j]] != -1) {
          if (pos[g[i][j]] != i % 2) return false;
        } else {
          pos[g[i][j]] = i % 2;
        }
      }
    }
  }
  for (i = 1; i < 5; i++) {
    if (pos[i] != -1) {
      c[pos[i]].push_back(i);
    }
  }
  if (c[0].size() > 2 || c[1].size() > 2) return false;
  for (i = 1; i < 5; i++) {
    if (pos[i] == -1) {
      if (c[0].size() < 2) {
        c[0].push_back(i);
      } else {
        c[1].push_back(i);
      }
    }
  }
  for (i = 0; i < n; i++) {
    del = 0;
    for (j = 0; j < m; j++) {
      if (g[i][j] != 0 && g[i][j] != c[i % 2][j % 2]) {
        del = 1;
        break;
      }
    }
    for (j = 0; j < m; j++) {
      if (g[i][j] != 0 && g[i][j] != c[i % 2][(j + del) % 2]) {
        return false;
      }
      ans[i][j] = c[i % 2][(j + del) % 2];
    }
  }
  return true;
}
int main() {
  int i, j;
  scanf("%d%d", &n, &m);
  for (i = 0; i < n; i++) {
    scanf("%s", tmp);
    for (j = 0; j < m; j++) {
      g[i][j] = tmp[j] - '0';
    }
  }
  if (!check()) {
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        ans[j][i] = g[i][j];
      }
    }
    n ^= m ^= n ^= m;
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        g[i][j] = ans[i][j];
      }
    }
    if (!check()) {
      printf("0");
      return 0;
    }
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        g[j][i] = ans[i][j];
      }
    }
    n ^= m ^= n ^= m;
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        ans[i][j] = g[i][j];
      }
    }
  }
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      printf("%d", ans[i][j]);
    }
    printf("\n");
  }
  return 0;
}
