시장의 집
시간 제한2초메모리 제한1024 MB
각 집 위치마다 닫힌 직사각형 블록의 내부를 지나지 않고 시청에서 회전이 두 번 이하인 경로를 찾거나, 없으면 NO를 출력합니다.
문제
새 구역의 도로는 직사각형 격자를 이루도록 계획되었다. 모든 도로는 두 종류 중 하나이다. 남에서 북으로 뻗은 도로와 동에서 서로 뻗은 도로다. 평행한 도로는 정확히 1킬로미터 간격으로 놓이고, 각 구획은 1킬로미터 x 1킬로미터 크기다. 모든 도로는 양방향으로 통행할 수 있다.
도로를 건설한 뒤 이 배치가 늘 편리하지는 않다는 것이 드러났다. 대형 공장이나 다른 대형 시설을 짓거나 공원을 조성하려면 구획 하나로는 부족하기 때문이다. 시청은 각 대형 사업에 인접한 여러 구획으로 이루어진 직사각형 블록을 하나씩 배정하기로 했다. 사업이 시행되면 그 블록 안의 모든 도로는 통행이 막힌다. 다만 블록의 경계에 있는 도로는 여전히 통행할 수 있다. 모서리만 맞닿은 두 블록 사이의 통행은 막히지 않는다.
시장의 새 집 위치는 아직 정해지지 않았고 후보가 k개 있다. 시청은 시청에서 집까지의 경로가 얼마나 복잡한지 알고 싶어 한다. 경로에서 좌회전과 우회전을 합쳐 세 번 이상 회전해야 하면 그 경로는 복잡하다고 본다. 차량은 한 교차로에서 한 번만 회전할 수 있다(유턴 포함). 경로의 길이는 상관없고, 집은 어느 쪽에서 접근해도 된다. 시청에 있는 시장의 차는 항상 북쪽을 향하고 있으며, 곧바로 좌회전이나 우회전을 할 수 있지만 유턴은 할 수 없다.
각 후보 위치에 대해 시청에서 회전이 두 번 이하인 경로를 찾거나, 그런 경로가 없음을 알려야 한다. 회전 횟수를 최소화할 필요는 없다.
입력
첫 줄에 정수 n과 k가 주어진다(0 ≤ n ≤ 100000, 1 ≤ k ≤ 10). n은 대형 사업에 배정되어 통행이 막힌 블록의 수이고, k는 시장 집 후보 위치의 수다.
다음 n개 줄에는 블록마다 정수 u1, v1, u2, v2가 주어진다(, ). 이는 막힌 블록의 서로 반대쪽 모서리가 위치한 도로의 번호다.
마지막 k개 줄에는 집 후보 위치의 정수 x_i, y_i가 주어진다(, , 또는 ). 양수 x는 시청의 동쪽, 양수 y는 시청의 북쪽을 뜻한다.
시청과 어떤 집 후보 위치도 막힌 블록 안에 있지 않다. 막힌 블록끼리는 서로 겹칠 수 있다.
출력
입력에 나온 순서대로 각 후보 위치의 결과를 출력한다.
회전이 두 번 이하인 경로가 없으면 한 줄에 NO를 출력한다.
있으면 첫 줄에 YES, 둘째 줄에 회전 횟수 t(0 ≤ t ≤ 2)를 출력한다. 이어서 t개 줄에 회전 순서대로 교차로 정보를 출력한다. 각 줄은 정수 x, y, d 세 개로 이루어지며, x와 y는 교차로에 놓인 도로의 번호, d는 좌회전이면 -1, 우회전이면 1이다.
회전하는 교차로의 좌표는 절댓값이 를 넘지 않는다. 가장 짧은 경로가 여러 개면 그중 아무 것이나 출력한다.
힌트
아래 그림은 두 번째 예제를 나타낸다.
