#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000000")
using namespace std;
const long long int INF = 1e18 + 1;
char vi[1001][1001];
int go[1001][1001];
int ans[1001][1001];
int n, m;
bool pgor(int a[]) {
  int dif[4] = {0, 0, 0, 0};
  for (int i = 0; i < (4); i++) {
    dif[a[i]]++;
    if (dif[a[i]] == 2) return false;
  }
  for (int i = 0; i < (n); i++)
    for (int y1 = 0; y1 < (2); y1++) {
      bool flag = false;
      for (int j = 0; j < (m); j++) {
        int with;
        if ((i & 1) && (j & 1)) with = a[3 - y1];
        if ((i & 1) && !(j & 1)) with = a[2 + y1];
        if (!(i & 1) && !(j & 1)) with = a[y1];
        if (!(i & 1) && (j & 1)) with = a[1 - y1];
        if (go[i][j] != -1 && go[i][j] != with) {
          flag = true;
          break;
        }
        ans[i][j] = with;
      }
      if (flag && y1) return false;
      if (!flag) break;
    }
  return true;
}
int temp[1001][1001];
void rev(bool mode) {
  for (int i = 0; i < (n); i++)
    for (int j = 0; j < (m); j++) {
      temp[j][i] = (!mode ? go[i][j] : ans[i][j]);
    }
  swap(n, m);
  memcpy(!mode ? go : ans, temp, sizeof temp);
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < (n); i++) {
    scanf("%s", &vi[i]);
    for (int j = 0; j < (m); j++) {
      go[i][j] = (vi[i][j] - '0') - 1;
    }
  }
  int a[4];
  for (int r = 0; r < (2); r++) {
    for (int i = 0; i < (4); i++)
      for (int j = 0; j < (4); j++)
        for (int k = 0; k < (4); k++)
          for (int d = 0; d < (4); d++) {
            a[0] = i;
            a[1] = j;
            a[2] = k;
            a[3] = d;
            if (pgor(a)) {
              if (r) rev(true);
              for (int i = 0; i < (n); i++) {
                for (int j = 0; j < (m); j++) {
                  cout << ans[i][j] + 1;
                }
                cout << endl;
              }
              return 0;
            }
          }
    rev(false);
  }
  cout << 0;
}
