#include<stdio.h> #include<string.h> #define maxn 1000010 char s[2*maxn]; int nxt[2*maxn]; int len; int get(int flag) { int i=1,j=2,k=0; while(i<=len&&j<=len&&k<=len) { int m=s[i+k]-s[j+k]; if(!m) k++; else { if((m<0)^flag) j+=k+1; else i+=k+1; k=0; j+=(i==j); } } return i<j?i:j; } void gao(char * s,int n) { nxt[1]=0; int k=0; for(int i=2;i<=n;i++) { while(k>0&&s[i]!=s[k+1]) k=nxt[k]; if(s[i]==s[k+1]) k++; nxt[i]=k; } } int kmp(char *p) { int n=2*len; int k=0,j=0; for(int i=2;i<=n;i++) { while(j>0&&s[i]!=p[j+1]) j=nxt[j]; if(s[i]==p[j+1]) j++; if(j==len) { k++; j=nxt[j]; } } return k; } int main() { while(scanf("%s",s+1)!=EOF) { int i,j,k; int n=strlen(s+1); if(n==1) { printf("1 1 1 1\n"); continue; } len=n; for(i=1;i<=n;i++) s[i+n]=s[i]; int k1=get(0); int k2=get(1); //printf("%d %d\n",k1,k2); char *p1=s+k1-1,*p2=s+k2-1; gao(p1,n); int t1=kmp(p1); gao(p2,n); int t2=kmp(p2); printf("%d %d %d %d\n",k1,t1,k2,t2); } return 0; }