Pagini recente » Cod sursa (job #1567513) | Cod sursa (job #900550) | Cod sursa (job #1002554) | Cod sursa (job #2323815) | Cod sursa (job #1072999)
#include <cstdio>
using namespace std;
#define MAXN 1000005
char text[MAXN];
int fi_text[MAXN], T;
void read() {
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
}
int getLength(char *c) {
int length = 0;
while( *c != '\0' ) {
c++;
length++;
}
return length;
}
void compute() {
int length = getLength(text);
fi_text[0] = -1;
for(int i = 1; i < length; i++) {
int k = fi_text[i - 1];
while( k != -1 && text[i] != text[k + 1])
k = fi_text[k];
if (text[i] == text[k + 1])
k++;
fi_text[i] = k;
}
fi_text[length] = -2;
int len = 0;
for( int i = length - 1; i > 0; i-- ) {
if( fi_text[i] != -1 && (i + 1) % (i - fi_text[i]) == 0) {
len = i + 1;
break;
}
}
printf("%d\n", len);
}
int main() {
read();
scanf("%i", &T);
while( T > 0 ) {
scanf("%s", text);
compute();
T--;
}
return 0;
}