外星机器人正在威胁宇宙,它使用一道光束,将摧毁所有的算法知识。我们必须阻止它!
幸运的是,我们了解机器人的工作原理。它开始时光束强度为 1,并会运行一个程序,该程序是一系列指令,将按从左到右的顺序逐一执行。每条指令属于以下两种类型之一:
C(代表“充能”):光束强度加倍。S(代表“射击”):发射光束,造成的伤害等于光束当前的强度。
例如,如果机器人的程序是 SCCSSC,机器人运行程序时会执行以下操作:
- 发射光束,造成 1 点伤害。
- 为光束充能,将光束强度加倍至 2。
- 为光束充能,将光束强度加倍至 4。
- 发射光束,造成 4 点伤害。
- 发射光束,造成 4 点伤害。
- 为光束充能,将光束强度增加至 8。
在这种情况下,该程序总共会造成 9 点伤害。
宇宙顶尖的算法专家开发了一种护盾,最多可以承受总计 $D$ 点伤害。但机器人当前的程序在运行时可能会造成超过该数值的伤害。
宇宙总统自愿飞往太空,在机器人运行程序之前对其进行修改。总统唯一能进行修改(且不被机器人察觉)的方法是交换两条相邻的指令。例如,总统可以通过交换第三条和第四条指令,将上述程序修改为 SCSCSC,从而将总伤害降低到 7。然后,总统可以再次修改程序,将其变为 SCSSCC,将伤害降低到 5,以此类推。
为了防止机器人产生怀疑,总统不想进行过多次数的修改。如果可能的话,请问为了确保程序造成的总伤害不超过 $D$,最少需要进行多少次修改?
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例包含一行,其中包含一个整数 $D$ 和一个字符串 $P$:护盾能承受的最大总伤害以及机器人的程序。
输出格式
对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是完成目标所需的最少修改次数,如果无法完成,则输出 IMPOSSIBLE。
数据范围
$1 \le T \le 100$
$1 \le D \le 10^9$
$2 \le \text{length of } P \le 30$
$P$ 中的每个字符均为 C 或 S。
样例
样例输入 1
6 1 CS 2 CS 1 SS 6 SCCSSC 2 CC 3 CSCSS
样例输出 1
Case #1: 1 Case #2: 0 Case #3: IMPOSSIBLE Case #4: 2 Case #5: 0 Case #6: 5
说明
注意,最后三个样例用例不会出现在测试集 1 中。
在样例 1 中,总统可以交换两条指令,将总伤害降低到 1,护盾可以承受。
在样例 2 中,总统不需要对程序进行任何修改,因为护盾已经可以承受它将造成的 2 点总伤害。
在样例 3 中,程序造成的伤害将超过护盾的承受能力,且修改程序对此毫无帮助。宇宙注定毁灭。
样例 4 使用了题目描述中提到的程序。题目演示了一种使用两次修改将总伤害降低到 5 的方法。仅使用一次修改无法将伤害降低到 6 或更低;请记住,总统只能交换相邻的指令。
在样例 5 中,机器人从不射击,因此它永远不会造成任何伤害。无需进行修改。
在样例 6 中,需要进行五次修改。请注意,即使两次修改交换了相同两个位置的指令,它们仍然计为单独的修改。