func_code_string: #include <bits/stdc++.h>   using namespace std;   string s[505];   int n, par[505][505], a[505 * 505] = {0}, v[505 * 505] = {0}, p[505 * 505];   bool b[505 * 505] = {0};   int dfs(int x, int y, int k) {     par[x][y] = k;     int ret = 1;     if (x > 0 && par[x - 1][y] == -1 && s[x - 1][y] ==  . )       ret += dfs(x - 1, y, k);     if (x + 1 < n && par[x + 1][y] == -1 && s[x + 1][y] ==  . )       ret += dfs(x + 1, y, k);     if (y > 0 && par[x][y - 1] == -1 && s[x][y - 1] ==  . )       ret += dfs(x, y - 1, k);     if (y + 1 < n && par[x][y + 1] == -1 && s[x][y + 1] ==  . )       ret += dfs(x, y + 1, k);     return ret;   }   void reset(int bx, int ex, int by, int ey) {     int i, j;     for (i = bx; i <= ex; i++) {       for (j = by; j <= ey; j++) b[par[i][j]] = 0;     }   }   int get_sum(int bx, int ex, int by, int ey) {     int i, j, ret = 0, u;     for (i = bx; i <= ex; i++) {       for (j = by; j <= ey; j++) {         if (s[i][j] ==  X ) continue;         u = par[i][j];         if (v[u] == 0 && b[u] == 0) ret += a[u];         b[u] = 1;       }     }     return ret;   }   int main() {     std::ios_base::sync_with_stdio(0);     int cases, caseno = 0, i, j, k, t, u, mx, sum, temp, sz = 0;     cin >> n >> k;     for (i = 0; i <= n - 1; i++) cin >> s[i];     memset(par, -1, sizeof(par));     for (i = 0; i <= n - 1; i++) {       for (j = 0; j <= n - 1; j++) {         if (s[i][j] ==  X ) {           par[i][j] = sz;           a[sz++] = 1;         } else if (par[i][j] == -1) {           a[sz] = dfs(i, j, sz);           sz++;         }       }     }     mx = 0;     for (i = 0; i <= n - k; i++) {       sum = 0;       memset(v, 0, sizeof(v));       for (t = i; t <= i + k - 1; t++) {         for (j = 0; j <= k - 1; j++) {           v[par[t][j]]++;           if (v[par[t][j]] == 1) sum += a[par[t][j]];         }       }       for (j = 0; j <= n - k; j++) {         temp = 0;         if (j > 0) {           for (t = i; t <= i + k - 1; t++) {             u = par[t][j - 1];             v[u]--;             if (v[u] == 0) sum -= a[u];           }           for (t = i; t <= i + k - 1; t++) {             u = par[t][j + k - 1];             v[u]++;             if (v[u] == 1) sum += a[u];           }         }         if (i > 0) reset(i - 1, i - 1, j, j + k - 1);         if (i + k < n) reset(i + k, i + k, j, j + k - 1);         if (j > 0) reset(i, i + k - 1, j - 1, j - 1);         if (j + k < n) reset(i, i + k - 1, j + k, j + k);         if (i > 0) temp += get_sum(i - 1, i - 1, j, j + k - 1);         if (i + k < n) temp += get_sum(i + k, i + k, j, j + k - 1);         if (j > 0) temp += get_sum(i, i + k - 1, j - 1, j - 1);         if (j + k < n) temp += get_sum(i, i + k - 1, j + k, j + k);         mx = max(mx, sum + temp);       }     }     cout << mx <<   n ;     return 0;   }   