#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(0);
  int n, m;
  cin >> n >> m;
  vector<vector<int> > g(n, vector<int>(m));
  for (int i = 0; i < n; ++i) {
    string t;
    cin >> t;
    for (int j = 0; j < m; ++j) g[i][j] = t[j] - '0' - 1;
  }
  vector<vector<int> > odp;
  for (int i = 0; i < 4; ++i) {
    for (int j = i + 1; j < 4; ++j) {
      vector<vector<int> > t = g;
      vector<int> a(2);
      a[0] = i;
      a[1] = j;
      vector<int> b;
      for (int k = 0; k < 4; ++k)
        if (k != i && k != j) b.push_back(k);
      bool ok = true;
      for (int k = 0; k < n; ++k) {
        if (k % 2 == 0) {
          vector<int> nry0, nry1;
          bool zlycol = false;
          for (int l = 0; l < m; ++l) {
            if (g[k][l] == a[0]) nry0.push_back(l);
            if (g[k][l] == a[1]) nry1.push_back(l);
            if (g[k][l] == b[0] || g[k][l] == b[1]) zlycol = true;
          }
          bool zlaparz = false;
          for (int l = 0; l < nry0.size(); ++l)
            if (nry0[l] % 2 != nry0[0] % 2) zlaparz = true;
          for (int l = 0; l < nry1.size(); ++l)
            if (nry1[l] % 2 != nry1[0] % 2) zlaparz = true;
          if (nry0.size() != 0 && nry1.size() != 0 &&
              nry0[0] % 2 == nry1[0] % 2)
            zlaparz = true;
          if (zlaparz || zlycol)
            ok = false;
          else {
            int start = 0;
            if (nry0.size() != 0) {
              if (nry0[0] % 2 == 0)
                start = 0;
              else
                start = 1;
            }
            if (nry1.size() != 0) {
              if (nry1[0] % 2 == 0)
                start = 1;
              else
                start = 0;
            }
            for (int l = 0; l < m; ++l) {
              if (l % 2 == 0)
                t[k][l] = a[start];
              else
                t[k][l] = a[start ^ 1];
            }
          }
        } else {
          vector<int> nry0, nry1;
          bool zlycol = false;
          for (int l = 0; l < m; ++l) {
            if (g[k][l] == b[0]) nry0.push_back(l);
            if (g[k][l] == b[1]) nry1.push_back(l);
            if (g[k][l] == a[0] || g[k][l] == a[1]) zlycol = true;
          }
          bool zlaparz = false;
          for (int l = 0; l < nry0.size(); ++l)
            if (nry0[l] % 2 != nry0[0] % 2) zlaparz = true;
          for (int l = 0; l < nry1.size(); ++l)
            if (nry1[l] % 2 != nry1[0] % 2) zlaparz = true;
          if (nry0.size() != 0 && nry1.size() != 0 &&
              nry0[0] % 2 == nry1[0] % 2)
            zlaparz = true;
          if (zlaparz || zlycol)
            ok = false;
          else {
            int start = 0;
            if (nry0.size() != 0) {
              if (nry0[0] % 2 == 0)
                start = 0;
              else
                start = 1;
            }
            if (nry1.size() != 0) {
              if (nry1[0] % 2 == 0)
                start = 1;
              else
                start = 0;
            }
            for (int l = 0; l < m; ++l) {
              if (l % 2 == 0)
                t[k][l] = b[start];
              else
                t[k][l] = b[start ^ 1];
            }
          }
        }
      }
      if (ok) odp = t;
    }
  }
  for (int i = 0; i < 4; ++i) {
    for (int j = i + 1; j < 4; ++j) {
      vector<vector<int> > t = g;
      vector<int> a(2);
      a[0] = i;
      a[1] = j;
      vector<int> b;
      for (int k = 0; k < 4; ++k)
        if (k != i && k != j) b.push_back(k);
      bool ok = true;
      for (int k = 0; k < m; ++k) {
        if (k % 2 == 0) {
          vector<int> nry0, nry1;
          bool zlycol = false;
          for (int l = 0; l < n; ++l) {
            if (g[l][k] == a[0]) nry0.push_back(l);
            if (g[l][k] == a[1]) nry1.push_back(l);
            if (g[l][k] == b[0] || g[l][k] == b[1]) zlycol = true;
          }
          bool zlaparz = false;
          for (int l = 0; l < nry0.size(); ++l)
            if (nry0[l] % 2 != nry0[0] % 2) zlaparz = true;
          for (int l = 0; l < nry1.size(); ++l)
            if (nry1[l] % 2 != nry1[0] % 2) zlaparz = true;
          if (nry0.size() != 0 && nry1.size() != 0 &&
              nry0[0] % 2 == nry1[0] % 2)
            zlaparz = true;
          if (zlaparz || zlycol)
            ok = false;
          else {
            int start = 0;
            if (nry0.size() != 0) {
              if (nry0[0] % 2 == 0)
                start = 0;
              else
                start = 1;
            }
            if (nry1.size() != 0) {
              if (nry1[0] % 2 == 0)
                start = 1;
              else
                start = 0;
            }
            for (int l = 0; l < n; ++l) {
              if (l % 2 == 0)
                t[l][k] = a[start];
              else
                t[l][k] = a[start ^ 1];
            }
          }
        } else {
          vector<int> nry0, nry1;
          bool zlycol = false;
          for (int l = 0; l < n; ++l) {
            if (g[l][k] == b[0]) nry0.push_back(l);
            if (g[l][k] == b[1]) nry1.push_back(l);
            if (g[l][k] == a[0] || g[l][k] == a[1]) zlycol = true;
          }
          bool zlaparz = false;
          for (int l = 0; l < nry0.size(); ++l)
            if (nry0[l] % 2 != nry0[0] % 2) zlaparz = true;
          for (int l = 0; l < nry1.size(); ++l)
            if (nry1[l] % 2 != nry1[0] % 2) zlaparz = true;
          if (nry0.size() != 0 && nry1.size() != 0 &&
              nry0[0] % 2 == nry1[0] % 2)
            zlaparz = true;
          if (zlaparz || zlycol)
            ok = false;
          else {
            int start = 0;
            if (nry0.size() != 0) {
              if (nry0[0] % 2 == 0)
                start = 0;
              else
                start = 1;
            }
            if (nry1.size() != 0) {
              if (nry1[0] % 2 == 0)
                start = 1;
              else
                start = 0;
            }
            for (int l = 0; l < n; ++l) {
              if (l % 2 == 0)
                t[l][k] = b[start];
              else
                t[l][k] = b[start ^ 1];
            }
          }
        }
      }
      if (ok) odp = t;
    }
  }
  if (odp.size() != 0) {
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) cout << odp[i][j] + 1;
      cout << endl;
    }
  } else
    cout << "0";
  return 0;
}
