扑克牌玩家在牌桌上的一种常见消遣是洗筹码堆。洗筹码的过程是从两堆筹码 $S_1$ 和 $S_2$ 开始,每堆包含 $C$ 个筹码。每堆筹码可能包含多种不同颜色的筹码。
实际的洗牌操作是通过将 $S_1$ 中的一个筹码与 $S_2$ 中的一个筹码交错放置来完成的,如下图所示(以 $C=5$ 为例):
生成的单个堆 $S_{12}$ 包含 $2 \times C$ 个筹码。$S_{12}$ 的最底层筹码是 $S_2$ 的最底层筹码。在该筹码之上是 $S_1$ 的最底层筹码。交错过程继续,取 $S_2$ 从下往上数的第 2 个筹码放在 $S_{12}$ 上,接着取 $S_1$ 从下往上数的第 2 个筹码,依此类推,直到 $S_1$ 的最顶层筹码被放置在 $S_{12}$ 的最上方。
洗牌操作完成后,$S_{12}$ 被分成两堆新筹码:取 $S_{12}$ 最底层的 $C$ 个筹码形成新的 $S_1$,取 $S_{12}$ 最顶层的 $C$ 个筹码形成新的 $S_2$。洗牌操作可以重复进行以形成新的 $S_{12}$。
对于本题,你需要编写一个程序来确定特定的结果堆 $S_{12}$ 是否可以通过将两堆筹码进行若干次洗牌操作后形成。
输入格式
输入的第一行包含一个整数 $N$ ($1 \le N \le 1000$),表示后续的数据集数量。
每个数据集包含四行输入。第一行指定一个整数 $C$ ($1 \le C \le 100$),表示每个初始堆($S_1$ 和 $S_2$)中的筹码数量。每个数据集的第二行指定了 $S_1$ 中 $C$ 个筹码的颜色,从最底层的筹码开始。每个数据集的第三行指定了 $S_2$ 中 $C$ 个筹码的颜色,从最底层的筹码开始。颜色用单个大写字母(A 到 H)表示。筹码颜色之间没有空格或分隔符。每个数据集的第四行包含 $2 \times C$ 个大写字母(A 到 H),表示对 $S_1$ 和 $S_2$ 进行零次或多次洗牌后期望得到的结果颜色。最底层筹码的颜色最先给出。
输出格式
每个数据集的输出由单行组成,显示数据集编号(1 到 $N$)、一个空格,以及一个整数值,该值是获得期望结果堆所需的最小洗牌次数。如果使用该数据集的输入无法达到期望结果,则输出 -1 表示洗牌次数。
样例
样例输入 1
2 4 AHAH HAHA HHAAAAHH 3 CDE CDE EEDDCC
样例输出 1
1 2 2 -1