#include #include #include using namespace std; const int maxn=1e6+5; char s[maxn]; int sa[maxn],t[maxn],t2[maxn],c[maxn],n; void build_sa(int sig) { int *x=t,*y=t2; memset(c,0,sizeof(c)); for(int i=0;i=0;i--) sa[--c[x[i]]]=i; for(int k=1;k<=n;k<<=1) { int p=0; for(int i=n-k;i=k) y[p++]=sa[i]-k; memset(c,0,sizeof(c)); for(int i=0;i=0;i--) sa[--c[x[y[i]]]]=y[i]; swap(x,y); p=1; x[sa[0]]=0; for(int i=1;i=n) break; sig=p; } } int main() { #ifdef local freopen("pro.in","r",stdin); #endif scanf("%s",s); n=strlen(s); build_sa(128); for(int i=0;i