#include <bits/stdc++.h>   using namespace std;   const int N = 2e6 + 5;   int n, ri[N];   char s[N];   struct node {     int ch[26], par, val;   } t[N];   int sz = 1, root = 1, last = 1;   void extend(int c) {     int p = last, np = ++sz;     t[np].val = t[p].val + 1;     ri[np]++;     for (; p && !t[p].ch[c]; p = t[p].par) t[p].ch[c] = np;     if (!p)       t[np].par = root;     else {       int q = t[p].ch[c];       if (t[q].val == t[p].val + 1)         t[np].par = q;       else {         int nq = ++sz;         t[nq] = t[q];         t[nq].val = t[p].val + 1;         t[q].par = t[np].par = nq;         for (; p && t[p].ch[c] == q; p = t[p].par) t[p].ch[c] = nq;       }     }     last = np;   }   int vis[N];   void walk(int id) {     int u = root, len = n + n - 1, ans = 0, nowLen = 0;     for (int i = 1; i <= len; i++) {       int c = s[i] -  a ;       if (t[u].ch[c])         u = t[u].ch[c], nowLen++;       else {         while (u && !t[u].ch[c]) u = t[u].par;         if (!u)           u = root, nowLen = 0;         else           nowLen = t[u].val + 1, u = t[u].ch[c];       }       if (vis[u] != id && nowLen >= n) vis[u] = id, ans += ri[u];       if (n != 1)         while (t[t[u].par].val + 1 >= n) u = t[u].par, nowLen = t[u].val;     }     printf( %d n , ans);   }   int c[N], a[N];   void RadixSort() {     for (int i = 1; i <= sz; i++) c[t[i].val]++;     for (int i = 1; i <= n; i++) c[i] += c[i - 1];     for (int i = sz; i >= 1; i--) a[c[t[i].val]--] = i;   }   void solve() {     RadixSort();     int u;     for (int i = sz; i >= 1; i--) u = a[i], ri[t[u].par] += ri[u];     int m;     scanf( %d , &m);     for (int i = 1; i <= m; i++) {       scanf( %s , s + 1);       n = strlen(s + 1);       for (int i = 1; i < n; i++) s[i + n] = s[i];       walk(i);     }   }   int main() {     scanf( %s , s + 1);     n = strlen(s + 1);     for (int i = 1; i <= n; i++) extend(s[i] -  a );     solve();   }   