스프링클러
시간 제한2초메모리 제한512 MB
순열을 이루는 N개의 살수기가 주어질 때, 어떤 살수기의 북동쪽이면서 다른 살수기의 남서쪽인 모든 정수 격자 직사각형의 개수를 10^9+7로 나눈 나머지를 구한다.
문제
농부 존의 밭은 크기의 정사각형이다. 남서쪽 모서리의 좌표는 이고, 북동쪽 모서리의 좌표는 이다. 존은 이 밭의 일부에 옥수수를 심으려고 한다.
밭의 몇몇 정수 좌표에는 양방향 스프링클러가 설치되어 있고, 스프링클러 하나가 물과 비료를 함께 뿌린다. 좌표 에 있는 스프링클러는 자기보다 북쪽이면서 동쪽인 부분에 물을 주고, 남쪽이면서 서쪽인 부분에 비료를 준다. 정확히 말하면 이고 인 모든 실수 좌표 에 물을 주고, 이고 인 모든 실수 좌표 에 비료를 준다.
존은 밭 안에서 네 꼭짓점의 좌표가 모두 정수인, 축에 평행한 직사각형을 하나 골라 그 안에 옥수수를 심는다. 옥수수가 자라려면 직사각형에 속한 모든 점이 물과 비료를 둘 다 받아야 한다. 또 옥수수를 심을 자리가 있어야 하므로 직사각형의 넓이는 보다 커야 한다.
옥수수를 심을 수 있는 직사각형이 몇 개인지 세어 존을 도와주자. 이 수가 매우 클 수 있으므로 로 나눈 나머지를 구한다.
입력
첫째 줄에 밭의 크기를 나타내는 정수 이 주어진다 ().
다음 개의 줄에는 공백으로 구분된 두 정수 와 가 주어진다 (). 좌표 에 스프링클러가 하나 있다는 뜻이다.
모든 열에 스프링클러가 정확히 하나씩 있고, 모든 행에도 정확히 하나씩 있다. 즉 좌표가 같은 스프링클러는 없고, 좌표가 같은 스프링클러도 없다.
출력
전체가 물을 받고 전체가 비료를 받는, 넓이가 보다 큰 직사각형의 개수를 로 나눈 나머지를 한 줄에 출력한다.