Pagini recente » Cod sursa (job #2406999) | Cod sursa (job #151803) | Cod sursa (job #2478360) | Cod sursa (job #2772250) | Cod sursa (job #1417695)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
int N, len;
//char str[1000100];
string str;
int table[1000100];
void prefix() {
int match = 0, maxim = 0;
table[0] = 0;
for (int i=1; i<len; ++i) {
while (match > 0 && str[match] != str[i])
match = table[match-1];
if (str[match] == str[i]) {
match++;
if ((i+1) % (i-match+1) == 0)
maxim = i+1;
}
table[i] = match;
}
printf("%d\n", maxim);
}
int main () {
freopen("prefix.in", "rt", stdin);
freopen("prefix.out", "wt", stdout);
//scanf("%d", &N);
cin >> N;
for (;N;--N) {
//scanf("%s", str+1);
//len = strlen(str+1);
cin >> str;
len = str.size();
prefix();
}
return 0;
}