1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <algorithm>
5
6 using namespace std;
7
8 #define MAXN 102
9
10 int N,C;
11 char s1[MAXN],s2[MAXN],s12[MAXN<<1],ans[MAXN<<1];
12
13 //*****************ELFhash***********
14 #define HASH 9901
15 char table[9901][MAXN];
16 int len;
17 int ELFHash(char a[MAXN])
18 {
19 int h = 0;
20 int x = 0;
21 for(int i=0;i<len;++i)
22 {
23 h = (h << 4) + (a[i]);
24 if ((x = h & 0xF0000000L) != 0)
25 {
26 h ^= (x >> 24);
27 h &= ~x;
28 }
29 }
30 return h % HASH;
31 }
32 bool is_in(char a[]) //ELFHash函数对字符串判重,没有的时候插入
33 {
34 int i=ELFHash(a);
35 while(strlen(table[i])>0&&strcmp(a,table[i])!=0)
36 i=(i+1)%HASH;
37 if(strlen(table[i])==0)
38 {
39 strcpy(table[i],a);
40 return false;
41 }
42 return true;
43 }
44 //***********************************
45
46 int main()
47 {
48 scanf("%d",&N);
49 for(int cas=1;cas<=N;cas++)
50 {
51 scanf("%d",&C);getchar();
52 len=C*2;
53 memset(s1,0,sizeof(s1));
54 memset(s2,0,sizeof(s2));
55 memset(s12,0,sizeof(s12));
56 memset(ans,0,sizeof(ans));
57 memset(table,0,sizeof(table));
58 gets(s1);
59 gets(s2);
60 gets(ans);
61 printf("%d ",cas);
62 int step=0;
63 while(1)
64 {
65 step++;
66 for(int i=0;i<len;i+=2)
67 s12[i]=s2[i/2];
68 for(int i=1;i<len;i+=2)
69 s12[i]=s1[i/2];
70 s12[len]='\0';
71 //cout<<s1<<endl;
72 //cout<<s2<<endl;
73 if(strcmp(ans,s12)==0)
74 {
75 printf("%d\n",step);
76 break;
77 }
78 else if(is_in(s12))
79 {
80 printf("-1\n");
81 break;
82 }
83 for(int i=0;i<C;i++)
84 s1[i]=s12[i];
85 for(int i=0;i<C;i++)
86 s2[i]=s12[i+C];
87 }
88 }
89 return 0;
90 }