Pagini recente » Cod sursa (job #2700961) | Cod sursa (job #2601481) | Cod sursa (job #1334459) | Cod sursa (job #2565001) | Cod sursa (job #2028266)
#include <bits/stdc++.h>
using namespace std;
char v[1000005];
int d[1000005];
int p[1000005];
int main()
{
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
int rez = -1;
scanf("%s", v);
d[0] = -1;
int k = -1;
for(int i = 1; v[i] != 0; i++)
{
while(k != -1 && v[i] != v[k + 1])
k = d[k];
if(v[i] == v[k + 1])
k++;
d[i] = k;
p[i] = 0;
if(d[i] != -1)
{
if((d[i] + 1) * 2 == i + 1)
p[i] = 1;
else
{
int perl = i - d[i];
if((i + 1) % perl == 0)
{
if(p[i - perl] != 0)
{
p[i] = p[i - perl] + 1;
}
}
}
}
if(p[i] != 0)
rez = i;
}
printf("%d\n", rez + 1);
}
return 0;
}