#include #include #include using namespace std; // struct AhoCorasick{ // char from,to; vector> su; vector wa,ac; // AhoCorasick(char from='a',char to='z'):from(from),to(to),su(1,vector(to-from+1)),ac(1){} // void add(string S){ int now=0; for(int i=0;i(to-from+1)); ac.push_back(0); } now=su[now][c]; } ac[now]++; } // void build(){ queue que; for(int i=0;i<=to-from;i++){ if(su[0][i]!=0){ que.push(su[0][i]); } } wa.resize(su.size()); while(!que.empty()){ int now=que.front(); que.pop(); for(int i=0;i<=to-from;i++){ int nex=su[now][i]; if(nex!=0){ que.push(nex); wa[nex]=su[wa[now]][i]; }else{ su[now][i]=su[wa[now]][i]; } } ac[now]+=ac[wa[now]]; } } // int count(string S){ int v=0; int ans=0; for(int i=0;i where(string S){ int v=0; vector ans; for(int i=0;S.size();i++){ v=su[v][S[i]-'A']; if(ac[v]){ ans.push_back(i-S.size()+1); } } return ans; } // }; // int main(){ string S; int Q; cin>>S>>Q; // AhoCorasick aho('A','Z'); while(Q--){ string C; cin>>C; aho.add(C); } // aho.build(); // cout<