// hdu2222 //
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #include<queue> using namespace std; char k[55],s[1000005]; struct node { int fail; int next[26]; int cnt; void newnode() { cnt=0; fail=-1; for(int i=0;i<26;i++) { next[i]=-1; } } }t[500005]; int root=0,tot=0; void insert(char *str) { int p=root; int len=strlen(str); for(int i=0;i<len;i++) { int id=str[i]-'a'; if(t[p].next[id] == -1) { t[++tot].newnode(); t[p].next[id] = tot; } p = t[p].next[id]; } t[p].cnt++; } void build_ac() { queue<int>q; q.push(root); while(!q.empty()) { int p=q.front(); q.pop(); for(int i=0;i<26;i++) { if(t[p].next[i] != -1)