달팽이가 크기의 격자 위를 느릿느릿 기어간다.


달팽이는 격자 첫 번째 행의 첫 번째 칸에서 오른쪽을 향한 상태로 앞으로 움직이기 시작한다. 달팽이가 격자의 바깥이나 이미 방문한 칸으로 움직이려고 하는 경우, 시계 방향으로 도 회전한 후 움직임을 계속한다. 단, 회전 후에도 방문하지 않은 칸으로 움직일 수 없는 경우 움직임을 중단한다. 이때 달팽이는 결국 모든 칸을 정확히 한 번씩 지나게 된다.
예를 들어, 일 때 크기의 격자 위에서 달팽이가 지나간 순서대로 각 칸에 번호를 적으면 아래 <그림 1>과 같다.
격자의 크기를 나타내는 정수 과 더불어 서로 다른 두 개의 번호 와 가 주어진다. 격자에서 달팽이가 지나간 후, 각 칸의 번호가 결정된 상태에서 와 가 적힌 칸들을 꼭짓점으로 하는 직사각형을 생각해보자. 예를 들어, <그림 1>에서 , 인 경우, 이 두 번호가 적힌 칸들을 꼭짓점으로 하는 직사각형은 <그림 2>와 같다. 만약, , 인 경우, 그것에 의해 결정된 직사각형은 <그림 3>과 같다.

격자의 크기를 나타내는 정수 과 달팽이가 지나간 칸 중 두 칸을 나타내는 서로 다른 두 개의 번호 와 가 주어질 때, 이 두 번호가 적힌 칸들을 꼭짓점으로 하는 직사각형이 정사각형인지 판별하는 프로그램을 작성하시오.
입력 형식
첫 줄에 테스트 케이스의 수를 나타내는 정수 가 주어진다. ()
이어지는 개의 줄에는 세 정수 , , 가 공백으로 구분되어 주어진다. ( )
출력 형식
총 개의 줄에 걸쳐, 각 테스트 케이스의 정답을 출력한다.
각 줄에는 크기의 격자에서 와 에 의해 결정된
사각형이 정사각형이면 YES, 아니면 NO를
출력한다.
예제
입력
9 2 1 3 2 2 4 2 1 4 3 5 9 3 3 8 3 3 7 6 10 22 6 7 15 6 19 27
출력
YES YES NO YES NO YES YES YES NO
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 17점
종류 2: 19점
종류 3: 18점
개의 테스트 케이스에서 값이 모두 같음.
종류 4: 25점
개의 테스트 케이스에서 값이 모두 같음.
종류 5: 21점
추가적인 제한 조건이 없음.
해설
먼저, 칸의 번호가 주어지면 그 칸의 위치를 효율적으로 찾는 방법을 생각해 봅시다. 격자판의 테두리에서 칸 이내로 떨어진 칸들의 번호는 연속한 구간을 이룹니다. 따라서, 에 대한 이분 탐색을 통해 찾고자 하는 칸이 테두리에서 얼마나 떨어져 있는지를 알아낼 수 있습니다. 이후에는 간단한 케이스 처리를 통해 칸의 좌표를 알아낼 수 있습니다.
이를 구현하면 각 쿼리에 대해 에 처리할 수 있습니다. 에 대한 이차 방정식을 세워 쿼리 당 에도 해결할 수 있습니다.