#include<bits/stdc++.h>
using namespace std;
template<typename X, typename Y>
bool chmax(X& a, Y b) { return (a < b) ? a = b, 1 : 0; }
template<typename X, typename Y>
bool chmin(X& a, Y b) { return (a > b) ? a = b, 1 : 0; }
using ll = long long;
const int N = 5e5+5;
int k;
string s;
int go[N][26], fail[N], cnt[N], nodes = 0;
vector<int> order;
int insert(string s) {
int u = 0;
for (char ch : s) {
int c = ch - 'a';
if (!go[u][c]) go[u][c] = ++nodes;
u = go[u][c];
}
return u;
}
void build() {
queue<int> q;
for (int c = 0; c < 26; c++)
if (go[0][c]) q.push(go[0][c]);
while (!q.empty()) {
int u = q.front(); q.pop();
order.push_back(u);
for (int c = 0; c < 26; c++) {
if (go[u][c]) {
fail[go[u][c]] = go[fail[u]][c];
q.push(go[u][c]);
} else go[u][c] = go[fail[u]][c];
}
}
}
void calc(string s) {
int u = 0;
for (char ch : s) {
int c = ch - 'a';
u = go[u][c];
cnt[u]++;
}
for (int i = (int)order.size() - 1; i >= 0; i--) {
int u = order[i];
cnt[fail[u]] += cnt[u];
}
}
void solve() {
cin >> s >> k;
vector<int> p(k);
for (int i = 0; i < k; i++) {
string w; cin >> w;
p[i] = insert(w);
}
build();
calc(s);
for (int i = 0; i < k; i++) cout << cnt[p[i]] << '\n';
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifdef LOCAL
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CmJvb2wgY2htYXgoWCYgYSwgWSBiKSB7IHJldHVybiAoYSA8IGIpID8gYSA9IGIsIDEgOiAwOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgpib29sIGNobWluKFgmIGEsIFkgYikgeyByZXR1cm4gKGEgPiBiKSA/IGEgPSBiLCAxIDogMDsgfQoKdXNpbmcgbGwgPSBsb25nIGxvbmc7Cgpjb25zdCBpbnQgTiA9IDVlNSs1OwoKaW50IGs7CnN0cmluZyBzOwoKaW50IGdvW05dWzI2XSwgZmFpbFtOXSwgY250W05dLCBub2RlcyA9IDA7CnZlY3RvcjxpbnQ+IG9yZGVyOwoKaW50IGluc2VydChzdHJpbmcgcykgewogICAgaW50IHUgPSAwOwogICAgZm9yIChjaGFyIGNoIDogcykgewogICAgICAgIGludCBjID0gY2ggLSAnYSc7CiAgICAgICAgaWYgKCFnb1t1XVtjXSkgZ29bdV1bY10gPSArK25vZGVzOwogICAgICAgIHUgPSBnb1t1XVtjXTsKICAgIH0KICAgIHJldHVybiB1Owp9Cgp2b2lkIGJ1aWxkKCkgewogICAgcXVldWU8aW50PiBxOwogICAgZm9yIChpbnQgYyA9IDA7IGMgPCAyNjsgYysrKQogICAgICAgIGlmIChnb1swXVtjXSkgcS5wdXNoKGdvWzBdW2NdKTsKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHUgPSBxLmZyb250KCk7IHEucG9wKCk7CiAgICAgICAgb3JkZXIucHVzaF9iYWNrKHUpOwogICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgMjY7IGMrKykgewogICAgICAgICAgICBpZiAoZ29bdV1bY10pIHsKICAgICAgICAgICAgICAgIGZhaWxbZ29bdV1bY11dID0gZ29bZmFpbFt1XV1bY107CiAgICAgICAgICAgICAgICBxLnB1c2goZ29bdV1bY10pOwogICAgICAgICAgICB9IGVsc2UgZ29bdV1bY10gPSBnb1tmYWlsW3VdXVtjXTsKICAgICAgICB9CiAgICB9IAp9Cgp2b2lkIGNhbGMoc3RyaW5nIHMpIHsKICAgIGludCB1ID0gMDsKICAgIGZvciAoY2hhciBjaCA6IHMpIHsKICAgICAgICBpbnQgYyA9IGNoIC0gJ2EnOwogICAgICAgIHUgPSBnb1t1XVtjXTsKICAgICAgICBjbnRbdV0rKzsKICAgIH0KICAgIGZvciAoaW50IGkgPSAoaW50KW9yZGVyLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgaW50IHUgPSBvcmRlcltpXTsKICAgICAgICBjbnRbZmFpbFt1XV0gKz0gY250W3VdOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IHMgPj4gazsKICAgIHZlY3RvcjxpbnQ+IHAoayk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGs7IGkrKykgewogICAgICAgIHN0cmluZyB3OyBjaW4gPj4gdzsKICAgICAgICBwW2ldID0gaW5zZXJ0KHcpOwogICAgfQogICAgYnVpbGQoKTsKICAgIGNhbGMocyk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGs7IGkrKykgY291dCA8PCBjbnRbcFtpXV0gPDwgJ1xuJzsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKICAgIAogICAgaW50IHRlc3RzID0gMTsgLy8gY2luID4+IHRlc3RzOwogICAgd2hpbGUgKHRlc3RzLS0pIHNvbHZlKCk7CgogICAgI2lmZGVmIExPQ0FMCiAgICBjZXJyIDw8ICJcblRpbWUgZWxhcHNlZDogIiA8PCAxLjAgKiBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMgPDwgIiBzLlxuIjsKICAgICNlbmRpZgogICAgcmV0dXJuIDA7Cn0K