简单模拟就能搞的题~~~
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
char ch1[1000],ch2[1000],ch3[2000];
int main(){
int t;
scanf("%d",&t);
int cnt=0;
string str1,str2,str3;
while(++cnt<=t){
int c;
scanf("%d",&c);
cin>>str1>>str2>>str3;
for(int i=0;i<c;i++){
ch1[i]=str1[i];
ch2[i]=str2[i];
}
int flag=1,cnt1=0;;
while(1){
flag=1;
cnt1++;
for(int i=0;i<c;i++){ //洗牌时先放s2的牌再放s1的牌以此类推
ch3[2*i]=ch2[i];
ch3[2*i+1]=ch1[i];
}
for(int i=0;i<2*c;i++){
if(str3[i]!=ch3[i]){
flag=0;
break;
}
}
if(flag)
break;
for(int i=0;i<2*c;i++){ //0到l-1的牌给s1
if(i<c)
ch1[i]=ch3[i];
else
ch2[i%c]=ch3[i]; //l到2*l-1的牌给s2
}
for(int i=0;i<c;i++){
if(ch1[i]!=str1[i]||ch2[i]!=str2[i])
break;
else if(i==c-1&&ch1[i]==str1[i]&&ch2[i]==str2[i]){
flag=2;
}
}
if(flag==2)
break;
}
if(flag==1)
printf("%d %d\n",cnt,cnt1);
else if(flag==2)
printf("%d -1\n",cnt);
}
return 0;
}