蜂巢是由许多六边形棱柱状单元组成的,其中每个单元都有六个相邻单元,且每两个相邻单元共享一条边。此外,有些边是可通行的,而另一些则不是。
Hamilton 是一只勤劳的工蜂。他每天都在蜂巢中连接或断开某些相邻单元对。几天后,他将有机会亲自设计一个微小的单元块。这个块与外部断开连接,可以表示为 $n$ 行 $m$ 列的单元格,如下图所示。
为了切断两个单元之间的连接,他可能需要将一些边变为不可通行。他想知道,为了使块中的两个指定单元断开连接,他最少需要改变多少条边。请你帮他找出该块中每两个特殊单元之间所需改变的最少边数。为了避免输出过大的数据,请你报告这些最少边数之和。
输入格式
输入包含多个测试用例。第一行包含一个整数 $T$,表示测试用例的数量。接下来的内容描述所有测试用例。对于每个测试用例:
第一行包含两个整数 $n$ 和 $m$。
接下来的 $(4n + 3)$ 行描述该块,其中每行最多包含 $(6m + 3)$ 个字符。奇数行包含用加号(“+”)表示的网格顶点和水平边,偶数行包含对角边。
具体来说,一个单元由 6 个顶点和 6 条边描述。所有边字符将精确放置在相应顶点之间,边的描述如下:
- 如果边是不可通行的,其上边界或下边界表示为三个连续的减号(“-”),否则表示为三个连续的空格(“ ”);
- 每条对角边如果可通行,则表示为一个空格;否则,根据边的方向,表示为一个正斜杠(“/”)或一个反斜杠(“\”)字符。
此外,每个特殊单元的中心都有一个星号(“*”)字符。输入中的所有其他字符均为空格,且没有任何输入行包含行尾空格。
数据范围
- $1 \le T \le 100$
- $2 \le n, m \le 100$
- 保证每个非特殊单元都没有可通行的边。
- 所有测试用例中特殊单元的总数不超过 3000。
输出格式
对于每个测试用例,输出一行包含 “Case #x: y”(不含引号),其中 $x$ 是从 1 开始的测试用例编号,$y$ 是该测试用例的答案。
样例
输入 1
2 2 2 +---+ \ / \ + * +---+ \ / \ / +---+ * + / \ / + * + + \ / \ +---+ * + \ / +---+ 2 3 +---+ +---+ \ / \ / \ + * +---+ + \ / \ / \ / +---+ * +---+ / \ / \ + * +---+ * + \ / \ / \ / +---+ * +---+ \ / \ / +---+
输出 1
Case #1: 6 Case #2: 16