#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int N=100010;const int kind=26;struct TRIE{ int next[kind]; int overlap,nonoverlap; int end; void init() { memset(next,0,sizeof(next)); overlap=nonoverlap=0; end=-1; }}trie[N*6];int root,tot;char str[N];void init(){ root=tot=0; trie[root].init();}void insert(char *s,int pos){ int r,i=0,index; r=0; while(s[i]) { index=s[i]-'a'; if(!trie[r].next[index]) { trie[++tot].init(); trie[r].next[index]=tot; } r=trie[r].next[index]; trie[r].overlap++; if(trie[r].end<pos) { trie[r].nonoverlap++; trie[r].end=pos+i; } i++; }}void query(int op,char *s){ int i=0,index,r; r=0; while(s[i]) { index = s[i] - 'a'; if(!trie[r].next[index]) { printf("0n"); return ; } r=trie[r].next[index]; i++; } if(op==0) printf("%dn",trie[r].overlap); else if(op==1) printf("%dn",trie[r].nonoverlap);}int main(){ int i,j,q,op,len,cas=1; char sub[10]; while(scanf("%s",str)!=EOF) { init(); len=strlen(str); for(i=0;i<len;i++) { for(j=0;j<6 && i+j<len;j++) sub[j]=str[i+j]; sub[j]=0; insert(sub,i); } scanf("%d",&q); printf("Case %dn",cas++); for(i=0;i<q;i++) { scanf("%d%s",&op,sub); query(op,sub); } printf("n"); } return 0;}