#include <bits/stdc++.h>
using namespace std;
const int N = 1100;
vector<int> v[N];
int n, m;
char mp[N][N];
bool check(const vector<int>& v, set<int>& res) {
  set<int> st[2];
  for (int i = 0; i < (int)v.size(); ++i) {
    if (v[i] == 0) continue;
    st[i % 2].insert(v[i]);
  }
  for (int i = 0; i < 2; ++i)
    if (st[i].size() > 1) return false;
  if (st[0].size() == 1 && st[1].size() == 1 &&
      *st[0].begin() == *st[1].begin())
    return false;
  for (int i = 0; i < 2; ++i)
    if (st[i].size()) res.insert(*st[i].begin());
  return true;
}
void setValue(vector<int>& v, const set<int>& st) {
  if (st.size() != 2) puts("error-0");
  set<int>::iterator it = st.begin();
  int a = *it++;
  int b = *it++;
  bool ok = true;
  for (int i = 0; i < (int)v.size(); ++i) {
    if (i % 2 == 0) {
      if (v[i] != a && v[i] != 0) {
        ok = false;
        break;
        if (v[i] != b) puts("error-1");
      }
    } else {
      if (v[i] != b && v[i] != 0) {
        ok = false;
        break;
        if (v[i] != a) puts("error-2");
      }
    }
  }
  if (ok == false) swap(a, b);
  for (int i = 0; i < (int)v.size(); ++i) v[i] = i % 2 == 0 ? a : b;
}
bool solve(int k) {
  set<int> st[2];
  for (int i = 0; i < k; ++i) {
    if (check(v[i], st[i % 2]) == false) return false;
    if (st[i % 2].size() > 2) return false;
  }
  for (set<int>::iterator it = st[0].begin(); it != st[0].end(); ++it)
    if (st[1].find(*it) != st[1].end()) return false;
  for (int i = 1; i <= 4; ++i) {
    if (st[0].find(i) != st[0].end()) continue;
    if (st[1].find(i) != st[1].end()) continue;
    for (int j = 0; j < 2; ++j)
      if (st[j].size() < 2) {
        st[j].insert(i);
        break;
      }
  }
  for (int i = 0; i < k; ++i) {
    setValue(v[i], st[i % 2]);
  }
  return true;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; ++i) scanf("%s", mp[i]);
  for (int i = 0; i < n; ++i) {
    v[i].clear();
    for (int j = 0; j < m; ++j) v[i].push_back(mp[i][j] - '0');
  }
  if (solve(n)) {
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) printf("%d", v[i][j]);
      puts("");
    }
    return 0;
  }
  for (int i = 0; i < m; ++i) {
    v[i].clear();
    for (int j = 0; j < n; ++j) v[i].push_back(mp[j][i] - '0');
  }
  if (solve(m)) {
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) printf("%d", v[j][i]);
      puts("");
    }
    return 0;
  }
  puts("0");
  return 0;
}
