#include <bits/stdc++.h>
const int maxn = 1000;
int n, m, a[maxn + 10][maxn + 10], tmp[maxn + 10][maxn + 10];
void printans() {
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) printf("%d", tmp[i][j]);
    printf("\n");
  }
  exit(0);
}
bool checkline(int p, int co1, int co2) {
  int now = co1;
  for (int i = 1; i <= m; ++i) {
    tmp[p][i] = now;
    if (a[p][i] && tmp[p][i] != a[p][i]) return 0;
    if (now == co1)
      now = co2;
    else
      now = co1;
  }
  return 1;
}
bool checkrow(int p, int co1, int co2) {
  int now = co1;
  for (int i = 1; i <= n; ++i) {
    tmp[i][p] = now;
    if (a[i][p] && tmp[i][p] != a[i][p]) return 0;
    if (now == co1)
      now = co2;
    else
      now = co1;
  }
  return 1;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j) {
      char c = getchar();
      for (; !isgraph(c); c = getchar())
        ;
      a[i][j] = c - '0';
    }
  for (int i = 1; i <= 4; ++i)
    for (int j = 1; j <= 4; ++j)
      for (int k = 1; k <= 4; ++k)
        for (int l = 1; l <= 4; ++l)
          if (i != j && i != k && i != l && j != k && j != l && k != l) {
            bool suc = 1;
            for (int p = 1; p <= n; ++p)
              if (p % 2) {
                if (!checkline(p, i, j) && !checkline(p, j, i)) {
                  suc = 0;
                  break;
                }
              } else if (!checkline(p, k, l) && !checkline(p, l, k)) {
                suc = 0;
                break;
              }
            if (suc) printans();
            suc = 1;
            for (int p = 1; p <= m; ++p)
              if (p % 2) {
                if (!checkrow(p, i, j) && !checkrow(p, j, i)) {
                  suc = 0;
                  break;
                }
              } else if (!checkrow(p, k, l) && !checkrow(p, l, k)) {
                suc = 0;
                break;
              }
            if (suc) printans();
          }
  printf("0");
  return 0;
}
