#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 2e6 + 5;
char s[maxn], t[maxn];
int m;
struct Suffixam {
  struct state {
    int len, link;
    map<char, int> next;
  };
  int id[maxn << 1], size[maxn << 1], cnt[maxn << 1];
  state st[maxn << 1];
  int last, sz;
  int vis[maxn << 1];
  void sam_init() {
    memset(vis, -1, sizeof(vis));
    sz = 0;
    st[0].len = 0;
    st[0].link = -1;
    st[0].next.clear();
    sz++;
    last = 0;
  }
  void sam_extend(char c) {
    int cur = sz++;
    st[cur].len = st[last].len + 1;
    st[cur].next.clear();
    size[cur] = 1;
    int p = last;
    while (~p && !st[p].next.count(c)) {
      st[p].next[c] = cur;
      p = st[p].link;
    }
    if (p == -1) {
      st[cur].link = 0;
    } else {
      int q = st[p].next[c];
      if (st[p].len + 1 == st[q].len) {
        st[cur].link = q;
      } else {
        int clone = sz++;
        st[clone].len = st[p].len + 1;
        st[clone].next = st[q].next;
        st[clone].link = st[q].link;
        while (~p && st[p].next[c] == q) {
          st[p].next[c] = clone;
          p = st[p].link;
        }
        st[q].link = st[cur].link = clone;
      }
    }
    last = cur;
  }
  void get() {
    for (int i = 1; i < sz; ++i) {
      ++cnt[st[i].len];
    }
    for (int i = 1; i < sz; ++i) {
      cnt[i] += cnt[i - 1];
    }
    for (int i = 1; i < sz; ++i) {
      id[cnt[st[i].len]--] = i;
    }
    for (int i = sz; i >= 1; --i) {
      size[st[id[i]].link] += size[id[i]];
    }
  }
  void solve(const char *ss, int x) {
    ll ans = 0;
    int len = 0, now = 0;
    for (int i = 0; ss[i]; ++i) {
      if (st[now].next.count(ss[i]) != 0) {
        now = st[now].next[ss[i]];
        len++;
        while (~now && st[st[now].link].len >= m) {
          now = st[now].link;
          len = st[now].len;
        }
        if (vis[now] != x && len >= m) {
          ans += size[now];
          vis[now] = x;
        }
      } else {
        while (~now && !st[now].next.count(ss[i])) {
          now = st[now].link;
        }
        if (now != -1) {
          len = st[now].len + 1;
          now = st[now].next[ss[i]];
        } else {
          len = 0;
          now = 0;
        }
        while (~now && st[st[now].link].len >= m) {
          now = st[now].link;
          len = st[now].len;
        }
        if (vis[now] != x && len >= m) {
          ans += size[now];
          vis[now] = x;
        }
      }
    }
    printf("%lld\n", ans);
  }
} sam;
int main() {
  scanf("%s", s + 1);
  int n = strlen(s + 1);
  sam.sam_init();
  for (int i = 1; i <= n; ++i) {
    sam.sam_extend(s[i]);
  }
  sam.get();
  int q;
  scanf("%d", &q);
  while (q--) {
    scanf("%s", t + 1);
    m = strlen(t + 1);
    for (int i = 1; i <= m; ++i) {
      t[i + m] = t[i];
    }
    t[2 * m + 1] = 0;
    sam.solve(t + 1, q);
  }
  return 0;
}
