func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1005;   long long sum[N][N];   int spt[11][N][N], mn[N][N], arr[N][N];   bool visit[N][N];   int n, m, a, b, x;   void buildSparse() {     int LN = log2(n) + 1, LM = log2(m) + 1;     for (int lg = 1; lg <= LM; lg++)       for (int i = 1; i <= n; i++)         for (int j = 1; j <= m; j++)           spt[lg][i][j] =               min(spt[lg - 1][i][j], spt[lg - 1][i][j + (1 << (lg - 1))]);     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++) {         sum[i][j] += sum[i - 1][j];         if (j >= b) {           int lg = log2(b), l = j - b + 1, r = j - (1 << lg) + 1;           mn[i][j] = min(spt[lg][i][l], spt[lg][i][r]);         }       }     for (int i = 1; i <= n; i++)       for (int j = b; j <= m; j++) spt[0][i][j] = mn[i][j];     for (int lg = 1; lg <= LN; lg++)       for (int i = 1; i <= n; i++)         for (int j = b; j <= m; j++)           spt[lg][i][j] =               min(spt[lg - 1][i][j], spt[lg - 1][i + (1 << (lg - 1))][j]);   }   long long getRemoved(int i, int j) {     int lg = log2(a), l = i - a + 1;     int r = i - (1 << lg) + 1;     int minn = min(spt[lg][l][j], spt[lg][r][j]);     long long res = sum[i][j] - sum[i - a][j] - sum[i][j - b] +                     sum[i - a][j - b] - 1LL * a * b * minn;     return res;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cin >> n >> m >> a >> b;     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= m; j++) {         cin >> arr[i][j];         spt[0][i][j] = arr[i][j];         sum[i][j] += sum[i][j - 1] + arr[i][j];       }     }     buildSparse();     vector<pair<long long, pair<int, int>>> v, ans;     for (int i = a; i <= n; i++)       for (int j = b; j <= m; j++) v.push_back({getRemoved(i, j), {i, j}});     sort(v.begin(), v.end());     for (int i = 0; i < v.size(); i++) {       int x = v[i].second.first - a + 1, y = v[i].second.second - b + 1;       if (!visit[x][y] && !visit[x + a - 1][y] && !visit[x][y + b - 1] &&           !visit[x + a - 1][y + b - 1]) {         ans.push_back({v[i].first, {x, y}});         for (int j = 0; j < a; j++)           for (int k = 0; k < b; k++) visit[x + j][y + k] = true;       }     }     cout << ans.size() << endl;     for (int i = 0; i < ans.size(); i++)       cout << ans[i].second.first <<     << ans[i].second.second <<                << ans[i].first <<   n ;     return 0;   }   