func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, ans, sx, sy, ex, ey, endx = -1, endy = -1;   char s[1005][1006];   pair<int, int> xx[1005];   pair<int, int> yy[1005];   bool able(int x, int y) {     int nx = sx, ny = sy;     while (true) {       int nex = nx + x + 1, ney = ny + y + 1;       if (nex > endx && ney > endy) return true;       if (s[nx][ney] ==  X ) {         if (nex <= endx && xx[nex].first <= ny) return false;         ny++;         continue;       } else if (s[nex][ny] ==  X ) {         if (ney <= endy && yy[ney].first <= nx) return false;         nx++;         continue;       } else         return false;     }   }   int main() {     scanf( %d %d , &n, &m);     for (int i = 0; i < n; i++) scanf( %s , s[i]);     int state = 0;     for (int i = 0; i < n; i++) {       xx[i].first = -1;       for (int j = 0; j < m; j++) {         if (s[i][j] ==  X ) xx[i].second = j, endx = i;         if (s[i][j] ==  X  && xx[i].first == -1) xx[i].first = j;       }       if (xx[i].first != -1) {         for (int j = xx[i].first; j <= xx[i].second; j++)           if (s[i][j] !=  X ) {             printf( -1 );             return 0;           }         if (state < 2)           state++;         else if (state == 5) {           printf( -1 );           return 0;         }       } else if (state != 0)         state = 5;       if (state != 2) continue;       if (xx[i].first < xx[i - 1].first || xx[i].second < xx[i - 1].second ||           xx[i].first > xx[i - 1].second) {         printf( -1 );         return 0;       }     }     state = 0;     for (int i = 0; i < m; i++) {       yy[i].first = -1;       for (int j = 0; j < n; j++) {         if (s[j][i] ==  X ) yy[i].second = j, endy = i;         if (s[j][i] ==  X  && yy[i].first == -1) yy[i].first = j;       }       if (yy[i].first != -1) {         for (int j = yy[i].first; j <= yy[i].second; j++)           if (s[j][i] !=  X ) {             printf( -1 );             return 0;           }         if (state < 2)           state++;         else if (state == 5) {           printf( -1 );           return 0;         }       } else if (state != 0)         state = 5;       if (state != 2) continue;       if (yy[i].first < yy[i - 1].first || yy[i].second < yy[i - 1].second ||           yy[i].first > yy[i - 1].second) {         printf( -1 );         return 0;       }     }     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         if (s[i][j] ==  X ) {           sx = i, sy = j;           i = n;           break;         }       }     }     if (endx == -1) {       printf( 0 );       return 0;     }     for (int i = sx; i < n; i++) {       if (s[i][sy] ==  X )         ex = i;       else         break;     }     for (int i = sy; i < m; i++) {       if (s[sx][i] ==  X )         ey = i;       else         break;     }     ans = 2140000000;     for (int i = 0; i <= ex - sx; i++) {       if (able(i, ey - sy)) {         ans = min(ans, (i + 1) * (ey - sy + 1));       }     }     for (int i = 0; i <= ey - sy; i++) {       if (able(ex - sx, i)) {         ans = min(ans, (i + 1) * (ex - sx + 1));       }     }     printf( %d , ans == 2140000000 ? -1 : ans);     return 0;   }   