#include #include #define max 11000 int wa[max],wb[max],wv[max],ws[max]; int rank[max],height[max]; int cmp(int *r,int a,int b,int l) { return r[a]==r[b]&&r[a+l]==r[b+l]; } void da(int *r,int *sa,int n,int m) { int i,j,p,*x=wa,*y=wb,*t; for(i=0; i=0; i--) sa[--ws[x[i]]]=i; for(p=1,j=1; p=j) y[p++]=sa[i]-j; for(i=0; i=0; i--) sa[--ws[wv[i]]]=y[i]; for(t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1; i=i) { int tem=sa[j-1]>sa[j]?sa[j]:sa[j-1]; mint=mint>tem?tem:mint; tem=sa[j-1]>sa[j]?sa[j-1]:sa[j]; maxt=maxt>tem?maxt:tem; } else { if(mint+i<=maxt)ans++; mint=1001,maxt=-1; } } if(mint+i<=maxt)ans++; } printf("%d\n",ans); } return 0; }