#include <bits/stdc++.h>
const int mod = 1000000007;
const int gmod = 3;
const int inf = 1039074182;
const double eps = 1e-9;
const long long llinf = 2LL * inf * inf;
template <typename T1, typename T2>
inline void chmin(T1 &x, T2 b) {
  if (b < x) x = b;
}
template <typename T1, typename T2>
inline void chmax(T1 &x, T2 b) {
  if (b > x) x = b;
}
inline void chadd(int &x, int b) {
  x += b - mod;
  x += (x >> 31 & mod);
}
template <typename T1, typename T2>
inline void chadd(T1 &x, T2 b) {
  x += b;
  if (x >= mod) x -= mod;
}
template <typename T1, typename T2>
inline void chmul(T1 &x, T2 b) {
  x = 1LL * x * b % mod;
}
template <typename T1, typename T2>
inline void chmod(T1 &x, T2 b) {
  x %= b, x += b;
  if (x >= b) x -= b;
}
template <typename T>
inline T mabs(T x) {
  return (x < 0 ? -x : x);
}
using namespace std;
using namespace std;
template <typename T>
ostream &operator<<(ostream &cout, vector<T> vec) {
  cout << "{";
  for (int i = 0; i < (int)vec.size(); i++) {
    cout << vec[i];
    if (i != (int)vec.size() - 1) cout << ',';
  }
  cout << "}";
  return cout;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &cout, pair<T1, T2> p) {
  cout << "(" << p.first << ',' << p.second << ")";
  return cout;
}
template <typename T, typename T2>
ostream &operator<<(ostream &cout, set<T, T2> s) {
  vector<T> t;
  for (auto x : s) t.push_back(x);
  cout << t;
  return cout;
}
template <typename T, typename T2>
ostream &operator<<(ostream &cout, multiset<T, T2> s) {
  vector<T> t;
  for (auto x : s) t.push_back(x);
  cout << t;
  return cout;
}
template <typename T>
ostream &operator<<(ostream &cout, queue<T> q) {
  vector<T> t;
  while (q.size()) {
    t.push_back(q.front());
    q.pop();
  }
  cout << t;
  return cout;
}
template <typename T1, typename T2, typename T3>
ostream &operator<<(ostream &cout, map<T1, T2, T3> m) {
  for (auto &x : m) {
    cout << "Key: " << x.first << ' ' << "Value: " << x.second << endl;
  }
  return cout;
}
template <typename T1, typename T2>
void operator+=(pair<T1, T2> &x, const pair<T1, T2> y) {
  x.first += y.first;
  x.second += y.second;
}
template <typename T1, typename T2>
pair<T1, T2> operator+(const pair<T1, T2> &x, const pair<T1, T2> &y) {
  return make_pair(x.first + y.first, x.second + y.second);
}
template <typename T1, typename T2>
pair<T1, T2> operator-(const pair<T1, T2> &x, const pair<T1, T2> &y) {
  return make_pair(x.first - y.first, x.second - y.second);
}
template <typename T1, typename T2>
pair<T1, T2> operator-(pair<T1, T2> x) {
  return make_pair(-x.first, -x.second);
}
template <typename T>
vector<vector<T>> operator~(vector<vector<T>> vec) {
  vector<vector<T>> v;
  int n = vec.size(), m = vec[0].size();
  v.resize(m);
  for (int i = 0; i < m; i++) {
    v[i].resize(n);
  }
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
      v[i][j] = vec[j][i];
    }
  }
  return v;
}
void print0x(int x) {
  std::vector<int> vec;
  while (x) {
    vec.push_back(x & 1);
    x >>= 1;
  }
  std::reverse(vec.begin(), vec.end());
  for (int i = 0; i < (int)vec.size(); i++) {
    std::cout << vec[i];
  }
  std::cout << ' ';
}
template <typename T>
void print0x(T x, int len) {
  std::vector<int> vec;
  while (x) {
    vec.push_back(x & 1);
    x >>= 1;
  }
  reverse(vec.begin(), vec.end());
  for (int i = (int)vec.size(); i < len; i++) {
    putchar('0');
  }
  for (size_t i = 0; i < vec.size(); i++) {
    std::cout << vec[i];
  }
  std::cout << ' ';
}
vector<string> vec_splitter(string s) {
  s += ',';
  vector<string> res;
  while (!s.empty()) {
    res.push_back(s.substr(0, s.find(',')));
    s = s.substr(s.find(',') + 1);
  }
  return res;
}
void debug_out(vector<string> __attribute__((unused)) args,
               __attribute__((unused)) int idx,
               __attribute__((unused)) int LINE_NUM) {
  cerr << endl;
}
template <typename Head, typename... Tail>
void debug_out(vector<string> args, int idx, int LINE_NUM, Head H, Tail... T) {
  if (idx > 0)
    cerr << ", ";
  else
    cerr << "Line(" << LINE_NUM << ") ";
  stringstream ss;
  ss << H;
  cerr << args[idx] << " = " << ss.str();
  debug_out(args, idx + 1, LINE_NUM, T...);
}
using namespace std;
int states;
struct State {
  State *link;
  State *go[26];
  int len;
  State(int _len);
  int cnt = 0;
  int id;
  inline int size() { return len - (link ? link->len : 0); }
};
State::State(int _len) : len(_len) {
  memset(go, 0, sizeof(go));
  id = states++;
}
struct SA {
  vector<pair<int, State *>> order;
  State *last, *root;
  inline void extend(int w) {
    State *T = last;
    State *Tx = new State(last->len + 1);
    order.push_back(make_pair(Tx->len, Tx));
    last = Tx;
    while (T && T->go[w] == 0) {
      T->go[w] = Tx;
      T = T->link;
    }
    if (T == 0) {
      Tx->link = root;
      return;
    }
    State *p = T->go[w];
    if (T->len + 1 == p->len) {
      Tx->link = p;
    } else {
      State *np = new State(*p);
      order.push_back(make_pair(np->len, np));
      np->len = T->len + 1;
      p->link = np;
      Tx->link = np;
      while (T && T->go[w] == p) {
        T->go[w] = np;
        T = T->link;
      }
    }
  }
  inline void init() {
    last = root = new State(0);
    root->link = nullptr;
  }
  inline void solve() {
    sort(order.begin(), order.end());
    reverse(order.begin(), order.end());
    State *ed = last;
    while (ed) {
      ed->cnt++;
      ed = ed->link;
    }
    for (auto [tlen, x] : order) {
      for (int i = 0; i < 26; i++) {
        if (x->go[i]) x->cnt += x->go[i]->cnt;
      }
    }
  }
  inline void solve(char buf[], int n) {
    State *now = root;
    vector<State *> vec;
    for (int i = n; i < 2 * n; i++) {
      buf[i] = buf[i - n];
    }
    int l = 0, r = 0;
    for (; r < n; r++) {
      if (!now->go[buf[r] - 'a']) break;
      now = now->go[buf[r] - 'a'];
    }
    long long res = 0;
    for (; l < n; l++) {
      while (r < l + n) {
        if (!now->go[buf[r] - 'a']) break;
        now = now->go[buf[r] - 'a'];
        r++;
      }
      if (r - l == n) vec.push_back(now);
      if (now && (now->link ? now->link->len : 0) + 1 == r - l) now = now->link;
    }
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
    for (auto x : vec) res += x->cnt;
    printf("%lld\n", res);
  }
};
SA sa;
char buf[2000005];
int n;
void solve() {
  scanf("%s", buf);
  n = strlen(buf);
  sa.solve(buf, n);
}
int main() {
  scanf("%s", buf);
  n = strlen(buf);
  sa.init();
  for (int i = 0; i < n; i++) {
    sa.extend(buf[i] - 'a');
  }
  sa.solve();
  int T;
  cin >> T;
  while (T--) solve();
  return 0;
}
