/*
对模式串s建立sam,然后每个串t到sam里去跑,
每次跑到不能再往下匹配了,ans+1,对t[i]后面的字符再从头开始跑sam
如果有sam里没有的字符出现了,那答案必定是-1
*/
#include<bits/stdc++.h>
using namespace std;
#define N 400005
struct SAM{
int cnt,last;
int nxt[N][26];
int link[N];
int len[N];
SAM(){cnt=last=1;}
void insert(int c){
int p=last,np=last=++cnt;
len[np]=len[p]+1;
for(;p&&!nxt[p][c];p=link[p])
nxt[p][c]=np;
if(!p){link[np]=1;return;}
int q=nxt[p][c];
if(len[q]==len[p]+1){link[np]=q;return;}
int clone=++cnt;
link[clone]=link[q];
len[clone]=len[p]+1;
memcpy(nxt[clone],nxt[q],sizeof nxt[q]);
link[q]=link[np]=clone;
for(;p&&nxt[p][c]==q;p=link[p])
nxt[p][c]=clone;
}
}tr;
char s[N],t[N];
int len;
int main(){
scanf("%s",s);
len=strlen(s);
for(int i=0;i<len;i++)
tr.insert(s[i]-'A');
int T;cin>>T;
while(T--){
scanf("%s",t);
len=strlen(t);
int i=0,ans=0;
while(i<len){
int c=t[i]-'A';
if(!tr.nxt[1][c]){
ans=-1;break;
}
int p=1;
while(i<len){
int c=t[i]-'A';
if(tr.nxt[p][c])
p=tr.nxt[p][c];
else break;
i++;
}
ans++;
}
cout<<ans<<'\n';
}
}