#include <bits/stdc++.h>   #pragma GCC optimize( Ofast,no-stack-protector )   #pragma GCC target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native )   #pragma GCC optimize( unroll-loops )   #pragma GCC optimize( fast-math )   using namespace std;   template <class T>   ostream &operator<<(ostream &str, vector<T> &a) {     for (auto &i : a) {       str << i <<    ;     }     return str;   }   template <class T>   istream &operator>>(istream &str, vector<T> &a) {     for (auto &i : a) {       str >> i;     }     return str;   }   template <class T>   ostream &operator<<(ostream &str, pair<T, T> &a) {     str << a.first <<     << a.second;     return str;   }   template <class T>   istream &operator>>(istream &str, pair<T, T> &a) {     str >> a.first >> a.second;     return str;   }   void solve();   signed main() {     srand(time(0));     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     cout.setf(ios::fixed);     cout.precision(6);     solve();     return 0;   }   int n, m;   int get_sum(vector<vector<int>> &b, int i1, int j1, int i2, int j2) {     return b[i2][j2] - b[i1 - 1][j2] - b[i2][j1 - 1] + b[i1 - 1][j1 - 1];   }   bool check(int k, vector<vector<int>> &a, vector<vector<int>> &b,              vector<vector<int>> &tmp) {     int len = 2 * k + 1;     if (len > n || len > m) {       return false;     }     vector<vector<int>> v(m + 2, vector<int>(n + 2));     for (int i = 1; i <= n - len + 1; ++i) {       for (int j = 1; j <= m - len + 1; ++j) {         int sum = get_sum(b, i, j, i + len - 1, j + len - 1);         if (sum == len * len) {           tmp[i + len / 2][j + len / 2] = 1;           v[j][i] += 1, v[j][i + len] -= 1;           v[j + len][i] -= 1, v[j + len][i + len] += 1;         }       }     }     for (int j = 1; j <= m; ++j) {       for (int i = 1; i <= n; ++i) {         v[j][i] = v[j][i - 1] + v[j][i];       }     }     vector<vector<int>> c(n + 1, vector<int>(m + 1));     for (int j = 1; j <= m; ++j) {       for (int i = 1; i <= n; ++i) {         c[i][j] = v[j][i];       }     }     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) {         c[i][j] = c[i][j - 1] + c[i][j];       }     }     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) {         if (a[i][j] && c[i][j] == 0) {           return false;         }       }     }     return true;   }   void solve() {     cin >> n >> m;     vector<vector<int>> a(n + 1, vector<int>(m + 1));     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) {         char ch;         cin >> ch;         a[i][j] = (ch ==  X  ? 1 : 0);       }     }     vector<vector<int>> b = a;     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) {         b[i][j] = b[i][j] + b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];       }     }     vector<vector<int>> ans(n + 1, vector<int>(m + 1));     int l = 0, r = min(n, m);     while (r - l > 1) {       int k = (r + l) / 2;       vector<vector<int>> tmp(n + 1, vector<int>(m + 1));       if (check(k, a, b, tmp)) {         ans = tmp;         l = k;       } else {         r = k;       }     }     check(l, a, b, ans);     cout << (l) <<   n ;     ;     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) {         cout << (ans[i][j] ?  X  :  . );       }       cout <<   n ;     }   }