#include <cstdio>
#include <cstring>
const int maxn = 20000;
struct node{node *ch[26], *f; int l, xx;} a[maxn], *head, *last;
char ch1[maxn], ch2[maxn], s1[maxn], s2[maxn];
int n, top, ok, t;
void add(int x)
{
node *p = &a[++top], *mid;
p->l = last->l + 1;
p->xx = p->l;
mid = last, last = p;
for (; mid && !mid->ch[x]; mid = mid->f) mid->ch[x] = p;
if (!mid) p->f = head; else
if (mid->l + 1 == mid->ch[x]->l) p->f = mid->ch[x]; else
{
node *q = mid->ch[x], *r = &a[++top];
*r = *q, q->f = p->f = r;
r->l = mid->l + 1;
r->xx = p->l;
for (; mid && mid->ch[x] == q; mid = mid->f) mid->ch[x] = r;
}
}
void work(char *r1)
{
memset(a, 0, sizeof(a));
head = last = &a[0], top = 0;
for (int i = n; i < n + n; ++i) r1[i] = r1[i - n];
for (int i = 0; i < n + n; ++i) add(r1[i] - 'a');
last = head;
for (int i = 0; i < n; ++i)
for (int j = 0; j <= 25; ++j)
if (last->ch[j])
{
last = last->ch[j];
break;
}
printf("%d\n", last->xx - n + 1);
}
int main()
{
freopen("poj1509.in", "r", stdin);
freopen("poj1509.out", "w", stdout);
for (scanf("%d\n", &t); t; --t)
{
scanf("%s\n", ch1);
n = strlen(ch1);
work(ch1);
}
return 0;
}
#include <cstring>
const int maxn = 20000;
struct node{node *ch[26], *f; int l, xx;} a[maxn], *head, *last;
char ch1[maxn], ch2[maxn], s1[maxn], s2[maxn];
int n, top, ok, t;
void add(int x)
{
node *p = &a[++top], *mid;
p->l = last->l + 1;
p->xx = p->l;
mid = last, last = p;
for (; mid && !mid->ch[x]; mid = mid->f) mid->ch[x] = p;
if (!mid) p->f = head; else
if (mid->l + 1 == mid->ch[x]->l) p->f = mid->ch[x]; else
{
node *q = mid->ch[x], *r = &a[++top];
*r = *q, q->f = p->f = r;
r->l = mid->l + 1;
r->xx = p->l;
for (; mid && mid->ch[x] == q; mid = mid->f) mid->ch[x] = r;
}
}
void work(char *r1)
{
memset(a, 0, sizeof(a));
head = last = &a[0], top = 0;
for (int i = n; i < n + n; ++i) r1[i] = r1[i - n];
for (int i = 0; i < n + n; ++i) add(r1[i] - 'a');
last = head;
for (int i = 0; i < n; ++i)
for (int j = 0; j <= 25; ++j)
if (last->ch[j])
{
last = last->ch[j];
break;
}
printf("%d\n", last->xx - n + 1);
}
int main()
{
freopen("poj1509.in", "r", stdin);
freopen("poj1509.out", "w", stdout);
for (scanf("%d\n", &t); t; --t)
{
scanf("%s\n", ch1);
n = strlen(ch1);
work(ch1);
}
return 0;
}