#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void amin(T &x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
inline void amax(T &x, U y) {
  if (x < y) x = y;
}
template <typename T, size_t WW>
void rotate_left_square(T a[][WW], int n) {
  int n1 = n / 2, n2 = n - n1;
  for (int(j) = 0; (j) < (int)(n1); ++(j))
    for (int(i) = 0; (i) < (int)(n2); ++(i)) {
      T t = a[i][n - 1 - j];
      a[i][n - 1 - j] = a[n - 1 - j][n - 1 - i];
      a[n - 1 - j][n - 1 - i] = a[n - 1 - i][j];
      a[n - 1 - i][j] = a[j][i];
      a[j][i] = t;
    }
}
template <typename T, size_t WW>
void rotate_left(T a[][WW], int H, int W) {
  rotate_left_square(a, max(H, W));
  int pad = max(0, H - W);
  if (pad > 0) {
    for (int i = 0; i < W; i++) memcpy(a[i], a[i + pad], H * sizeof(**a));
  }
}
char s[1000][1001], ans[1000][1001];
bool dp[1001][4][4];
char dpprev[1001][4][4];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int(i) = 0; (i) < (int)(n); ++(i)) scanf("%s", s[i]);
  for (int(rot) = 0; (rot) < (int)(2); ++(rot)) {
    memset(dp, 0, sizeof(dp));
    dp[0][0][0] = true;
    for (int(j) = 0; (j) < (int)(m); ++(j)) {
      char cs[2] = {'0', '0'};
      bool ok = true;
      for (int(i) = 0; (i) < (int)(n); ++(i)) {
        char c = s[i][j];
        if (c == '0') continue;
        if (cs[i % 2] != '0' && cs[i % 2] != c) {
          ok = false;
        }
        cs[i % 2] = c;
      }
      if (!ok) break;
      for (int(c1) = 0; (c1) < (int)(4); ++(c1))
        for (int(c2) = 0; (c2) < (int)(4); ++(c2))
          if (dp[j][c1][c2]) {
            for (int(c3) = 0; (c3) < (int)(4); ++(c3))
              if ((cs[0] == '0' || cs[0] - '1' == c3) &&
                  (j == 0 || (c3 != c1 && c3 != c2)))
                for (int(c4) = 0; (c4) < (int)(4); ++(c4))
                  if ((cs[1] == '0' || cs[1] - '1' == c4) && c3 != c4 &&
                      (j == 0 || (c4 != c1 && c4 != c2))) {
                    dp[j + 1][c3][c4] = true;
                    dpprev[j + 1][c3][c4] = c1 | c2 << 2;
                  }
          }
    }
    for (int(c1) = 0; (c1) < (int)(4); ++(c1))
      for (int(c2) = 0; (c2) < (int)(4); ++(c2))
        if (dp[m][c1][c2]) {
          int x = c1, y = c2;
          for (int j = m - 1; j >= 0; j--) {
            for (int(i) = 0; (i) < (int)(n); ++(i))
              ans[i][j] = '1' + (i % 2 == 0 ? x : y);
            int t = dpprev[j + 1][x][y];
            x = t & 3, y = t >> 2;
          }
          if (rot == 1) {
            for (int(roti) = 0; (roti) < (int)(3); ++(roti)) {
              rotate_left(ans, n, m);
              swap(n, m);
            }
          }
          for (int(i) = 0; (i) < (int)(n); ++(i)) ans[i][m] = 0;
          for (int(i) = 0; (i) < (int)(n); ++(i)) puts(ans[i]);
          return 0;
        }
    rotate_left(s, n, m);
    swap(n, m);
  }
  puts("0");
  return 0;
}
