AC 自动机
#include "../header.cpp"
namespace ACAM{
int C[MAXN][MAXM], F[MAXN], o;
void insert(char *S){
int p = 0, len = 0;
for(int i = 0;S[i];++ i){
int e = S[i] - 'a';
if(C[p][e]) p = C[p][e];
else p = C[p][e] = ++ o;
++ len;
}
}
void build(){
queue <int> Q; Q.push(0);
while(!Q.empty()){
int u = Q.front(); Q.pop();
for(int i = 0;i < 26;++ i){
int p = F[u], v = C[u][i];
if(v == 0) continue;
while(!C[p][i] && p != 0) p = F[p];
if(C[p][i] && C[p][i] != v)
F[v] = C[p][i];
Q.push(v);
}
}
}
}