#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();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vCmNvbnN0IGludCBteCA9IDFlNSArIDU7CmNvbnN0IGludCBiYXNlID0gMzExOwpjb25zdCBsb25nIGxvbmcgbW9kID0gMWU5ICsgNzsKLy8KaW50IHE7CmxvbmcgbG9uZyBoYXNoU1tteF0sIGhhc2hUW214XSwgcG93ZXJbbXhdID0gezF9Owp1bm9yZGVyZWRfbWFwPGxvbmcgbG9uZywgaW50PiBhbnNbbXhdOwpzdHJpbmcgUywgVFtteF07Ci8vCmxvbmcgbG9uZyBoYXNoX3ZhbHVlIChzdHJpbmcgJnMpCnsKICAgIGxvbmcgbG9uZyByZXMgPSAwOwogICAgLy8KICAgIGZvciAoY2hhciBjIDogcykKICAgICAgICByZXMgPSAocmVzICogYmFzZSArIGMpICUgbW9kOwogICAgcmV0dXJuIHJlczsKfQpsb25nIGxvbmcgZ2V0IChpbnQgbCwgaW50IHIpCnsKICAgIHJldHVybiAoaGFzaFNbcl0gLSBoYXNoU1tsXSAqIHBvd2VyW3IgLSBsXSArIG1vZCAqIG1vZCkgJSBtb2Q7Cn0Kdm9pZCBwcmVwYXJlICh2b2lkKQp7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG14OyArK2kpCiAgICAgICAgcG93ZXJbaV0gPSBwb3dlcltpIC0gMV0gKiBiYXNlICUgbW9kOwogICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPD0gUy5zaXplKCk7ICsraSkKICAgICAgICBoYXNoU1tpXSA9IChoYXNoU1tpIC0gMV0gKiBiYXNlICsgU1tpIC0gMV0pICUgbW9kOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxOyArK2kpCiAgICAgICAgaGFzaFRbaV0gPSBoYXNoX3ZhbHVlKFRbaV0pLAogICAgICAgIGFuc1tUW2ldLnNpemUoKV1baGFzaFRbaV1dID0gMDsKfQp2b2lkIHNvbHZlIChpbnQgbGVuKQp7CiAgICBsb25nIGxvbmcgdmFsOwogICAgLy8KICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IFMuc2l6ZSgpIC0gbGVuOyArK2kpCiAgICB7CiAgICAgICAgdmFsID0gZ2V0KGksIGkgKyBsZW4pOwogICAgICAgIGlmIChhbnNbbGVuXS5maW5kKHZhbCkgIT0gYW5zW2xlbl0uZW5kKCkpCiAgICAgICAgICAgICsrYW5zW2xlbl1bdmFsXTsKICAgIH0KfQovLwp2b2lkIHByb2Nlc3MgKHZvaWQpCnsKICAgIGNpbiA+PiBTID4+IHE7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7ICsraSkKICAgICAgICBjaW4gPj4gVFtpXTsKCiAgICBwcmVwYXJlKCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG14OyArK2kpCiAgICAgICAgaWYgKCFhbnNbaV0uZW1wdHkoKSkKICAgICAgICAgICAgc29sdmUoaSk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxOyArK2kpCiAgICAgICAgY291dCA8PCBhbnNbVFtpXS5zaXplKCldW2hhc2hUW2ldXSA8PCAnXG4nOwp9Ci8vCnNpZ25lZCBtYWluICh2b2lkKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY2luLnRpZShudWxscHRyKSwgY291dC50aWUobnVsbHB0cik7CiAgICBwcm9jZXNzKCk7Cn0=