地质学家有时会根据雨水流向将土地划分为不同的区域,这些区域被称为流域。
给定一张海拔地图(一个二维海拔数组),请为地图上的每个位置分配一个标签,使得属于同一流域的位置具有相同的标签,并遵循以下规则:
- 从每个单元格出发,水最多流向其 4 个相邻单元格中的一个。
- 对于每个单元格,如果其 4 个相邻单元格的海拔都不低于当前单元格,则水不会流动,该单元格被称为汇点。
- 否则,水会从当前单元格流向海拔最低的相邻单元格。
- 如果存在多个海拔最低的相邻单元格,水将按照以下优先顺序选择方向:北、西、东、南。
所有直接或间接流向同一个汇点的单元格都属于同一个流域。每个流域用一个唯一的小写字母标记,标记方式需满足:当将地图的行从上到下连接起来时,得到的字符串在字典序上最小。(特别地,最西北侧单元格所在的流域总是被标记为 'a'。)
输入格式
输入文件的第一行包含地图的数量 $T$。接下来是 $T$ 个地图,每个地图的第一行包含两个整数 $H$ 和 $W$,分别表示地图的行数和列数。接下来的 $H$ 行,每行包含 $W$ 个整数,表示从北到南、从西到东各单元格的海拔高度。
输出格式
对于每个测试用例,输出 $1+H$ 行。第一行的格式必须为:
Case #$X$:
其中 $X$ 是从 1 开始的测试用例编号。接下来的 $H$ 行必须列出每个单元格的流域标签,顺序与输入中的顺序一致。
数据范围
$T \le 100$
小数据集(10 分)
$1 \le H, W \le 10$
$0 \le \text{海拔} < 10$
最多有两个流域。
大数据集(23 分)
$1 \le H, W \le 100$
$0 \le \text{海拔} < 10,000$
最多有 26 个流域。
样例
样例输入 1
4 3 3 9 6 3 5 9 6 3 5 9 1 10 0 1 2 3 4 5 6 7 8 7 2 3 7 6 7 7 6 7 5 5 1 2 3 4 5 2 9 3 9 6 3 3 0 8 7 4 9 8 9 8 5 6 7 8 9
样例输出 1
Case #1: a b b a a b a a a Case #2: a a a a a a a a a b Case #3: a a a b b b Case #4: a a a a a a a b b a a b b b a a b b b a a a a a a
说明
在 Case #1 中,右上角和左下角是汇点。对角线上的水流向左下角,因为该方向的海拔更低(5 低于 6)。