func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e5 + 1e3;   string s, sq;   int z1[maxn + 10], z2[maxn + 10], pref[1010], suff[1010], rez;   void calc(string ss, int z[]) {     int l = -1;     int r = -1;     for (int i = 1; i < ss.size(); i++) {       if (i > r) {         l = i;         r = l - 1;         while (r + 1 < ss.size() && ss[r + 1] == ss[r + 1 - l]) r++;         z[i] = r - l + 1;       } else {         if (i + z[i - l] - 1 < r)           z[i] = z[i - l];         else {           l = i;           while (r + 1 < ss.size() && ss[r + 1] == ss[r + 1 - l]) r++;           z[i] = r - l + 1;         }       }     }   }   int main() {     cin >> s;     int q;     scanf( %d , &q);     for (int qi = 1; qi <= q; qi++) {       cin >> sq;       if (sq.size() == 1) continue;       string pom = sq +  $  + s;       calc(pom, z1);       reverse(s.begin(), s.end());       reverse(sq.begin(), sq.end());       pom = sq +  $  + s;       calc(pom, z2);       reverse(s.begin(), s.end());       for (int i = 0; i < s.size(); i++) z1[i] = z1[i + sq.size() + 1];       for (int i = 0; i < pom.size() / 2; i++)         swap(z2[i], z2[pom.size() - 1 - i]);       fill(pref, pref + 1001, 1000000000);       fill(suff, suff + 1001, -1);       int e = 0;       for (int i = 0; i < s.size(); i++) {         int id = z1[i];         if (id == sq.size()) {           rez++;           e = 1;           break;         }         if (pref[id] == 1000000000) pref[id] = i;         id = z2[i];         if (id == sq.size()) {           rez++;           e = 1;           break;         }         suff[id] = i;       }       for (int i = sq.size() - 1; i >= 1; i--) {         pref[i] = min(pref[i], pref[i + 1]);         suff[i] = max(suff[i], suff[i + 1]);       }       if (e == 1) continue;       for (int i = 1; i < sq.size(); i++) {         if (pref[i] == -1 || suff[sq.size() - i] == -1) continue;         if (pref[i] + i - 1 < suff[sq.size() - i] - (sq.size() - i) + 1) {           rez++;           break;         }       }     }     printf( %d n , rez);     return 0;   }   