/* 对模式串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<<' '; } }