#include <bits/stdc++.h>
#define Nmax 101
using namespace std;
int n,rez[Nmax];
string S,c;
struct trie{
trie *f[26],*fail;
vector<int> P;
int val;
trie()
{
val = 0;
for (int i=0;i<26;i++)
f[i] = NULL;
fail = NULL;
P.clear();
}
}*T;
vector<trie*> C;
void add(string s,int poz)
{
trie *nod = T;
for (auto it : s)
{
if (nod->f[it-'a']==NULL)
nod->f[it-'a'] = new trie();
nod = nod->f[it-'a'];
}
nod->P.push_back(poz);
}
void bfs()
{
C.push_back(T);
T->fail = T;
for (int k=0;k<C.size();k++)
{
auto it = C[k];
for (int i=0;i<26;i++)
if (it->f[i]!=NULL)
{
trie *nod = it->fail;
while (nod->f[i]==NULL && nod!=T)
nod = nod->fail;
if (nod->f[i]!=NULL && nod->f[i]!=it->f[i])
nod = nod->f[i];
it->f[i]->fail = nod;
C.push_back(it->f[i]);
}
}
}
void bfs2()
{
for (int i=C.size()-1;i>=0;i--)
{
C[i]->fail->val += C[i]->val;
for (auto it : C[i]->P)
rez[it] += C[i]->val;
}
}
int main()
{
freopen("ahocorasick.in","r",stdin);
freopen("ahocorasick.out","w",stdout);
T = new trie();
cin>>S;
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>c;
add(c,i);
}
bfs();
trie *nod = T;
for (auto it : S)
{
while (nod->f[it-'a']==NULL && nod!=T)
nod = nod->fail;
if (nod->f[it-'a']!=NULL)
nod = nod->f[it-'a'];
nod->val++;
}
bfs2();
for (int i=1;i<=n;i++)
cout<<rez[i]<<'\n';
return 0;
}