一名生活在多山岛屿上的登山者已经攀登到了某个山峰,现在想要前往一个更高的山峰。
更具体地说,岛上的每个点都有一个大于零的海拔高度(海平面海拔为 $0$)。如果登山者当前所在的山峰海拔为 $E_i$,那么他的目标是到达某个海拔为 $E_j$($E_j > E_i$)的山峰。因为他当前处于一个山峰上,所以没有直接上坡的路径——为了到达更高的点,登山者首先需要下坡到某个较低的高度,然后才能再次上坡。下坡的过程往往不如上坡那样令人兴奋,因此,登山者希望最大化从当前位置到更高山峰的路径上最低点的海拔高度。
例如,如果岛屿的剖面图如上图所示,且登山者位于海拔为 $E_4$ 的山峰,那么有三个海拔更高的山峰($E_5$、$E_6$ 和 $E_7$)。但是,最低点海拔最高的路径是通往海拔为 $E_7$ 的山峰的路径——在这条路径上,他永远不会降到 $E_2$ 以下(在其他情况下,他将被迫降到 $E_1$)。如果他从 $E_5$ 出发,对应的最高最低海拔将是 $E_3$(通往 $E_6$ 的路径),但如果他从 $E_6$ 出发,则将是 $E_1$。
岛屿的地图是一个包含 $N \times M$ 个方格的二维矩形表格,描述了岛屿各部分的海拔——单元格中的数字描述了岛屿对应区域的海拔。如果两个单元格共享至少一个公共点,则它们是相邻的。因此,每个单元格(边界上的单元格除外)都与另外八个单元格相邻。路径是一个单元格序列,其中任意两个相邻的单元格在地图上也是相邻的。平坦区域(flat area)是指一个或多个具有相同海拔的单元格集合,其中任意两个单元格都可以通过一条仅经过该集合内单元格的路径相连。任意两个海拔相同的相邻单元格都属于同一个平坦区域。山峰(peak)是指一个平坦区域,其单元格没有任何与之相邻且海拔更高的单元格。
编写一个程序,找出岛上的所有山峰,并对于每个山峰,找出通往某个更高山峰的路径上,最低点海拔的最大可能值。对于岛上的最高山峰(即岛上没有比它更高的山峰),我们假设登山者将离开该岛去寻找更高的山峰,因此其对应的最低点海拔为 $0$(海平面)。
输入格式
输入的第一行包含两个正整数 $N$ 和 $M$($1 \le N, M \le 2000$,$N \times M \le 10^5$),分别表示地图的高度和宽度。
接下来的 $N$ 行包含岛屿地图的描述。其中每行包含 $M$ 个由空格隔开的整数 $E_{i,j}$($1 \le E_{i,j} \le 10^6$)。单元格 $E_{i,j}$(对应地图的第 $i$ 行第 $j$ 列)的海拔高度由输入中第 $i+1$ 行的第 $j$ 个数字给出。
输出格式
输出的第一行应包含一个整数 $P$,表示在岛上找到的山峰数量。
接下来的 $P$ 行,每行应包含两个整数:该山峰的海拔高度,以及通往某个更高山峰的路径上最低点海拔的最大可能值。
关于山峰的信息应按照其海拔高度降序排列;如果多个山峰的海拔高度相同,则应按照最低点海拔的降序排列。
样例
输入样例 1
6 6 21 16 9 11 6 7 21 21 10 14 15 9 18 20 8 9 13 14 11 10 9 9 8 13 8 12 12 14 13 8 7 13 12 9 5 1
输出样例 1
4 21 0 15 11 14 13 13 12
说明 1
所有山峰都用圆圈圈出。从海拔为 15 的山峰出发的一条可能路径用深色标出。
输入样例 2
5 3 16 14 16 14 14 15 12 17 16 12 13 10 16 11 16
输出样例 2
5 17 0 16 15 16 14 16 13 16 13
子任务
- 对于 $N \le 2$ 或 $M \le 2$ 的测试点,分值为 15 分。
- 对于 $P \le 500$ 的测试点,分值为 50 分。
- 对于 $P \le 5000$ 的测试点,分值为 80 分。