func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, p1[2010][2010], p2[2010][2010], p3[2010][2010], p4[2010][2010];   int sun[2010][2010];   int dir[8][2] = {{-1, 0},  {1, 0},  {0, -1}, {0, 1},                    {-1, -1}, {-1, 1}, {1, -1}, {1, 1}};   int vis[2010][2010];   int nw, nwr, bel[4000010], cnt[4000010];   int tr[2010][2010];   void col(int x, int y, int c) {     sun[x][y] = c;     for (int k = 0; k <= 7; ++k) {       int tx = x + dir[k][0], ty = y + dir[k][1];       if (tx > 0 && tx <= n && ty > 0 && ty <= m && p1[tx][ty] && p2[tx][ty] &&           !sun[tx][ty]) {         col(tx, ty, c);       }     }   }   void hehe(int x, int y, int c) {     tr[x][y] = c;     for (int k = 0; k <= 7; ++k) {       int tx = x + dir[k][0], ty = y + dir[k][1];       if (tx > 0 && tx <= n && ty > 0 && ty <= m) {         if (sun[tx][ty])           bel[c] = sun[tx][ty];         else if (p1[tx][ty] && !tr[tx][ty])           hehe(tx, ty, c);       }     }   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= n; ++i)       for (int j = 1; j <= m; ++j) scanf( %d , &p1[i][j]), p2[i][j] = p1[i][j];     for (int k = 1; k <= 3; ++k) {       for (int i = 1; i <= n; ++i)         for (int j = 1; j <= m; ++j) p3[i][j] = 0;       for (int i = 1; i <= n; ++i)         for (int j = 1; j <= m; ++j) {           int tmp = 1;           for (int l = 0; l <= 7; ++l) {             int ti = i + dir[l][0], tj = j + dir[l][1];             if (ti > 0 && ti <= n && tj > 0 && tj <= m) {               if (p2[ti][tj] == 0) tmp = 0;             }           }           p3[i][j] = tmp;         }       for (int i = 1; i <= n; ++i)         for (int j = 1; j <= m; ++j) swap(p2[i][j], p3[i][j]);     }     for (int k = 1; k <= 6; ++k) {       for (int i = 1; i <= n; ++i)         for (int j = 1; j <= m; ++j) p3[i][j] = 0;       for (int i = 1; i <= n; ++i)         for (int j = 1; j <= m; ++j) {           int tmp = 0;           for (int l = 0; l <= 7; ++l) {             int ti = i + dir[l][0], tj = j + dir[l][1];             if (ti > 0 && ti <= n && tj > 0 && tj <= m) {               if (p2[ti][tj] == 1) tmp = 1;             }           }           p3[i][j] = tmp;         }       for (int i = 1; i <= n; ++i)         for (int j = 1; j <= m; ++j) swap(p2[i][j], p3[i][j]);     }     for (int i = 1; i <= n; ++i)       for (int j = 1; j <= m; ++j)         if (p1[i][j] && p2[i][j] && !sun[i][j]) col(i, j, ++nw);     for (int i = 1; i <= n; ++i)       for (int j = 1; j <= m; ++j)         if (p1[i][j] && !sun[i][j] && !tr[i][j]) hehe(i, j, ++nwr);     for (int i = 1; i <= nwr; ++i) ++cnt[bel[i]];     vector<int> huhu;     for (int i = 1; i <= nw; ++i) huhu.push_back(cnt[i]);     sort(huhu.begin(), huhu.end());     printf( %d n , nw);     for (int i = 0; i < huhu.size(); ++i)       printf( %d%c , huhu[i], i + 1 == huhu.size() ?   n  :    );     return 0;   }   