#P3087. Shuffle'm Up

Shuffle'm Up

题目描述

扑克玩家在牌桌上的一个常见消遣是洗筹码堆。洗筹码的操作开始时有两个扑克筹码堆S1S1S2S2,每个堆包含CC个筹码。每个堆可能包含多种不同颜色的筹码。

实际的洗牌操作是通过将S1S1S2S2的筹码交错排列来完成的,如下所示(以C=5C = 5为例):
洗牌后得到的单个堆S12S12包含2×C2 \times C个筹码。S12S12的最底部筹码是S2S2的最底部筹码,其上是S1S1的最底部筹码。接着是S2S2的倒数第二个筹码,然后是S1S1的倒数第二个筹码,依此类推,直到S1S1的顶部筹码被放在S12S12的顶部。

洗牌操作完成后,S12S12会被分成两个新的堆:将S12S12最底部的CC个筹码作为新的S1S1,顶部的CC个筹码作为新的S2S2。然后可以重复洗牌操作以生成新的S12S12

本题要求你编写一个程序,判断是否可以通过多次洗牌操作得到特定的目标堆S12S12

输入格式

第一行输入一个整数NN1N10001 \leq N \leq 1000),表示数据集的数量。每个数据集包含四行输入:第一行是一个整数CC1C1001 \leq C \leq 100),表示初始堆S1S1S2S2中的筹码数量。第二行给出堆S1S1CC个筹码的颜色,从最底部的筹码开始。第三行给出堆S2S2CC个筹码的颜色,从最底部的筹码开始。第四行包含2×C2 \times C个大写字母(AAHH),表示经过零次或多次洗牌后希望得到的目标堆S12S12的颜色序列,最底部的筹码颜色最先给出。

输出格式

对于每个数据集,输出一行,包含数据集编号(从11NN)、一个空格和一个整数,表示得到目标堆所需的最小洗牌次数。如果无法通过洗牌得到目标堆,则输出1-1

样例输入

2  
4  
AHAH  
HAHA  
HHAAAAHH  
3  
CDE  
CDE  
EEDDCC  

样例输出

1 2  
2 -1  

题目来源

2006年大纽约地区程序设计竞赛