func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   int size(T& a) {     return (int)a.size();   }   template <typename T>   T sqr(T a) {     return a * a;   }   int offset;   int f[1000000 * 4 + 10];   int start[27];   int getmask(int l, int r) {     int res = 0;     for (l += offset, r += offset; l <= r; l /= 2, r /= 2) {       if (l % 2 == 1) {         res |= f[l++];       }       if (r % 2 == 0) {         res |= f[r--];       }     }     return res;   }   vector<int> pos[27];   int ans[10000];   map<int, int> num;   int cnt[27][10000];   int g[10000];   int main() {     string s;     cin >> s;     s += (char)( z  + 1);     offset = 1;     while (offset < size(s)) offset *= 2;     memset((f), (0), sizeof(f));     for (int i = offset; i < offset + size(s); ++i) {       f[i] = 1 << (s[i - offset] -  a );     }     for (int i = offset - 1; i >= 1; --i) {       f[i] = f[2 * i] | f[2 * i + 1];     }     for (int i = 0; i < size(s); ++i) {       pos[s[i] -  a ].push_back(i);     }     int q;     cin >> q;     for (int i = 0; i < q; ++i) {       string e;       cin >> e;       int mask = 0;       for (int j = 0; j < e.length(); ++j) {         mask |= 1 << (e[j] -  a );       }       g[i] = mask;       num[mask] = i;     }     for (int i = 0; i < size(s) - 1; ++i) {       for (int b = 0; b < 27; ++b) {         if (s[i] -  a  == b) continue;         while (start[b] < pos[b].size() && pos[b][start[b]] < i) {           ++start[b];         }         if (start[b] < pos[b].size() && pos[b][start[b]] >= i) {           int m = getmask(i, pos[b][start[b]] - 1);           if (i > 0 && (m & (1 << (s[i - 1] -  a ))) != 0) continue;           if (!num.count(m)) continue;           cnt[b][num[m]]++;         }       }     }     for (int i = 0; i < q; ++i) {       int res = 0;       for (int b = 0; b < 27; ++b)         if ((g[i] & (1 << b)) == 0) {           res += cnt[b][num[g[i]]];         }       cout << res << endl;     }   }   