P0699

Wormly

Wormly

Jonly 正在编写他的第一个电脑游戏。开场场景中,他希望主角 Wormly 穿过 Bridgely。

Wormly 是一条虫子,由 bb 个大小相同的圆形气泡和 LL 条腿组成。任意时刻,每条腿都必须位于某个气泡的正下方,并且每个气泡下方至多有一条腿。

Bridgely 原本由 nn 块木板组成,每块木板的宽度等于 Wormly 气泡的直径,但其中一些木板已经缺失。

在每个时刻,Wormly 恰好可以进行以下两种操作之一:

  1. 将一条腿向前移动,跨过任意数量的木板,这些木板可以缺失。移动后,该腿必须落在一块未缺失的木板上,且仍位于 Wormly 的某个气泡正下方。腿不能超过其他腿。
  2. 将所有气泡整体向前移动一块木板,同时保持所有腿所在的木板不变。移动后,每条腿仍必须位于某个气泡的正下方。

初始时,Wormly 的气泡正好位于桥最左侧的 bb 块木板上,腿位于桥最左侧的 LL 块木板上。最终,Wormly 的气泡必须正好位于桥最右侧的 bb 块木板上,腿必须位于桥最右侧的 LL 块木板上。

保证桥最左侧和最右侧的 LL 块木板均未缺失。求 Wormly 到达终点所需的最少操作次数。如果无法满足条件到达终点,则输出 IMPOSSIBLE。

输入格式

第一行包含一个正整数 TT,表示测试数据组数,满足 1≤T≤1001\le T\le 100。

接下来有 TT 组测试数据。每组数据包含:

  • 第一行包含三个整数 LL、bb 和 nn,分别表示腿的数量、气泡的数量和桥的长度,满足 1≤L≤b≤n≤1061\le L\le b\le n\le 10^6。
  • 第二行包含一个长度为 nn 的 0101 字符串。第 ii 个字符为 1 表示第 ii 块木板存在,为 0 表示第 ii 块木板缺失。

输出格式

对于每组测试数据,输出一行。

如果 Wormly 可以到达终点,输出一个整数,表示所需的最少操作次数;否则输出 IMPOSSIBLE。

样例输入

3
1 2 2
11
2 3 5
11011
1 3 5
11011

样例输出

1
IMPOSSIBLE
5

样例解释

第 33 组测试数据的一种最优操作顺序为:移动腿、移动气泡、移动腿、移动气泡、移动腿,共需要 55 步。

数据范围

  • 1≤T≤1001\le T\le 100;
  • 1≤L≤b≤n≤1061\le L\le b\le n\le 10^6;
  • 输入字符串的长度为 nn,且仅由 0 和 1 组成;
  • 桥最左侧和最右侧的 LL 块木板均未缺失。

来源与许可

本题题面与测试数据整理自 BZOJ 2268。

样例 1

输入

3
1 2 2
11
2 3 5
11011
1 3 5
11011

输出

1
IMPOSSIBLE
5