题目描述
某种玩具由一个包含 2 列或更多列、1 行或更多行的网格组成,其中每个单元格包含一个 \ 斜坡、一个 / 斜坡,或者为空。最左侧和最右侧的列为空,底行也为空。小球被投入顶行并垂直下落,在斜坡上滑动。为了防止小球卡住,\ 斜坡单元格的左侧绝不会紧邻 / 斜坡单元格。
当一个小球被投入顶行时,它的移动遵循以下确定性规则:
位于空单元格中的小球移动到其正下方的单元格,除非它已经在底行,这种情况下它不再移动。
位于包含 \ 斜坡单元格中的小球移动到其右下方的单元格。
* 位于包含 / 斜坡单元格中的小球移动到其左下方的单元格。
为了充分展示该机制,用户在每一列中各投入一个球。小球之间互不干扰,且一个单元格中可能包含多个小球。
你的朋友有一个拥有 $C$ 列和未知行数的玩具。他们刚刚在每一列的顶行投入了一个球,并等待所有球停止移动。然后,他们统计了最终落在底行每个单元格中的球的数量,并给了你这些结果……但你认为他们可能弄错了。你能创建一个符合结果且行数尽可能少的布局吗?或者确定不存在这样的布局?
例如,如果你的朋友报告的值为 $3\ 0\ 0\ 2\ 0\ 1$,一种可能的解决方案如下。(注意,不需要使用最少数量的斜坡,也不需要每个斜坡都对球产生影响。)
.//\.. ./\./. ......
以下是小球穿过该网格时所走的路径:
输入格式
第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含一个整数 $C$:你朋友的落球玩具的列数。接下来一行包含 $C$ 个整数 $B_i$。第 $i$ 个整数表示根据你朋友提供的数据,最终落在底行从左往右第 $i$ 个单元格中的球的数量。
输出格式
对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 要么是 IMPOSSIBLE,要么是你的布局中的行数。如果 $y$ 不是 IMPOSSIBLE,则输出 $y$ 行,表示你提议的落球玩具布局,从上到下排列。使用 . 表示没有斜坡的单元格,使用 \ 或 / 表示斜坡。布局必须遵守题目描述中的所有规则。
数据范围
$1 \le T \le 100$。 $0 \le B_i \le C$,对于所有 $i$。 所有 $B_i$ 的总和(从 $1$ 到 $C$)等于 $C$。 时间限制:每个测试集 10 秒。 内存限制:1GB。
测试集 1 (可见)
$2 \le C \le 5$。
测试集 2 (隐藏)
$2 \le C \le 100$。
样例
输入 1
3 4 1 1 1 1 3 0 2 1 6 3 0 0 2 0 1
输出 1
Case #1: 1 .... Case #2: IMPOSSIBLE Case #3: 3 .//\.. ./\./. ......
说明
注意,最后一个样例不会出现在测试集 1 中。
以下布局是样例 1 的唯一有效解。(必须至少有一行,且包含更多行会使方案使用的行数多于所需。在底行包含任何斜坡是不合法的。)
....
在样例 2 中,如果不添加斜坡,无法阻止最左侧的球落到底行,但该列不能添加斜坡。
样例 3 是题目描述末尾提到的例子。注意,以下针对样例 3 的无效布局违反了多项规则:它使用的行数多于所需,在三个非法区域(最左列、最右列、底行)中包含斜坡,并且包含一个紧邻 / 斜坡左侧的 \ 斜坡。
\\..\/ ../.\/ ./../. ..../.