Pagini recente » tema | Cod sursa (job #264914) | Profil doinaracu | Monitorul de evaluare | Cod sursa (job #2181640)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define mp make_pair
#define CHECK(x) if(!(x)) return false;
typedef pair<int, int> pii;
#ifdef INFOARENA
#define ProblemName "prefix"
#endif
#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif
const int MAXN = 1000010;
char p[MAXN];
int f[MAXN];
int N;
int solve() {
int found = 0;
f[0] = -1, f[1] = 0;
for (int i = 2; i <= N; ++i) {
int cur = f[i - 1];
for (; cur >= 0; cur = f[cur]) {
if (p[i - 1] == p[cur])
break;
}
f[i] = cur + 1;
int L = i - f[i];
if (f[i] > 0 && i % L == 0)
found = max(found, i);
}
return found;
}
int main() {
freopen(InFile, "r", stdin);
freopen(OuFile, "w", stdout);
int T;
scanf("%d", &T);
while (T--) {
scanf("%s", p);
N = strlen(p);
printf("%d\n", solve());
}
return 0;
}