#include <bits/stdc++.h>
using namespace std;
const int maxn = 1050;
int n, m, g[maxn][maxn], ans[maxn][maxn];
int p[4] = {4, 3, 2, 1};
bool chk1(int x, int a, int b) {
  int i, st, c[2] = {a, b};
  for (st = 0; st < m && !g[x][st]; st++)
    ;
  if (g[x][st] != c[0]) swap(c[0], c[1]);
  for (i = 0; st + i < m; i++)
    if (g[x][st + i] && g[x][st + i] != c[i & 1])
      return 0;
    else
      ans[x][st + i] = c[i & 1];
  for (i = 1; i <= st; i++) ans[x][st - i] = c[i & 1];
  return 1;
}
bool chk2(int x, int a, int b) {
  int i, st, c[2] = {a, b};
  for (st = 0; st < n && !g[st][x]; st++)
    ;
  if (g[st][x] != c[0]) swap(c[0], c[1]);
  for (i = 0; st + i < n; i++)
    if (g[st + i][x] && g[st + i][x] != c[i & 1])
      return 0;
    else
      ans[st + i][x] = c[i & 1];
  for (i = 1; i <= st; i++) ans[st - i][x] = c[i & 1];
  return 1;
}
void print() {
  int i, j;
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) printf("%d", ans[i][j]);
    printf("\n");
  }
}
bool check() {
  int i, j;
  bool z = 1;
  for (i = 0; i < n; i++) z &= chk1(i, p[(i & 1) * 2], p[(i & 1) * 2 + 1]);
  if (z) {
    print();
    return 1;
  }
  z = 1;
  for (i = 0; i < m; i++) z &= chk2(i, p[(i & 1) * 2], p[(i & 1) * 2 + 1]);
  if (z) {
    print();
    return 1;
  }
  return 0;
}
int main() {
  int i, j;
  scanf("%d%d\n", &n, &m);
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) g[i][j] = getchar() - '0';
    scanf("\n");
  }
  for (i = 0; i < 4 * 3 * 2; i++) {
    next_permutation(p, p + 4);
    if (check()) return 0;
  }
  printf("0\n");
  return 0;
}
