func_code_string: #include <bits/stdc++.h>   using namespace std;   char grid[1005][1005];   int lewo[1005][1005], prawo[1005][1005], gora[1005][1005], dol[1005][1005];   bool odwiedzony[1005][1005];   vector<pair<int, int> > przedzialy_x[1005], przedzialy_y[1005];   vector<pair<pair<int, int>, int> > wynik;   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int y, x, xd = 0, wszystkie = 0;     cin >> y >> x;     for (int i = 1; i <= y; i++) {       for (int j = 1; j <= x; j++) {         cin >> grid[i][j];         if (grid[i][j] ==  * ) wszystkie++;         if (grid[i][j] ==  . )           lewo[i][j] = j;         else           lewo[i][j] = lewo[i][j - 1];       }       prawo[i][x + 1] = x + 1;       for (int j = x; j > 0; j--) {         if (grid[i][j] ==  . )           prawo[i][j] = j;         else           prawo[i][j] = prawo[i][j + 1];       }     }     for (int i = 1; i <= x; i++) {       for (int j = 1; j <= y; j++) {         if (grid[j][i] ==  . )           gora[j][i] = j;         else           gora[j][i] = gora[j - 1][i];       }       dol[y + 1][i] = y + 1;       for (int j = y; j > 0; j--) {         if (grid[j][i] ==  . )           dol[j][i] = j;         else           dol[j][i] = dol[j + 1][i];       }     }     for (int i = 2; i < y; i++)       for (int j = 2; j < x; j++) {         int pom = min(min(j - lewo[i][j] - 1, prawo[i][j] - j - 1),                       min(i - gora[i][j] - 1, dol[i][j] - i - 1));         if (pom && grid[i][j] ==  * ) {           przedzialy_x[i].push_back({j - pom, j + pom});           przedzialy_y[j].push_back({i - pom, i + pom});           wynik.emplace_back(make_pair(make_pair(i, j), pom));         }       }     for (int i = 1; i <= y; i++) {       przedzialy_x[i].push_back({1e9, 1e9});       sort(przedzialy_x[i].begin(), przedzialy_x[i].end());       int indeks = 0;       for (int j = 1; j <= x; j++) {         while (przedzialy_x[i][indeks].second < j) indeks++;         if (grid[i][j] ==  *  && przedzialy_x[i][indeks].first <= j) {           xd++;           odwiedzony[i][j] = true;         }       }     }     for (int i = 1; i <= x; i++) {       przedzialy_y[i].push_back({1e9, 1e9});       sort(przedzialy_y[i].begin(), przedzialy_y[i].end());       int indeks = 0;       for (int j = 1; j <= y; j++) {         while (przedzialy_y[i][indeks].second < j) indeks++;         if (grid[j][i] ==  *  && przedzialy_y[i][indeks].first <= j &&             !odwiedzony[j][i])           xd++;       }     }     if (xd == wszystkie) {       int aha = wynik.size();       cout << aha <<   n ;       for (int i = 0; i < aha; i++)         cout << wynik[i].first.first <<     << wynik[i].first.second <<                  << wynik[i].second <<   n ;     } else       cout <<  -1 n ;   }   