Decision Tree

아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

NN명의 루노(Runo)들이 2차원 평면 위에서 일을 하고 있다. 오늘 루노들의 일은 두 창고를 오가며 짐을 나르는 것이다.

루노들에게는 11번부터 NN번까지 번호가 붙어있는데, ii번 루노에게 배정된 두 창고의 위치는 점 (p_i,q_i)(p\_i, q\_i)와 점 (r_i,s_i)(r\_i, s\_i)이다.

루노들은 효율적인 것을 좋아하기 때문에, 각 루노는 자신에게 배정된 두 창고 사이를 최단경로를 따라 이동한다. 즉, 두 창고를 잇는 선분 위에서만 이동한다.

루노들을 관리하는 아인(AIN)이는 루노 하나의 위치가 주어질 때, 그 루노의 번호를 맞힐 수 있는 결정 트리(Decision tree)를 만들려고 한다.

결정 트리를 간략히 소개하면 다음과 같다.

  • 결정 트리는 데이터가 주어질 때 그 데이터에 대해 어떤 의사 결정을 내리는 과정을 트리 형태로 나타낸 것이다.
  • 결정 트리에서의 의사 결정은 트리의 루트 노드에서 출발해 어떤 리프 노드(자식이 없는 노드)에 도착할 때까지 계속해서 자식 노드를 따라 내려가는 방식으로 이루어진다.
  • 결정 트리의 내부 노드들은 결정 노드(Decision node)라고 부르며, 다음에 방문할 자식 노드를 결정하는 규칙을 담고 있다.
  • 결정 트리의 리프 노드들은 종단 노드(Terminal node)라고 부르며, 최종 의사 결정 내용을 담고 있다.

아인이가 만들려는 결정 트리에서 결정 노드와 종단 노드의 정확한 명세는 다음과 같다.

  • 결정 노드

    • 내부 인자로 세 정수 aa, bb, cc를 가지며, 왼쪽 자식 노드와 오른쪽 자식 노드를 가지고 있다.
    • 주어진 위치 (x,y)(x,y)에 대해 ax+by+cax+by+c를 계산한다. 그리고 이 값이 양수라면 왼쪽 자식, 음수라면 오른쪽 자식으로 이동한다.
    • 만약, ax+by+cax+by+c의 값이 정확히 00이라면 루노의 번호를 맞히지 못한 것으로 판정하고 결정 과정을 마친다.
  • 종단 노드

    • 내부 인자로 정수 ii를 가지며, 자식 노드는 없다.
    • 주어진 위치가 ii번 루노의 것이라고 판단하고 결정 과정을 마친다.

아인이는 각 루노마다 그에 해당하는 종단 노드를 정확히 하나씩 만들려고 한다. 따라서 아인이가 만드는 결정 트리는 NN개의 종단 노드와 N1N-1개의 결정 노드, 총 2N12N-1개의 노드를 가지게 된다.

아인이와 함께 정확한 결정 트리를 구성해 보자. 정확한 결정 트리란, 모든 루노에 대해 그 루노가 가질 수 있는 어떤 위치가 주어지더라도 주어진 위치가 그 루노의 것이라고 올바르게 판단할 수 있는 결정 트리를 의미한다.

입력

첫 번째 줄에 일하는 루노의 수 NN이 주어진다.

다음 NN개의 줄에는 각 루노에게 배정된 두 창고의 정보가 주어진다. 이 중 ii번째 줄에는 네 정수 p_i,q_i,r_i,s_ip\_i, q\_i, r\_i, s\_i가 주어지며, 이는 ii번 루노에게 (p_i,q_i)(p\_i, q\_i)에 있는 창고와 (r_i,s_i)(r\_i, s\_i)에 있는 창고가 배정되었다는 뜻이다.

출력

입력으로 들어온 정보를 따라 정확한 결정 트리를 만들 수 있다면 첫 번째 줄에 Yes를 출력하고, 아니면 No를 출력한다.

Yes를 출력한 경우, 결정 트리를 전위 순회한 순서대로 2N12N-1개의 줄에 노드의 구성을 출력한다.

결정 노드는 ? a b c로 출력해야 하며, a,b109,c1018|a|, |b| \leq 10^9, |c| \leq 10^{18}의 범위를 가지는 정수여야 한다. 주어진 입력에 대해 정확한 결정 트리가 존재한다면 이 제한 안에서 충분히 결정 트리를 구성할 수 있음을 증명할 수 있다.

종단 노드는 ! i로 출력해야 하며, 출력에 11 이상 NN 이하의 모든 정수가 ii로 한 번씩 등장해야 한다.

제한

  • 2N2502 \leq N \leq 250
  • p_i,q_i,r_i,s_i108|p\_i|, |q\_i|, |r\_i|, |s\_i| \leq 10^8
  • (p_i,q_i)(r_i,s_i)(p\_i, q\_i) \neq (r\_i, s\_i)