#include using namespace std; typedef long long ll; string s; const int N = 4e6+5; int n,len[N],g[N],p[N],fa[N];ll h[N]; const ll mod = 1e9+7,w = 131; ll hsh(int l,int r){ return ((h[r]-(h[l-1]*p[r-l+1])%mod)%mod+mod)%mod; }int fnd(int x){ return x==fa[x]?x:fa[x]=fnd(fa[x]); }void merge(int x,int y){ x = fnd(x),y=fnd(y); if(x<=y)fa[x]=y; else fa[y]=x; }int main(){ while(1) cin>>s; n = s.size(),s=" "+s; p[0]=1; for(int i = 1;i<=n+1;i++)fa[i]=i; for(int i = 1;i<=n;i++){h[i]=(h[i-1]*w%mod+s[i])%mod,p[i]=p[i-1]*w%mod;} for(int i = 1;i<=n;i++){ int l = i,r=n+1; while(l+1>1,len = mid-i+1; if(hsh(1,len)==hsh(i,mid))l=mid; else r = mid; } if(s[i]!=s[1])len[i]=0; else len[i]=l-i+1; } for(int i = 1;i<=n;i++)if(len[i]==0)merge(i,i+1); for(int j = 1;j<=n;j++){ g[j]=max(g[j],g[j-1]); int f = g[j]-1; for(int i = j+1;i<=n;){ if(len[i]