func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e6 + 5;   int c[N][26], fa[N], l[N], sz[N], np = 1, cnt = 1;   int a[N], b[N];   int q, len, vi[N];   char s[N];   void expend(int x) {     int p = np;     np = ++cnt;     l[np] = l[p] + 1;     sz[np] = 1;     for (; p && !c[p][x]; p = fa[p]) c[p][x] = np;     if (!p) {       fa[np] = 1;       return;     }     int q = c[p][x];     if (l[q] == l[p] + 1) {       fa[np] = q;       return;     }     int nq = ++cnt;     l[nq] = l[p] + 1;     memcpy(c[nq], c[q], 104);     fa[nq] = fa[q], fa[q] = fa[np] = nq;     for (; c[p][x] == q; p = fa[p]) c[p][x] = nq;   }   void init() {     for (int i = 1; i <= cnt; ++i) ++b[l[i]];     for (int i = 1; i <= len; ++i) b[i] += b[i - 1];     for (int i = cnt; i; --i) a[b[l[i]]--] = i;     for (int i = cnt; i; --i) sz[fa[a[i]]] += sz[a[i]];   }   int walk() {     int re = 0, u = 1, cur = 0;     for (int i = 0; i < (len << 1); ++i) {       int x = s[i] - 97;       if (c[u][x])         ++cur, u = c[u][x];       else {         while (u && !c[u][x]) u = fa[u];         if (u)           cur = l[u] + 1, u = c[u][x];         else           cur = 0, u = 1;       }       if (i >= len && cur >= len) {         int p = u;         while (p && !(len >= l[fa[p]] + 1 && len <= l[p])) p = fa[p];         if (!p) p = 1;         if (vi[p] != q + 1) vi[p] = q + 1, re += sz[p];       }     }     return re;   }   int main() {     scanf( %s%d , s, &q), len = strlen(s);     for (int i = 0; i < len; ++i) expend(s[i] - 97);     init();     while (q--) {       scanf( %s , s), len = strlen(s);       memcpy(s + len, s, len);       printf( %d n , walk());     }   }   