func_code_string: #include <bits/stdc++.h>   using namespace std;   int arr[100005];   int brr[100005];   char s[1234][1234];   int vis[1234][1234];   int has[1234][1234];   int f[1234567];   int n, m, c, g;   void dfs(int x, int y) {     if (x < 0 || y < 0 || x == n || y == m || vis[x][y] || s[x][y] ==  * ) return;     if (s[x][y] ==  . ) {       vis[x][y] = 1;       has[x][y] = g;       f[g]++;       dfs(x, y + 1);       dfs(x, y - 1);       dfs(x - 1, y);       dfs(x + 1, y);     }   }   int main() {     cin >> n >> m;     int i, j;     for (i = 0; i < n; i++) {       for (j = 0; j < m; ++j) {         cin >> s[i][j];       }     }     for (i = 0; i < n; ++i) {       for (j = 0; j < m; ++j) {         if (s[i][j] ==  .  && vis[i][j] == 0) {           g++;           dfs(i, j);         }       }     }     for (i = 0; i < n; ++i) {       for (j = 0; j < m; ++j) {         c = 1;         set<int> se;         if (s[i][j] ==  * ) {           if (j > 0) se.insert(has[i][j - 1]);           if (i > 0) se.insert(has[i - 1][j]);           if (j + 1 < m) se.insert(has[i][j + 1]);           if (i + 1 < n) se.insert(has[i + 1][j]);           for (set<int>::iterator it = se.begin(); it != se.end(); ++it) {             c = c + f[*it];           }           cout << c % 10;         } else           cout <<  . ;       }       cout << endl;     }   }   