Power Strings

来源:互联网 发布:资治通鉴和史记 知乎 编辑:程序博客网 时间:2024/05/16 14:56

Problem Description

Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).

Input

 Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.

Output

 For each s you should print the largest n such that s = a^n for some string a.

Example Input

abcdaaaaababab.

Example Output

143

Hint

 This problem has huge input, use scanf instead of cin to avoid time limit exceed.

#include<stdio.h>#include<string.h>int next[1000010];char s1[1000010],s2[1000010];void getNext(int n){    int i,k=0;    next[0]=0;    for(i=1;i<n;i++)    {        while(k>0&&s2[k]!=s2[i]) k=next[k-1];        if(s2[k]==s2[i])  k++;        next[i]=k;    }}int main(){    int n,m,i;    while(scanf("%s",s2)!=EOF)    {        if(s2[0]=='.') break;        memset(next,0,sizeof(next));        m=strlen(s2);        getNext(m);        if(m%(m-next[m-1])==0)        {            printf("%d\n",m/(m-next[m-1]));        }        else printf("-1\n");    }    return 0;}


0 0