Prof. Z 认为他的家庭作业对大多数学生来说都太难了(还记得“无聊的作业”这个任务吗?)。令他惊讶的是,许多学生提交了正确的答案。他认为原因实际上是他用来测试学生程序的数据集太小,而不是作业任务本身难度低。他决定再次给学生布置同样的作业,但这次使用了规模巨大的测试用例。当然,他的学生们觉得这次的作业变得更加无聊了。他们再次需要你的帮助。
对于那些不知道 Prof. Z 上次给学生布置了什么作业的人:
你需要绘制一棵二叉搜索树(BST)的图形。 二叉搜索树(有时也称为有序或排序二叉树)是一种基于节点的二叉树数据结构,具有以下性质: 节点的左子树仅包含键值小于该节点键值的节点。 节点的右子树仅包含键值大于该节点键值的节点。 左子树和右子树也必须是二叉搜索树。 ——摘自维基百科
给定一个整数键值列表,按顺序插入到 BST 中,我们可以形成一棵唯一的 BST。此外,Prof. Z 希望学生们画出这棵 BST 的图形。
绘制 BST 图形的规则如下: 1. 1 个节点的 BST 图形是一个单独的 'o'(第 15 个小写拉丁字母)。 2. 如果 BST 有非空子树,在子树根节点的正上方画一个 '|',并在之前画的 '|' 正上方画一个 '+'。最后,在 '+' 所在的行中,使用最少数量(包括 0)的 '-' 来连接 '+'(对应于左子树或右子树)和 'o'(表示子树的父节点)。 3. 左子树(如果存在)必须画在其父节点的左侧。同样,右子树(如果存在)必须画在其父节点的右侧。 4. BST 根节点所在的列不得包含属于左子树或右子树的任何字符。 5. 对于 BST 的每个节点,其左子树的图形和右子树的图形在整棵树的图中不共享公共列。
整棵 BST 绘制完成后,我们从上到下对行进行编号,从 1 开始计数;同样,从左到右对列进行编号,从 1 开始计数。
由于树的规模很大,图形会变得非常大,以至于 Prof. Z 这次无法检查图形的每一个细节。因此,你只需要向 Prof. Z 提交该图形的 $M$ 个片段,而不是整张图。
输入格式
第一行包含一个整数 $T$,表示测试用例的数量。接下来是 $T$ 个测试用例。 对于每个测试用例: 第一行包含一个正整数 $N$ ($N \le 100000$)。 第二行包含 $N$ 个不同的整数,每个整数都可以用 32 位有符号整数表示。这些数字应按给定顺序依次插入到一棵空的 BST 中。 第三行包含一个整数 $M$ ($M \le 5$)。 接下来 $M$ 行,每行包含四个整数,分别是所需图形片段的左上角行号和列号,以及片段的行数 $R_i$ 和列数 $C_i$。所有输入整数均为正整数,且符合 32 位有符号整数范围,但 $R_i$ 和 $C_i$ 除外,它们均大于 0 且小于等于 200。
输出格式
对于每个测试用例: 第一行输出案例编号,从 1 开始计数。 接着输出 $M$ 个块,每个块包含 $R_i$(或更少,见下文)行。每行应包含恰好 $C_i$ 个字符。使用空格(ASCII 32)填充空白。但如果某一行仅包含空格,则不应输出该行。 在每个图形片段后输出一个空行。
样例
输入 1
3 3 3 1 2 1 1 1 5 3 6 4 5 6 1 3 2 1 1 1 8 10 10 2 6 7 4 5 3 1 9 10 8 2 1 1 5 5 3 6 5 5
输出 1
Case #1: +-o | o+ | o Case #2: +--o+ | | o-+ o+ | | +o o | o Case #3: +o--- | o +- | +o+ o+ | o-+ | +o+