func_code_string: #include <bits/stdc++.h>   using namespace std;   char bd[1100][1100];   int n, m;   int rt[1100][1100];   int down[1100][1100];   int cnt[1100][1100];   int check(int width, int height, int x, int y) {     int filled = 0;     bool first = true;     while (true) {       int godown = down[x][y] - height;       if (godown < 0) break;       if (cnt[x][y] - cnt[x][y + width] - cnt[x + down[x][y]][y] +               cnt[x + down[x][y]][y + width] ==           width * down[x][y]) {         if (first) {           filled += width * down[x][y];           first = false;         } else {           filled += height + width * godown;         }       } else         break;       if ((y + 1) + width <= m) {         y++;         x += godown;       } else         break;     }     return filled;   }   int main() {     scanf( %d %d , &n, &m);     for (int i = 0; i < n; i++) scanf( %s , bd[i]);     for (int i = n - 1; i >= 0; i--) {       for (int j = m - 1; j >= 0; j--) {         if (bd[i][j] ==  . ) {           rt[i][j] = down[i][j] = 0;         } else {           rt[i][j] = 1 + rt[i][j + 1];           down[i][j] = 1 + down[i + 1][j];         }       }     }     int tlx = -1;     int tly = -1;     int tot = 0;     for (int i = n - 1; i >= 0; i--) {       for (int j = m - 1; j >= 0; j--) {         if (bd[i][j] ==  X ) {           tlx = i;           tly = j;           tot++;         }         cnt[i][j] =             (bd[i][j] ==  X ) + cnt[i + 1][j] + cnt[i][j + 1] - cnt[i + 1][j + 1];       }     }     int best = 1000000000;     for (int height = 1; height <= down[tlx][tly]; height++) {       int width = rt[tlx][tly];       int filled = check(width, height, tlx, tly);       if (filled == tot) best = min(best, width * height);     }     for (int width = 1; width <= rt[tlx][tly]; width++) {       int height = down[tlx][tly];       int filled = check(width, height, tlx, tly);       if (filled == tot) best = min(best, width * height);     }     printf( %d n , best == 1000000000 ? -1 : best);   }   