#include <bits/stdc++.h>
using namespace std;
struct state {
  int len, link, fpos;
  int terminal;
  map<char, int> next;
};
class sufixaut {
 public:
  vector<state> st;
  int sz, last;
  void init(int n) {
    st.clear();
    st.resize(n);
    st[0].len = 0;
    st[0].link = -1;
    last = 0;
    sz = 1;
  }
  void addc(char c) {
    int cur = sz++;
    st[cur].len = st[last].len + 1;
    st[cur].fpos = st[cur].len - 1;
    st[cur].terminal = -1;
    int p;
    for (p = last; p != -1 && !st[p].next.count(c); p = st[p].link)
      st[p].next[c] = cur;
    if (p == -1)
      st[cur].link = 0;
    else {
      int q = st[p].next[c];
      if (st[q].len == st[p].len + 1)
        st[cur].link = q;
      else {
        int clone = sz++;
        st[clone].len = st[p].len + 1;
        st[clone].fpos = st[q].fpos;
        st[clone].terminal = -1;
        st[clone].next = st[q].next;
        st[clone].link = st[q].link;
        for (; p != -1 && st[p].next[c] == q; p = st[p].link)
          st[p].next[c] = clone;
        st[q].link = st[cur].link = clone;
      }
    }
    last = cur;
  }
  void adds(string& s) {
    for (int i = 0; i <= (int)s.size() - 1; i++) addc(s[i]);
  }
  void makTerminals() {
    int p;
    for (p = last; p != -1; p = st[p].link) st[p].terminal = 1;
  }
  void cntoccurs(vector<int>& dp, int u) {
    if (dp[u] != -1) return;
    int cnt = (st[u].terminal == 1) ? 1 : 0;
    for (auto x : st[u].next) {
      cntoccurs(dp, x.second);
      cnt += dp[x.second];
    }
    dp[u] = cnt;
  }
};
class Solution {
 public:
  void solve(istream& in, ostream& out) {
    string s;
    in >> s;
    sufixaut sf;
    sf.init((int)s.size() * 2 + 10);
    sf.adds(s);
    sf.makTerminals();
    vector<int> dp((int)s.size() * 2 + 10, -1);
    for (int i = 1; i <= sf.sz - 1; i++) sf.cntoccurs(dp, i);
    dp[0] = 0;
    int q;
    vector<int> used((int)s.size() * 2 + 10, 0);
    in >> q;
    set<int> st;
    while (q--) {
      in >> s;
      int n = (int)s.size();
      st.clear();
      int sum = 0;
      string tmp = s + s;
      int v = 0, l = 0;
      for (int i = 0; i <= (int)tmp.size() - 2; i++) {
        while (v && !sf.st[v].next.count(tmp[i])) {
          v = sf.st[v].link;
          l = sf.st[v].len;
        }
        if (sf.st[v].next.count(tmp[i])) {
          v = sf.st[v].next[tmp[i]];
          l++;
        }
        if (l == n) {
          if (st.find(v) == st.end()) {
            st.insert(v);
            sum += dp[v];
            l--;
            if (l <= sf.st[sf.st[v].link].len) {
              v = sf.st[v].link;
            }
          } else
            break;
        }
        assert(l <= n);
      }
      out << sum << endl;
    }
  }
};
void solve(std::istream& in, std::ostream& out) {
  out << std::setprecision(12);
  Solution solution;
  solution.solve(in, out);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  istream& in = cin;
  ostream& out = cout;
  solve(in, out);
  return 0;
}
