#include <bits/stdc++.h>
using namespace std;
//
const int mx = 1e5 + 5;
const int base = 311;
const long long mod = 1e9 + 7;
//
int q;
long long hashS[mx], hashT[mx], power[mx] = {1};
unordered_map<long long, int> ans[mx];
string S, T[mx];
//
long long hash_value (string &s)
{
    long long res = 0;
    //
    for (char c : s)
        res = (res * base + c) % mod;
    return res;
}
long long get (int l, int r)
{
    return (hashS[r] - hashS[l] * power[r - l] + mod * mod) % mod;
}
void prepare (void)
{
    for (int i = 1; i < mx; ++i)
        power[i] = power[i - 1] * base % mod;
    for (size_t i = 1; i <= S.size(); ++i)
        hashS[i] = (hashS[i - 1] * base + S[i - 1]) % mod;
    for (int i = 0; i < q; ++i)
        hashT[i] = hash_value(T[i]),
        ans[T[i].size()][hashT[i]] = 0;
}
void solve (int len)
{
    long long val;
    //
    for (int i = 0; i <= S.size() - len; ++i)
    {
        val = get(i, i + len);
        if (ans[len].find(val) != ans[len].end())
            ++ans[len][val];
    }
}
//
void process (void)
{
    cin >> S >> q;
    for (int i = 0; i < q; ++i)
        cin >> T[i];

    prepare();
    for (int i = 1; i < mx; ++i)
        if (!ans[i].empty())
            solve(i);

    for (int i = 0; i < q; ++i)
        cout << ans[T[i].size()][hashT[i]] << '\n';
}
//
signed main (void)
{
    ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    process();
}