Pagini recente » Cod sursa (job #2390471) | Cod sursa (job #109782) | Cod sursa (job #2607823) | Cod sursa (job #1227001) | Cod sursa (job #2195103)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("prefix.in");
ofstream cout ("prefix.out");
const int nmax = 1000000;
int t, n;
char pat[1 + nmax];
int lps[1 + nmax];
int main() {
cin >> t;
for(; t; t--) {
cin >>pat;
n = strlen(pat);
int j = 0, i = 1;
lps[0] = 0;
while(i <n) {
if(pat[j] == pat[i]) {
j++;
lps[i] = j;
i++;
} else {
if(j)
j = lps[j-1];
else {
lps[i] = 0;
i++;
}
}
}
i = n-1;
while(i >= 0 && ((i+1) % (i+1 - lps[i]) || lps[i] == 0))
i--;
cout << i+1 << "\n";
}
return 0;
}