func_code_string: #include <bits/stdc++.h>   using namespace std;   char mp[5500][5500];   int sum[5500][5500];   const int INF = 0x3f3f3f3f;   int main() {     int n, m;     scanf( %d%d , &n, &m);     for (int i = 1; i <= n; ++i) scanf( %s , mp[i] + 1);     for (int i = 1; i <= n; ++i) {       int tot = 0;       for (int j = 1; j <= m; ++j) {         if (mp[i][j] ==  1 ) ++tot;         sum[i][j] = tot;       }     }     int mm = max(n, m), ans = INF;     for (int k = mm; k > 1; --k) {       bool fi = true;       int i, j, tj = k, ti = k, t0 = 0, t1 = 0, tans = 0;       for (i = 1; i <= ti; ++i) {         if (i > n || tj > m) {           if (i > n) fi = false;           if (i > n)             t0 += k;           else {             t1 += sum[i][m] - sum[i][tj - k];             t0 += k - (sum[i][m] - sum[i][tj - k]);           }         } else {           if (i == n) fi = false;           t1 += sum[i][tj] - sum[i][tj - k];           t0 += k - (sum[i][tj] - sum[i][tj - k]);         }         if (i == ti) {           tans += min(t0, t1);           t0 = 0, t1 = 0;         }         if (i == ti && tj < m) {           tj += k;           i = ti - k;         } else if (i == ti && fi && tj >= m) {           ti += k;           tj = k;         }       }       ans = min(ans, tans);     }     printf( %d n , ans);     return 0;   }   