#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 (1000000) struct SA{ int sa[MX],R[MX],C[MX],s[MX<<1],t[MX<<1],p[MX],S[MX],U[MX]; void ss(int n,int m,int*s,int*t,int*p){ int A=t[n-1]=0,c=*R=-1,*r=s+n,x,y; for(int i=n-2;~i;--i)t[i]=s[i]^s[i+1]?s[i]>s[i+1]:t[i+1]; FOR(i,1,n)R[i]=t[i-1]&&!t[i]?(p[A]=i,A++):-1; memset(sa,-1,n*4),memset(S,0,4*m); F(n)++S[s[i]];F(m)if(i)S[i]+=S[i-1];F(m)U[i]=S[i]-1; for(int i=A-1;~i;--i)sa[U[s[p[i]]]--]=p[i]; FOR(i,1,m)U[i]=S[i-1]; F(n)if(sa[i]>0&&t[sa[i]-1])sa[U[s[sa[i]-1]]++]=sa[i]-1; F(m)U[i]=S[i]-1; for(int i=n-1;~i;--i)if(sa[i]>0&&!t[sa[i]-1])sa[U[s[sa[i]-1]]--]=sa[i]-1; F(n)if(~(x=R[sa[i]])){ if(c<1||p[x+1]-p[x]!=p[y+1]-p[y])++c; else for(int j=p[x],k=p[y];j<=p[x+1];++j,++k) if((s[j]<<1|t[j])^(s[k]<<1|t[k])){++c;break;} r[y=x]=c; } if(c+10&&t[sa[i]-1])sa[U[s[sa[i]-1]]++]=sa[i]-1; F(m)U[i]=S[i]-1; for(int i=n-1;~i;--i)if(sa[i]>0&&!t[sa[i]-1])sa[U[s[sa[i]-1]]--]=sa[i]-1; } void sx(int N,char*r){ int m,h=*C=0,M=*max_element(r,r+ ++N); memset(R,0,4*M+4); F(N)R[(int)r[i]]=1; F(M)R[i+1]+=R[i]; F(N)s[i]=R[(int)r[i]]-1; m=R[M]; ss(N,m,s,t,p); F(N)R[sa[i]]=i; F(N-1){ while(i+hZ.C[i])Q.pop_back(); } printf("%d\n",go()); // F(M+1)printf("%d[%d]: %s\n",i,Z.C[i],s+Z.sa[i]);//TODO ERASE return 0; }