밥은 이름난 건축업자다. 땅을 사서 그 위에 집을 지으려 하는데, 땅의 높이가 칸마다 달라서 문제가 생겼다.
땅은 직사각형이고 N개의 행과 M개의 열, 즉 N×M개의 정사각형 칸으로 나뉜다. 밥이 지을 집도 직사각형이고, 네 변은 땅의 변과 평행하며 꼭짓점은 칸의 꼭짓점과 만난다. 집이 덮는 칸의 높이는 모두 같아야 한다. 높이가 다르면 집이 무너진다.
집을 지을 수 있는 방법이 몇 가지인지 구하라. 한 칸만 덮는 집도 한 가지로 센다.
첫째 줄에 정수 N과 M이 주어진다. (1≤N,M≤1000)
다음 N개 줄에는 각각 정수 M개가 주어진다. j번째 수 aij는 i번째 행 j번째 칸의 높이다. (1≤aij≤109)
입력의 양이 매우 많으므로 빠른 입력 방법을 쓰는 편이 좋다. 예를 들어 C++에서는 cin 대신 scanf를, Java에서는 Scanner 대신 BufferedReader를 쓴다.
집을 지을 수 있는 방법의 수를 한 줄에 출력한다.
첫 번째 예제에서 가능한 집터를 몇 가지 들면, 마주 보는 두 꼭짓점이 (0,0)과 (1,1)인 직사각형과 (0,0)과 (0,2)인 직사각형은 높이가 2이고, (2,0)과 (2,2)인 직사각형과 (1,2)와 (2,2)인 직사각형은 높이가 1이다. 괄호 안의 첫 번째 수는 행 번호, 두 번째 수는 열 번호이며 0부터 센다.