N명의 루노(Runo)들이 2차원 평면 위에서 일을 하고 있다. 오늘 루노들의 일은 두 창고를 오가며 짐을 나르는 것이다.
루노들에게는 1번부터 N번까지 번호가 붙어있는데, i번 루노에게 배정된 두 창고의 위치는 점 (p_i,q_i)와 점 (r_i,s_i)이다.
루노들은 효율적인 것을 좋아하기 때문에, 각 루노는 자신에게 배정된 두 창고 사이를 최단경로를 따라 이동한다. 즉, 두 창고를 잇는 선분 위에서만 이동한다.
루노들을 관리하는 아인(AIN)이는 루노 하나의 위치가 주어질 때, 그 루노의 번호를 맞힐 수 있는 결정 트리(Decision tree)를 만들려고 한다.
결정 트리를 간략히 소개하면 다음과 같다.
아인이가 만들려는 결정 트리에서 결정 노드와 종단 노드의 정확한 명세는 다음과 같다.
결정 노드
종단 노드
아인이는 각 루노마다 그에 해당하는 종단 노드를 정확히 하나씩 만들려고 한다. 따라서 아인이가 만드는 결정 트리는 N개의 종단 노드와 N−1개의 결정 노드, 총 2N−1개의 노드를 가지게 된다.
아인이와 함께 정확한 결정 트리를 구성해 보자. 정확한 결정 트리란, 모든 루노에 대해 그 루노가 가질 수 있는 어떤 위치가 주어지더라도 주어진 위치가 그 루노의 것이라고 올바르게 판단할 수 있는 결정 트리를 의미한다.
첫 번째 줄에 일하는 루노의 수 N이 주어진다.
다음 N개의 줄에는 각 루노에게 배정된 두 창고의 정보가 주어진다. 이 중 i번째 줄에는 네 정수 p_i,q_i,r_i,s_i가 주어지며, 이는 i번 루노에게 (p_i,q_i)에 있는 창고와 (r_i,s_i)에 있는 창고가 배정되었다는 뜻이다.
입력으로 들어온 정보를 따라 정확한 결정 트리를 만들 수 있다면 첫 번째 줄에 Yes를 출력하고, 아니면 No를 출력한다.
Yes를 출력한 경우, 결정 트리를 전위 순회한 순서대로 2N−1개의 줄에 노드의 구성을 출력한다.
결정 노드는 ? a b c로 출력해야 하며, ∣a∣,∣b∣≤109,∣c∣≤1018의 범위를 가지는 정수여야 한다. 주어진 입력에 대해 정확한 결정 트리가 존재한다면 이 제한 안에서 충분히 결정 트리를 구성할 수 있음을 증명할 수 있다.
종단 노드는 ! i로 출력해야 하며, 출력에 1 이상 N 이하의 모든 정수가 i로 한 번씩 등장해야 한다.