func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   T abs(T x) {     return x > 0 ? x : -x;   }   int n;   int m;   string s[30];   string ans[30];   string sans[30];   vector<pair<int, int> > v[30];   int get(char c) {     if (c <=  B )       return c -  A ;     else       return c -  a  + 2;   }   char lol(int x) {     if (x < 2)       return x +  A ;     else       return (x - 2) +  a ;   }   int t;   int was[100];   int getH(int a, int b) {     if (a > b) swap(a, b);     return (a - 48) * 7 + b - 48;   }   int check() {     t++;     for (int i = 0; i < (28); i++) {       int o = getH(ans[v[i][0].first][v[i][0].second],                    ans[v[i][1].first][v[i][1].second]);       if (was[o] == t) return 0;       was[o] = t;     }     for (int i = 0; i < (n); i++) sans[i] = ans[i];     return 1;   }   int col[15];   int xx[100], yy[100];   int o[100][100];   int go(int p, int c) {     if (p == 14) {       return check();     }     int x = xx[p];     int y = yy[p];     long long aans = 0;     for (int cc = 0; cc <= c; cc++) {       if (col[cc] < 2) {         col[cc]++;         ans[x][y] = ans[x + 1][y] = ans[x][y + 1] = ans[x + 1][y + 1] =             char(cc + 48);         aans += go(p + 1, min(max(cc + 1, c), 6));         col[cc]--;       }     }     return aans;   }   int main() {     cin >> n >> m;     for (int i = 0; i < (n); i++) {       cin >> s[i];       ans[i] = s[i];     }     int pp = 0;     for (int i = 0; i < (n); i++)       for (int j = 0; j < (m); j++)         if (s[i][j] !=  . ) {           if (!o[i][j]) {             xx[pp] = i;             yy[pp] = j;             o[i][j] = o[i + 1][j] = o[i][j + 1] = o[i + 1][j + 1] = 1;             pp++;           }           v[get(s[i][j])].push_back(make_pair(i, j));         }     long long aans = go(0, 0);     cout << aans * 5040 << endl;     for (int i = 0; i < (n); i++) cout << sans[i] << endl;     return 0;   }   