poj2406

来源:互联网 发布:大型企业网络优化方案 编辑:程序博客网 时间:2024/04/29 05:54
Power Strings
Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 20899 Accepted: 8757

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.

Sample Input

abcdaaaaababab.

Sample Output

143

#include<iostream>#include<string.h>#include<stdio.h>#include<string.h>using namespace std;int f[1000000+1];char s[1000000+1];void fail(int n){    f[0]=-1;    for(int i=1;i<n;i++)    {        int j=f[i-1];        while(j>=0&&s[i]!=s[j+1])j=f[j];        if(s[i]==s[j+1])f[i]=j+1;        else f[i]=-1;    }}int main(){    while(cin>>s,s[0]!='.')    {        int length=strlen(s);        fail(length);        int m=length;        int n=m-1-f[m-1];        if(m%n==0)cout<<m/n<<endl;        else cout<<1<<endl;    }    return 0;}