나무 껴안기

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

요약
n개의 점에 대한 2(n-1)개 간선을 왼쪽 루트 증가 트리와 오른쪽 루트 감소 트리로 나눌 수 있는지 판정하고, 가능하면 그 레이블을 출력한다.
난이도

어려움10점 중 8점

유형
그래프, 그리디, DFS, 구현
정답자
아직 제출이 없습니다

문제

옛날에 두 나무가 제자리를 잃고 서로를 향해 자라기 시작했다. 한 나무는 왼쪽에서, 다른 나무는 오른쪽에서 자랐다. 두 나무는 nn개의 점에서 만났다.

점을 왼쪽에서 오른쪽으로 1,2,…,n1, 2, \ldots, n이라 번호를 붙이면, 왼쪽 나무는 모든 점을 노드 1을 루트로 하는 하나의 부분 트리로 연결했고, 각 노드의 자식은 그 노드보다 큰 번호를 가진다. 이 부분 트리는 n−1n-1개의 간선 목록으로 나타낼 수 있다.

마찬가지로 오른쪽 나무도 모든 노드를 노드 nn을 루트로 하는 하나의 부분 트리로 연결했고, 각 노드의 자식은 그 노드보다 작은 번호를 가진다. 여기서 n−1n-1개의 간선이 더 나온다.

이제 2(n−1)2(n-1)개의 간선 전체 목록이 주어졌을 때, 어떤 간선이 어느 나무에 속하는지 알아내는 것이 반드시 쉬운 것은 아니다. 이 간선들이 두 나무의 합집합이었을 수 있는지 판별하고, 가능하다면 그 배정을 구할 수 있는가?

입력

첫째 줄에 정수 nn이 주어진다 (2≤n≤1052 \le n \le 10^5). 다음 2(n−1)2(n-1)개의 줄에는 두 정수 u,vu, v가 주어지며 (1≤u<v≤n1 \le u < v \le n), 이는 두 노드 uu와 vv를 잇는 간선을 나타낸다. 같은 쌍 (u,v)(u, v)가 여러 번 연결될 수 있다.

출력

주어진 간선들이 왼쪽에서 오른쪽으로, 또 오른쪽에서 왼쪽으로 자라는 두 나무의 합집합이 될 수 있으면, 길이 2(n−1)2(n-1)의 문자열을 출력한다. ii번째 문자가 L이면 ii번째 간선이 왼쪽 나무에서 온 것이고, R이면 오른쪽 나무에서 온 것이다. 그렇지 않으면 한 줄에 "impossible"을 출력한다. 답이 여러 개면 아무거나 하나 출력해도 된다.

힌트

첫 번째 예제에는 LLRRRRLL과 LLRLRRLR 두 가지 답이 있다.

두 번째 예제에는 답이 없다. LRLR은 오른쪽 나무가 거꾸로, 즉 왼쪽에서 오른쪽으로 자라는 것을 뜻하므로 올바르지 않다.

예제2

  1. 예제 1

    입력
    5
    1 2
    2 5
    2 3
    1 3
    3 5
    4 5
    3 4
    1 3
    
    예상 출력
    LLRRRRLL
    
  2. 예제 2

    입력
    3
    1 2
    1 2
    1 3
    1 3
    
    예상 출력
    impossible