Pagini recente » Cod sursa (job #704801) | Cod sursa (job #704810) | Cod sursa (job #1614298) | Cod sursa (job #3214031) | Cod sursa (job #2181632)
#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;
void prec() {
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 main() {
freopen(InFile, "r", stdin);
freopen(OuFile, "w", stdout);
int T;
scanf("%d", &T);
while (T--) {
int found = 0;
scanf("%s", p);
N = strlen(p);
prec();
for (int i = 2; i <= N; ++i) {
int cur = f[i];
for (; cur > 0; cur = f[cur]) {
int L = i - cur;
if (i % L == 0)
break;
}
if(cur > 0)
found = max(found, i);
}
printf("%d\n", found);
}
return 0;
}