만드는 중입니다

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

유령

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

요약
잎 노드를 순환 도로로 잇은 트리가 주어질 때, 크기가 4 이하인 집합으로 이루어진 트리 분해를 만드는 문제입니다.
난이도

어려움10점 중 9점

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

문제

하나의 유령이 대한민국을 배회하고 있다. KOI 2022 2차 대회라는 유령이...

KOI 도시는 NN개의 교차로와 N−1N - 1개의 양방향 도로로 이루어져 있으며, 임의의 서로 다른 두 교차로를 도로만 사용해서 오갈 수 있다. 즉, 도시의 도로망은 트리 구조다. 도로는 2차원 평면 위에 있으며, 두 도로는 끝점을 제외한 위치에서 교차하지 않는다.

몇십 년 전까지만 해도 KOI 도시는 작은 마을이었다. 사람이 유입되고 규모가 커지면서 도시는 급격히 팽창했다. 이 과정에서 시장은 행정 편의를 위해 교차로에 11 이상 NN 이하의 번호를 매겼다. 이 번호 체계는 다음 성질을 만족한다.

  • 11번 교차로는 도시의 중심이며, 22개 이상의 도로와 인접함이 보장된다.
  • 교차로에 매겨진 번호는 11번 교차로를 루트로 한 트리의 전위 순회 순서 (Preorder) 중 하나다.
  • 모든 교차로에 대해, 인접한 (도로로 직접 연결된) 교차로 중 번호가 가장 작은 교차로를 생각하자. 이 교차로를 기준으로 시계 반대 방향으로 인접한 교차로의 번호를 나열하면, 번호는 증가한다.

KOI 도시에 사람이 많이 유입되면서 교통 체증이 심해졌다. 시장은 이를 해결하기 위해 교통 인프라가 가장 빈약한 도시들, 즉 도로 1개와만 인접한 교차로들을 외곽 순환 도로로 이었다. 도로 1개와만 인접한 교차로들의 번호를 증가하는 순서대로 나열한 리스트를 {v1,v2,…,vk}\{v_1, v_2, \dots, v_k\}라 하자. 시장은 모든 1≤i≤k1 \le i \le k에 대해 viv_i번 교차로와 v(i mod k)+1v_{(i \bmod k)+1}번 교차로를 잇는 양방향 도로를 건설했다. 번호 체계의 특성상, 외곽 순환 도로는 두 도로가 끝점을 제외한 위치에서 교차하지 않도록 이을 수 있다.

하지만 노동자들은 교통 체증이 해소되어 출퇴근 시간이 줄어들면 자본가들이 노동자를 착취하기 쉬워질 뿐이라고 본다. 그래서 트리를 그래프로 만드는 일을 반기지 않는다. 노동자들은 자본가들의 역겨운 수작에 넘어가지 않고, KOI 도시 트리에서 HLD와 센트로이드 분할을 할 수 있었던 좋은 옛날로 돌아가고 싶어 한다. 노동자들은 먼저 사회주의 혁명을 일으켜 자본가들을 몰아내고, 다음 조건을 만족하는 새로운 트리를 만들어 기존 KOI 도시의 구조를 재건하려 한다.

  • 새로운 트리의 정점은 4N4N개 이하다. 새로운 트리의 정점이 KK개일 때, 각 정점의 번호를 1,2,…,K1, 2, \ldots, K로 나타낸다.
  • 새로운 트리의 ii번째 정점에는 집합 XiX_i가 있으며, XiX_i는 {1,…,N}\{1, \ldots, N\}의 부분집합이다.
  • 원래 KOI 도시의 모든 도로 (u,v)(u, v)에 대해, uu와 vv를 모두 포함하는 집합 XiX_i가 존재한다. 여기서 모든 도로에는 원래 트리를 이루는 도로와 외곽 순환 도로가 모두 포함된다.
  • 모든 1≤j≤N1 \le j \le N에 대해, j∈Xij \in X_i를 만족하는 정점들의 집합을 SjS_j라 하자. SjS_j는 공집합이 아니어야 하며, 혁명적 집합이어야 한다.
  • 모든 ii에 대해 ∣Xi∣≤4|X_i| \le 4를 만족해야 한다. (∣Xi∣≤5|X_i| \le 5를 만족하면 부분 점수를 받을 수 있다.)

새로운 트리의 정점 부분집합 SS가 혁명적이라는 것은 다음과 같다. SS에 속하는 서로 다른 두 정점 uu, vv에 대해, SS에 속한 정점만 이용해서 새로운 트리 위에서 uu에서 vv로 오갈 수 있다면, "uu와 vv는 SS 위에서 연결되어 있다"고 한다. SS가 혁명적이라는 것은, SS에서 서로 다른 두 정점 uu, vv를 골랐을 때 uu와 vv가 항상 SS 위에서 연결되어 있음을 뜻한다.

예를 들어, 아래와 같은 새로운 트리를 생각하자.

S={1,2,3,4,5,6}S = \{1, 2, 3, 4, 5, 6\}이라면, (1,2)(1, 2), (3,5)(3, 5), (4,6)(4, 6)은 각각 SS 위에서 연결되어 있다. 그러나 (1,6)(1, 6)과 (2,6)(2, 6)은 각각 SS 위에서 연결되어 있지 않다.

노동자들을 도와, KOI 도시의 도로망이 주어졌을 때 새로운 트리와 각 정점의 집합 XiX_i를 출력하라.

입력

첫 번째 줄에 KOI 도시의 교차로 수 NN이 주어진다.

이후 N−1N - 1개의 줄이 주어진다. 이 중 ii번째 줄에는 정수 pip_i 하나가 주어진다. 이는 교차로 pip_i와 교차로 i+1i + 1을 잇는 양방향 도로가 존재한다는 뜻이다.

입력으로 주어지는 도로들은 외곽 순환 도로가 아니다.

출력

첫 번째 줄에 새로운 트리의 정점 수 KK를 출력하라. 1≤K≤4N1 \le K \le 4N을 만족해야 한다.

이후 KK개의 줄을 출력하라. ii번째 줄의 첫 번째 정수는 집합 XiX_i의 크기다. 이어서 XiX_i에 속하는 서로 다른 정수들을 공백으로 구분하여 출력한다.

이후 K−1K - 1개의 줄에 걸쳐 새로운 트리의 간선을 차례대로 출력하라.

정답이 항상 존재함을 증명할 수 있다.

제한

  • 4≤N≤100 0004 \le N \le 100\,000
  • 1≤pi≤i1 \le p_i \le i

힌트

XiX_i는 공집합이어도 된다.

만약 XiX_i의 크기 조건이 없다면, K=1K = 1, X1={1,2,…,N}X_1 = \{1, 2, \ldots, N\}으로 잡는 자명한 해가 존재한다.

예제1

  1. 예제 1

    입력
    4
    1
    1
    1
    
    예상 출력
    2
    4 1 2 3 4
    0
    1 2