#include <bits/stdc++.h>
using namespace std;
int N, M;
int grid[1005][1005], grid2[1005][1005];
int ans[1005][1005];
int A[1005];
char S[1005];
int check(int v11, int v12, int v21, int v22) {
  if (v11 > 0 && v21 > 0) return 0;
  if (v12 > 0 && v22 > 0) return 0;
  if (v11 > 0 && v12 > 0) return 0;
  if (v21 > 0 && v22 > 0) return 0;
  if (v11 == 0 && v22 == 0) return 2;
  return 1;
}
int solve(int c11, int c12, int c21, int c22) {
  for (int x = 0; x < N; x += 2) {
    int t[2][2];
    t[0][0] = t[0][1] = t[1][0] = t[1][1] = 0;
    for (int y = 0; y < M; y++) {
      if (grid[x][y] == 0) continue;
      if (grid[x][y] == c11)
        t[y % 2][0]++;
      else if (grid[x][y] == c12)
        t[y % 2][1]++;
      else
        return 0;
    }
    int v = check(t[0][0], t[0][1], t[1][0], t[1][1]);
    if (v == 0) return 0;
    A[x] = v;
  }
  for (int x = 1; x < N; x += 2) {
    int t[2][2];
    t[0][0] = t[0][1] = t[1][0] = t[1][1] = 0;
    for (int y = 0; y < M; y++) {
      if (grid[x][y] == 0) continue;
      if (grid[x][y] == c21)
        t[y % 2][0]++;
      else if (grid[x][y] == c22)
        t[y % 2][1]++;
      else
        return 0;
    }
    int v = check(t[0][0], t[0][1], t[1][0], t[1][1]);
    if (v == 0) return 0;
    A[x] = v;
  }
  for (int x = 0; x < N; x++) {
    int colors[2];
    if (x % 2 == 0) {
      colors[0] = c11;
      colors[1] = c12;
    } else {
      colors[0] = c21;
      colors[1] = c22;
    }
    if (A[x] == 2) swap(colors[0], colors[1]);
    for (int y = 0; y < M; y++) ans[x][y] = colors[y % 2];
  }
  return 1;
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 0; i < N; i++) {
    scanf("%s", S);
    for (int j = 0; j < M; j++) grid[i][j] = S[j] - '0';
  }
  vector<int> A;
  A.push_back(1), A.push_back(2), A.push_back(3), A.push_back(4);
  do {
    if (solve(A[0], A[1], A[2], A[3])) {
      for (int x = 0; x < N; x++) {
        for (int y = 0; y < M; y++) printf("%d", ans[x][y]);
        printf("\n");
      }
      return 0;
    }
  } while (next_permutation(A.begin(), A.end()));
  for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++) grid2[i][j] = grid[i][j];
  for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++) grid[j][i] = grid2[i][j];
  swap(N, M);
  do {
    if (solve(A[0], A[1], A[2], A[3])) {
      for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++) grid2[i][j] = ans[i][j];
      for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++) ans[j][i] = grid2[i][j];
      swap(N, M);
      for (int x = 0; x < N; x++) {
        for (int y = 0; y < M; y++) printf("%d", ans[x][y]);
        printf("\n");
      }
      return 0;
    }
  } while (next_permutation(A.begin(), A.end()));
  printf("0\n");
  return 0;
}
