Pagini recente » Istoria paginii runda/123123/clasament | Cod sursa (job #2401779) | Cod sursa (job #656672) | Cod sursa (job #2222829) | Cod sursa (job #1471637)
#include <cstdio>
#include <cstring>
#define DIM 1000007
using namespace std;
FILE *fin, *fout;
int pi[DIM], sol[DIM], t, ans;
char s[DIM];
void init()
{
memset(pi, 0, sizeof(pi));
memset(sol, 0, sizeof(sol));
memset(s, 0, sizeof(s));
ans = 0;
}
void citire()
{
scanf("%s", s+1);
}
void prefix()
{
int k = 0, sze = strlen(s + 1);
for(int i = 2; i<= sze; ++i)
{
while(k && s[k + 1] != s[i]) k = pi[k];
if(s[k + 1] == s[i]) ++k;
pi[i] = k;
}
}
void find_ans()
{
int sze = strlen(s + 1);
for(int i = sze; i>= 1; --i)
{
if(pi[i] && !(i%(i - pi[i]))) {ans = i;break;};
}
}
void afisare()
{
printf("%d\n", ans);
}
int main()
{
fin = freopen("prefix.in", "r", stdin);
fout = freopen("prefix.out", "w", stdout);
scanf("%d", &t);
for(int i = 1; i<= t; ++i)
{
init();
citire();
prefix();
find_ans();
afisare();
}
fclose(fin);
fclose(fout);
return 0;
}