Byteasar 热爱在山间徒步。在远足过程中,他会探索附近所有的山脊和山谷。因此,为了规划行程并预估所需时间,他必须知道他即将前往的区域中山脊和山谷的数量。你需要帮助 Byteasar。
Byteasar 为你提供了一张他下一次探险区域的地图。地图是一个 $n \times n$ 的正方形。对于正方形中的每个方格 $(i,j)$(其中 $i,j \in \{1,…,n\}$),给出了其高度 $w(i,j)$。
如果两个方格有公共边或公共顶点,则称它们是相邻的(即方格 $(i,j)$ 与方格 $(i-1,j-1), (i-1,j), (i-1,j+1), (i,j-1), (i,j+1), (i+1,j-1), (i+1,j), (i+1,j+1)$ 相邻,前提是这些方格在地图范围内)。
我们称一组方格 $S$ 构成一个山脊(或山谷),如果:
- $S$ 中的所有方格高度相同,
- $S$ 构成地图的一个连通部分(即从 $S$ 中的任意方格出发,仅通过相邻方格移动且不离开集合 $S$,可以到达 $S$ 中的任何其他方格),
- 如果 $s \in S$ 且方格 $s' \notin S$ 与 $s$ 相邻,则 $w_s > w_{s'}$(对于山脊)或 $w_s < w_{s'}$(对于山谷)。
特别地,如果地图上所有方格的高度都相同,它们既构成一个山脊,也构成一个山谷。
你的任务是确定该地图所描述地形中山脊和山谷的数量。
编写一个程序:
- 从标准输入读取地图描述,
- 确定该地图所描述地形中山脊和山谷的数量,
- 将结果输出到标准输出。
输入格式
标准输入的第一行包含一个整数 $n$ ($2 \le n \le 1\,000$),表示地图的大小。接下来的 $n$ 行描述了地图的每一行。第 $(i+1)$ 行(对于 $i \in \{1,…,n\}$)包含 $n$ 个整数 $w(i,1), \dots, w(i,n)$ ($0 \le w_i \le 1\,000\,000\,000$),以空格分隔。这些数字表示地图第 $i$ 行各方格的高度。
输出格式
标准输出的第一行且仅包含一行,包含两个由空格分隔的整数,分别表示地图所描述地形中山脊的数量和山谷的数量。
样例
输入 1
5 8 8 8 7 7 7 7 8 8 7 7 7 7 7 7 7 8 8 7 8 7 8 8 8 8
输出 1
2 1
输入 2
5 5 7 8 3 1 5 5 7 6 6 6 6 6 2 8 5 7 2 5 8 7 1 0 1 7
输出 2
3 3
上图展示了山脊(实线)和山谷(虚线)。