func_code_string: #include <bits/stdc++.h>   using namespace std;   bool reach(int from[3], int to[3], vector<vector<string>> &works) {     if (works[from[0]][from[1]][from[2]] ==  0 ) return false;     if (from[0] == to[0] && from[1] == to[1] && from[2] == to[2]) return true;     for (int d = 0; d < 3; ++d)       if (from[d] < to[d]) {         ++from[d];         bool res = reach(from, to, works);         --from[d];         if (res) return true;       }     return false;   }   int main() {     int lim[3];     for (int i = 0; i < 3; ++i) scanf( %d , &lim[i]);     vector<vector<string>> works(lim[0],                                  vector<string>(lim[1], string(lim[2],    )));     for (int i = 0; i < lim[0]; ++i)       for (int j = 0; j < lim[1]; ++j) scanf( %s , &works[i][j][0]);     int result = 0;     for (int i = 0; i < lim[0]; ++i)       for (int j = 0; j < lim[1]; ++j)         for (int k = 0; k < lim[2]; ++k)           if (works[i][j][k] ==  1 ) {             int at[3] = {i, j, k};             bool critical = false;             for (int fromd = 0; fromd < 3; ++fromd)               if (at[fromd] >= 1) {                 int from[3] = {i, j, k};                 --from[fromd];                 for (int tod = 0; tod < 3; ++tod)                   if (at[tod] + 1 < lim[tod]) {                     int to[3] = {i, j, k};                     ++to[tod];                     bool before = reach(from, to, works);                     works[i][j][k] =  0 ;                     bool after = reach(from, to, works);                     works[i][j][k] =  1 ;                     if (before && !after) critical = true;                   }               }             if (critical) ++result;           }     printf( %d n , result);     return 0;   }   