#include #include #include using namespace std; int len; void KMP(char *str,char *wzo,void(*fun)(int)){ #define KMPH(z) while(k>0&& wzo[k]!=z[q])k=p[k];\ if(wzo[k]==z[q])k++; int p[strlen(wzo)+1],k=0,q,m; p[1]=0; for(q=1;wzo[q];q++){ KMPH(wzo); p[q+1]=k; } m=q; k=0; for(q=0;str[q];q++){ KMPH(str); if(m==k){ fun(q-m+1); k=p[k]; } } } int res[300004]={}; void Disp(int x) { //printf("%d\n",x); res[x]=max(res[x],len); } int main() { char t[300004],u[300004]; //scanf("%s%s",t,u); int d,i,j,n; scanf("%d%s",&d,t); while(d--) { scanf("%s",u); len=strlen(u); KMP(t,u,Disp); } for(i=1;t[i];++i) res[i]=max(res[i],res[i-1]-1); int lent=strlen(t); for(i=j=0;j