有一个边长为 $W$ 的正方形,总共有 $W^2$ 个格子。每个格子中填入以下内容之一:
- 0 到 9 之间的数字;
- 加号 (+);
- 减号 (-)。
“方阵数学”是一种谜题。给定一个算术方阵,我们从任意数字格子出发,每次水平或垂直移动一格,最终停在一个数字格子上。遍历过程中得到的数学表达式将被求值,得到一个单一的结果。例如:
2+3 +4- 1+0
上述是一个大小为 $W = 3$ 的有效算术方阵。如果我们从 "2" 开始,向右水平移动,然后向下垂直移动,我们将得到 "2+4",其值为 "6"。如果我们继续向右水平移动,然后向上垂直移动,我们将得到 "2+4-3",其值为 "3"。
在“方阵数学”中,对每个格子使用的次数没有限制。从一个格子移动到相邻格子,然后再回到原格子是完全合法的。给定一个算术方阵和一系列查询,你的任务是找到一个能够计算出每个查询结果的“方阵数学”表达式。
输入格式
输入的第一行包含一个整数 $T$。接下来是 $T$ 组测试数据。每组测试数据的第一行包含两个整数 $W$ 和 $Q$。接下来 $W$ 行,每行包含 $W$ 个字符,表示算术方阵。不用担心,输入中的所有算术方阵都是格式良好的。最后一行包含一个由空格分隔的 $Q$ 个整数的列表,表示需要通过“方阵数学”计算出的查询值。你可以假设所有给定的值至少有一个可能的“方阵数学”解。
输出格式
对于每组测试数据,首先输出一行 "Case #$X$:",其中 $X$ 是测试数据的编号(从 1 开始)。然后,对于该测试数据中的每个查询,在单独的一行中打印出计算结果为该查询值的“方阵数学”表达式。 如果有多个可能的“方阵数学”表达式,请打印最短的那一个。如果长度仍然相同,则打印字典序最小的表达式。请记住,'+' 的字典序小于 '-'。
数据范围
内存限制:1 GB。
$1 \le T \le 60$
小数据 (12 分)
时间限制:3 秒。
$2 \le W \le 10$
$1 \le Q \le 20$
$1 \le \text{每个查询} \le 50$
大数据 (32 分)
时间限制:6 秒。
$2 \le W \le 20$
$1 \le Q \le 50$
$1 \le \text{每个查询} \le 250$
样例
样例输入 1
2 5 3 2+1-2 +3-4+ 5+2+1 -4-0- 9+5+1 20 30 40 3 2 2+1 +4+ 5+1 2 20
样例输出 1
Case #1: 1+5+5+9 3+4+5+9+9 4+9+9+9+9 Case #2: 2 5+5+5+5