Pagini recente » Cod sursa (job #582565) | Cod sursa (job #1875871) | Cod sursa (job #240838) | Cod sursa (job #2138196) | Cod sursa (job #1627935)
#include <cstring>
#include <fstream>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
#define N 1000001
char A[N];
int t, n, pred[N];
inline int construiestePred()
{
int i, k = 0;
//pred[1] = 0;
for(int i = 2; i <= n; i++)
{
while(k != 0 && A[i] != A[1 + k])
k = pred[k];
if(A[i] == A[1 + k])
k++;
pred[i] = k;
}
i = n;
while(i > 0 && (pred[i] == 0 || i % (i - pred[i]) != 0))
i--;
return i;
}
int main()
{
in >> t;
while(t--)
{
in >> (1 + A);
n = strlen(1 + A);
out << construiestePred() << '\n';
}
return 0;
}