func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2005500;   struct state {     int len, link;     map<char, int> next;   };   state st[N];   int sz, last;   void sa_init() {     last = st[0].len = 0;     sz = 1;     st[0].link = -1;   }   void sa_extend(char c) {     int k = sz++, p;     st[k].len = st[last].len + 1;     for (p = last; p != -1 && !st[p].next.count(c); p = st[p].link)       st[p].next[c] = k;     if (p == -1)       st[k].link = 0;     else {       int q = st[p].next[c];       if (st[p].len + 1 == st[q].len)         st[k].link = q;       else {         int w = sz++;         st[w].len = st[p].len + 1;         st[w].next = st[q].next;         st[w].link = st[q].link;         for (; p != -1 && st[p].next[c] == q; p = st[p].link) st[p].next[c] = w;         st[q].link = st[k].link = w;       }     }     last = k;   }   string s, tt;   long long dp[N];   bool t[N];   int vis[N], q;   long long f(int i) {     if (dp[i] != -1) return dp[i];     long long &r = dp[i] = t[i];     for (auto p : st[i].next) r += f(p.second);     return r;   }   long long go(int i, int p, int len) {     long long r = 0;     if (len == ((int)(tt).size()) / 2) {       if (vis[i] == q) return 0;       vis[i] = q;       r += dp[i];       if (st[st[i].link].len + 1 == len) {         r += go(st[i].link, p + 1, len - 1);       } else {         r += go(i, p + 1, len - 1);       }     } else {       if (p >= ((int)(tt).size()) / 2) return 0;       char c = tt[p + len];       if (st[i].next.count(c)) {         r += go(st[i].next[c], p, len + 1);       } else {         if (i && st[st[i].link].len + 1 == len) {           r += go(st[i].link, p + 1, len - 1);         } else {           r += go(i, p + 1, len - 1);         }       }     }     return r;   }   void solve() {     q++;     cin >> tt;     tt += tt;     cout << go(0, 0, 0) <<   n ;   }   int main() {     cin >> s;     sa_init();     memset(dp, -1, sizeof dp);     for (int i = 0, qwerty = ((int)(s).size()); i < qwerty; i++) sa_extend(s[i]);     int x = last;     while (x) {       t[x] = 1;       x = st[x].link;     }     f(0);     int tn;     cin >> tn;     for (int i = 0, qwerty = tn; i < qwerty; i++) {       solve();     }   }   