模拟
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
const int MAXL = 128;
map<string, bool> visit;
int len;
void _shuffle(char a[], char b[], char s[])
{
int cnt = 0;
for (int i = 0; i < len; i++)
{
s[cnt++] = b[i];
s[cnt++] = a[i];
}
}
void _rebuild(char s[], char a[], char b[])
{
for (int i = 0; i < len; i++) a[i] = s[i];
for (int i = len; i < len + len; i++) b[i - len] = s[i];
}
int main()
{
int n;
int kase = 0;
char a[MAXL], b[MAXL], aim[MAXL << 1];
char s[MAXL << 1];
scanf("%d", &n);
while(++kase <= n)
{
// init
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(aim, 0, sizeof(aim));
memset(s, 0, sizeof(s));
// input
scanf("%d", &len);
scanf("%s%s%s", a, b, aim);
a[len] = b[len] = aim[len<<1] = s[len<<1] = '\0';
// work
int cnt = 0;
while (true)
{
cnt++;
_shuffle(a, b, s);
if (!strcmp(s, aim))
{
printf("%d %d\n", kase, cnt);
break;
}
if (visit[s])
{
printf("%d -1\n", kase);
break;
}
else visit[s] = true;
_rebuild(s, a, b);
}
}
return 0;
}