Pagini recente » Cod sursa (job #1349496) | Cod sursa (job #537676) | Cod sursa (job #2509474) | Borderou de evaluare (job #1567114) | Cod sursa (job #2061955)
#include <bits/stdc++.h>
using namespace std;
const int N_MAX = 1000000 + 5;
ifstream fin ("prefix.in");
ofstream fout("prefix.out");
char P[N_MAX]; int key[N_MAX];
int q;
void build_key(){
int k = 0, m = strlen(P+1); key[0] = 0;
for(int i = 2; i<=m; ++i){
while(P[i] != P[k+1] and k > 0)
k = key[k];
if(P[i] == P[k+1])
k ++;
key[i] = k;
}
}
int main()
{
fin >> q;
while(q--){
fin >> (P+1);
build_key();
int maxx = 0, n = strlen(P+1);
for(int i = 1; i<=n; ++i){
if(key[i]){
int x = i - key[i];
if(i % x == 0)
maxx = i;
}
}
fout << maxx << "\n";
}
return 0;
}