#include using namespace std; #define PB push_back #define ZERO (1e-10) #define INF int(1e9+1) #define CL(A,I) (memset(A,I,sizeof(A))) #define DEB printf("DEB!\n"); #define D(X) cout<<" "<<#X": "<B&&A-ZERO pll; typedef vector vi; typedef pair ii; typedef vector vii; #define IN(n) int n;scanf("%d",&n); #define FOR(i, m, n) for (int i(m); i < n; i++) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define FT(m, n) FOR(k, m, n) #define aa first #define bb second void ga(int N,int *A){F(N)scanf("%d",A+i);} #define MX (333333) #define SQ (150) int t[26][MX],L,E[MX],X[MX]; void addW(char*c,int l){ int nd(0); F(l)if(~t[c[i]-'a'][nd]) nd=t[c[i]-'a'][nd]; else{ t[c[i]-'a'][nd]=L,E[nd=L++]=0; F(26)t[i][nd]=-1; } E[nd]=1; } void mx(char*c,int u,int&X,int l){ if(E[u])X=max(X,l); if(!*c||!~t[*c-97][u])return; mx(c+1,t[*c-97][u],X,l+1); } void PRE(char*p,int*f,int m){ *f=-1; F(m-1){ int k=f[i]; while(~k&&p[k]^p[i])k=f[k]; f[i+1]=k+1; } } void KMP(char *p,char *t){ static int f[MX]; int m=strlen(p); PRE(p,f,m); for(int i(0),k(0);t[i];) if(!~k)++i,k=0; else if(t[i]==p[k]){ if(++i&&++k==m)X[i-k]=max(X[i-k],m),k=f[k-1],--i; }else k=f[k]; } int Q,N,l; char s[MX],r[MX]; int go(){ int S=0,T=0,l=-1; F(N){ l=max(l,X[i]+i-1); if(i==T){ if(l