/*
这题考察对next数组的理解
next数组中的j本质上维护了从距离i最近的上一个重复串中与i对应的位置
因此如果i % (i - j) == 0 && i / (i - j ) > 1则这个刚好扫描到了重复的串
*/
#include <stdio.h>
#define MAX_N 1000000
char input[MAX_N + 3];
int next[MAX_N + 1];
int len;
void kmpNext(int len)
{
int i = 1, j = 0;
input[1] = getchar();
while(i <= len)
{
if(j == 0 || input[i] == input[j])
{
if(i % (i - j) == 0 && i / (i - j) > 1)
printf("%d %d/n", i, i / (i - j));
if(i == len)
break;
i++;
j++;
input[i] = getchar();
if(input[i] == input[j])
next[i] = next[j];
else
next[i] = j;
}
else
j = next[j];
}
}
int main()
{
int s = 0;
while(scanf("%d", &len) && len != 0)
{
getchar();
printf("Test case #%d/n", ++s);
kmpNext(len);
printf("/n");
}
return 0;
}