다이아몬드 러시
시간 제한4초메모리 제한512 MB
n×n 격자에서 각 칸의 값은 (n^2)의 지수입니다. 질의마다 주어진 직사각형을 피해 갈 때 얻을 수 있는 최대 다이아몬드 수를 구합니다.
문제
크기의 격자가 있다. 가장 왼쪽 위 칸은 , 가장 오른쪽 아래 칸은 이다. 행 열의 칸 에는 개의 다이아몬드가 있다.
에서 출발해 까지 이동한다. 칸 에서는 격자를 벗어나지 않는 범위에서 또는 로 이동할 수 있다. 이동은 정확히 번 한다. 칸에 도착하면 그 칸의 다이아몬드를 모두 가져갈 수 있다. 시작점 과 도착점 의 다이아몬드도 포함된다.
일부 칸은 막혀 있지만 어느 칸이 막혀 있는지는 알 수 없다. 각 질의는 , 를 만족하는 칸들의 직사각형을 준다. 경로는 이 직사각형에 속한 칸을 하나도 지나지 않아야 한다. 가져갈 수 있는 다이아몬드의 최댓값을 구하라. 각 질의마다 유효한 경로가 적어도 하나 존재함이 보장된다.
입력
첫 줄에 테스트 케이스의 수 ()가 주어진다. 각 테스트 케이스는 다음과 같다.
첫 줄에 과 (, )가 주어진다. 이후 개의 줄에 걸쳐 번째 줄에 ()이 주어진다. 이후 개의 줄에 질의 (, )가 주어진다.
출력
각 질의에 대해 가져갈 수 있는 다이아몬드의 최댓값을 한 줄에 출력한다. 값이 매우 클 수 있으므로 로 나눈 나머지를 출력한다.