#include <bits/stdc++.h>
using namespace std;
struct node {
  int link, cnt, len;
  map<char, int> next;
  node() {
    link = 0;
    cnt = 0;
    len = 0;
  }
};
node st[2000009];
int last, sz;
void init() {
  last = 0;
  sz = 1;
  st[0].link = -1;
  st[0].len = 0;
}
void add(char c) {
  int cur = sz++;
  st[cur].len = st[last].len + 1;
  st[cur].cnt = 1;
  int p = last;
  while (p != -1 && st[p].next.count(c) == 0) {
    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].cnt = 0;
      st[clone].link = st[q].link;
      st[clone].next = st[q].next;
      while (p != -1 && st[p].next[c] == q) {
        st[p].next[c] = clone;
        p = st[p].link;
      }
      st[cur].link = clone;
      st[q].link = clone;
    }
  }
  last = cur;
}
void bfs(int x) {
  queue<int> q;
  q.push(x);
  st[x].len = 0;
  while (q.size()) {
    int o = q.front();
    q.pop();
    for (auto it : st[o].next) {
      if (st[it.second].len == -1) {
        st[it.second].len = st[o].len + 1;
        q.push(it.second);
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(nullptr);
  cout.tie(nullptr);
  init();
  string s;
  cin >> s;
  for (auto it : s) add(it);
  vector<vector<int>> sorted(s.size() + 1);
  for (int i = 1; i < sz; i++) {
    sorted[st[i].len].push_back(i);
    st[i].len = -1;
  }
  for (int i = sorted.size() - 1; i >= 0; i--) {
    for (auto it : sorted[i]) st[st[it].link].cnt += st[it].cnt;
  }
  bfs(0);
  int n;
  cin >> n;
  int coc = 0;
  for (int i = 0; i < n; i++) {
    string t;
    cin >> t;
    int wyn = 0, cyc = 0, pt = 0;
    int dlg = 0;
    unordered_map<int, bool> used;
    for (int j = 0; j < t.size(); j++) {
      while (st[pt].next.count(t[j]) == 0) {
        cyc++;
        dlg = st[pt].len - 1;
        pt = st[pt].link;
        if (pt == -1) break;
      }
      if (pt == -1)
        pt = 0;
      else
        pt = st[pt].next[t[j]];
      dlg++;
    }
    for (int j = 0; j < t.size(); j++) {
      if (dlg == t.size()) {
        if (!used[pt]) wyn += st[pt].cnt;
        dlg--;
        used[pt] = true;
        if (dlg < st[pt].len) pt = st[pt].link;
      }
      while (st[pt].next.count(t[j]) == 0) {
        dlg = st[pt].len - 1;
        pt = st[pt].link;
        if (pt == -1) break;
      }
      if (pt == -1)
        pt = 0;
      else
        pt = st[pt].next[t[j]];
      dlg++;
    }
    cout << wyn << endl;
  }
  return 0;
}
