만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

시장의 집

시간 제한2초메모리 제한1024 MB

요약
각 집 위치마다 닫힌 직사각형 블록의 내부를 지나지 않고 시청에서 회전이 두 번 이하인 경로를 찾거나, 없으면 NO를 출력합니다.
난이도

어려움10점 중 8점

유형
기하, 정렬, 구간
정답자
아직 제출이 없습니다

문제

새 구역의 도로는 직사각형 격자를 이루도록 계획되었다. 모든 도로는 두 종류 중 하나이다. 남에서 북으로 뻗은 도로와 동에서 서로 뻗은 도로다. 평행한 도로는 정확히 1킬로미터 간격으로 놓이고, 각 구획은 1킬로미터 x 1킬로미터 크기다. 모든 도로는 양방향으로 통행할 수 있다.

도로를 건설한 뒤 이 배치가 늘 편리하지는 않다는 것이 드러났다. 대형 공장이나 다른 대형 시설을 짓거나 공원을 조성하려면 구획 하나로는 부족하기 때문이다. 시청은 각 대형 사업에 인접한 여러 구획으로 이루어진 직사각형 블록을 하나씩 배정하기로 했다. 사업이 시행되면 그 블록 안의 모든 도로는 통행이 막힌다. 다만 블록의 경계에 있는 도로는 여전히 통행할 수 있다. 모서리만 맞닿은 두 블록 사이의 통행은 막히지 않는다.

시장의 새 집 위치는 아직 정해지지 않았고 후보가 k개 있다. 시청은 시청에서 집까지의 경로가 얼마나 복잡한지 알고 싶어 한다. 경로에서 좌회전과 우회전을 합쳐 세 번 이상 회전해야 하면 그 경로는 복잡하다고 본다. 차량은 한 교차로에서 한 번만 회전할 수 있다(유턴 포함). 경로의 길이는 상관없고, 집은 어느 쪽에서 접근해도 된다. 시청에 있는 시장의 차는 항상 북쪽을 향하고 있으며, 곧바로 좌회전이나 우회전을 할 수 있지만 유턴은 할 수 없다.

각 후보 위치에 대해 시청에서 회전이 두 번 이하인 경로를 찾거나, 그런 경로가 없음을 알려야 한다. 회전 횟수를 최소화할 필요는 없다.

입력

첫 줄에 정수 n과 k가 주어진다(0 ≤ n ≤ 100000, 1 ≤ k ≤ 10). n은 대형 사업에 배정되어 통행이 막힌 블록의 수이고, k는 시장 집 후보 위치의 수다.

다음 n개 줄에는 블록마다 정수 u1, v1, u2, v2가 주어진다(−109≤u1<u2≤109-10^9 \le u_1 < u_2 \le 10^9, −109≤v1<v2≤109-10^9 \le v_1 < v_2 \le 10^9). 이는 막힌 블록의 서로 반대쪽 모서리가 위치한 도로의 번호다.

마지막 k개 줄에는 집 후보 위치의 정수 x_i, y_i가 주어진다(∣xi∣≤109|x_i| \le 10^9, ∣yi∣≤109|y_i| \le 10^9, xi≠0x_i \ne 0 또는 yi≠0y_i \ne 0). 양수 x는 시청의 동쪽, 양수 y는 시청의 북쪽을 뜻한다.

시청과 어떤 집 후보 위치도 막힌 블록 안에 있지 않다. 막힌 블록끼리는 서로 겹칠 수 있다.

출력

입력에 나온 순서대로 각 후보 위치의 결과를 출력한다.

회전이 두 번 이하인 경로가 없으면 한 줄에 NO를 출력한다.

있으면 첫 줄에 YES, 둘째 줄에 회전 횟수 t(0 ≤ t ≤ 2)를 출력한다. 이어서 t개 줄에 회전 순서대로 교차로 정보를 출력한다. 각 줄은 정수 x, y, d 세 개로 이루어지며, x와 y는 교차로에 놓인 도로의 번호, d는 좌회전이면 -1, 우회전이면 1이다.

회전하는 교차로의 좌표는 절댓값이 10910^9를 넘지 않는다. 가장 짧은 경로가 여러 개면 그중 아무 것이나 출력한다.

힌트

아래 그림은 두 번째 예제를 나타낸다.

예제2

  1. 예제 1

    입력
    2 1
    0 2 2 4
    1 0 4 2
    3 3
    
    예상 출력
    YES
    2
    0 2 1
    3 2 -1
    
  2. 예제 2

    입력
    0 2
    0 -1
    0 1
    
    예상 출력
    NO
    YES
    0