Pagini recente » Cod sursa (job #427095) | Cod sursa (job #2746112) | Cod sursa (job #2933253) | Cod sursa (job #1983339) | Cod sursa (job #1654815)
#include <iostream>
#include <vector>
#include <algorithm>
#include <limits>
#include <numeric>
#include <cstring>
#include <string>
#include <queue>
#include <set>
#include <cmath>
#include <fstream>
#include <cstdlib>
#include <map>
#define pb push_back
#define mp make_pair
#define INF numeric_limits<int>::max()
#define bit(x) (-x)&x
#define int64 long long
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
char s[1000002];
int p[1000002],len;
void prefix(char s[])
{
int k=0;
for(int i=2;i<=len;i++)
{
while(k>0 && s[k+1]!=s[i])k=p[k];
if(s[k+1]==s[i])k++;
p[i]=k;
}
}
int main()
{
int n;
for(in>>n;n;n--)
{
in>>(s+1);
len=strlen(s+1);
prefix(s);
int sol=0;
for(int i=len;i>0;i--)
if(p[i] && i%(i-p[i])==0)
{
sol=i;
break;
}
out<<sol<<'\n';
}
return 0;
}