// 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] != -