题意:找到最小循环子串,设n为原串的长度,k为待求子串长度,k|s,所以枚举s的约数即可
/* ***********************************************
Author :Lu_cky
Created Time :2016/6/10 9:35:03
File Name :xiao.cpp
************************************************ */
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define LL long long
using namespace std;
const int SIZE=1e6+10;
const int maxn=1<<30;
set<int> st;
void get_fac(int n){
st.clear();
for(int i=1;i<=(int)sqrt((double)n);i++){
if(n%i==0){
st.insert(i);
st.insert(n/i);
}
}
}
bool is(char s[],int n){
for(int i=0;s[i]!='\0';i++)
if(s[i]!=s[i%n])return false;
return true;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
char s[1010];
int T;
scanf("%d",&T);
for(int cas=1;cas<=T;cas++){
scanf("%s",s);
int len=strlen(s),ans;
get_fac(len);
for(set<int>::iterator it=st.begin();it!=st.end();it++){
ans=*it;
if(is(s,ans))break;
}
printf("%d\n",ans);
if(cas!=T)printf("\n");
}
return 0;
}