1 /*
2 * kmp
3 * 利用next[]数组的性质求周期
4 */
5 #include <stdio.h>
6 #include <string.h>
7 #define N 1000005
8
9 int next[N];
10 char str[N];
11
12 void indexNext() {
13 int i, k = 0;
14 next[1] = 0;
15 for (i=2; str[i]; ++i) {
16 while (k && str[k+1]!=str[i]) k = next[k];
17 if (str[k+1] == str[i]) ++k;
18 next[i] = k;
19 }
20 }
21
22 void solve() {
23 int i, j, k;
24 indexNext();
25 for (i=2; str[i]; ++i) {
26 if (!(i%(i-next[i])) && i/(i-next[i])>1) printf ("%d %d\n", i, i/(i-next[i]));
27 }
28 puts("");
29 }
30
31 int main() {
32 int n, i, j, k, t = 0;
33 str[0] = '#';
34 while (scanf("%d", &n), n) {
35 scanf ("%s", str+1);
36 printf ("Test case #%d\n", ++t);
37 solve();
38 }
39 return 0;
40 }