비템 숲은 다양한 색의 나무들이 있는 유명한 곳이다. 제일 오래되고 큰 참나무들 중 하나의 이름은 오스 베저이다.
오스 베저 트리는 N개의 정점과 N−1개의 간선으로 표현된다. 정점들은 0번부터 N−1번까지, 간선들은 1번부터 N−1번까지 번호가 붙어 있다. 각 간선은 두 개의 서로 다른 정점을 연결한다. 구체적으로 간선 i (1≤i<N)는 정점 i를 정점 P[i] (0≤P[i]<i)에 연결한다. 정점 P[i]를 정점 i의 부모라고 부르고 정점 i를 정점 P[i]의 자식이라고 부른다.
각 간선에는 색이 있다. 가능한 색은 M가지가 있고 1 이상 M 이하의 정수로 표현된다. 간선 i의 색은 C[i]이다. 서로 다른 간선의 색이 같을 수 있다.
주의: 위 정의에서 i=0인 경우에 해당하는 간선은 존재하지 않는다. 편의상 P[0]=−1과 C[0]=0으로 둔다.
예를 들어 오스 베저의 정점 수 N=18이고 색의 종류 수 M=3이라고 하자. 오스 베저의 17개 간선과 간선의 색들은 아래와 같다고 하자.
P = [-1, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 10, 11, 11]
C = [ 0, 1, 2, 3, 1, 2, 3, 1, 3, 3, 2, 1, 1, 2, 2, 1, 2, 3]
아래 그림이 이 경우를 보여준다.

아르파드는 숲을 연구하는 친구인데 나무의 특정 부분인 서브트리를 연구하는 것을 좋아한다. 각 r (0≤r<N)에 대해 r의 서브트리는 정점들의 집합 T(r)로 아래와 같이 정의된다.
- 정점 r은 T(r)에 속한다.
- 어떤 정점 x가 T(r)에 속하면 x의 모든 자식도 T(r)에 속한다.
- 위에 언급한 정점들만 T(r)에 속한다.
집합 T(r)의 원소 수는 ∣T(r)∣로 표현된다.
아르파드는 서브트리의 복잡하지만 재미있는 성질을 발견했다. 아르파드는 그 성질을 발견하기 위해 종이에 펜으로 많은 작업을 해 보았다. 이 문제를 푸는 사람도 그렇게 해야 할지도 모른다. 또 몇 가지 예제가 분석을 위해 주어질 것이다.
어떤 고정된 r에 대해 서브트리 T(r)의 정점들의 순열 v0,v1,…,v∣T(r)∣−1을 생각하자.
각 i (1≤i<∣T(r)∣)에 대해 f(i)를 색 C[vi]가 다음 i−1개 색의 수열에 등장하는 횟수라고 하자.
C[v1],C[v2],…,C[vi−1]
항상 f(1)=0임에 주의하라. 왜냐하면 f(1)의 정의에 등장하는 색 번호의 수열이 비어 있기 때문이다.
순열 v0,v1,…,v∣T(r)∣−1은 다음 조건을 모두 만족할 때 아름다운 순열이라고 말한다.
- v0=r.
- 각 i (1≤i<∣T(r)∣)에 대해 정점 vi의 부모는 정점 vf(i)이다.
각 r (0≤r<N)에 대해 T(r)에 있는 정점들의 아름다운 순열이 존재할 때, 그리고 그때에만 T(r)은 아름다운 서브트리라고 한다. 이 정의에 따르면 정점 하나로 구성된 서브트리는 항상 아름다운 서브트리이다.
위의 예제를 다시 보자. 서브트리들 T(0)과 T(3)은 아름답지 않다는 것을 보일 수 있다. 서브트리 T(14)는 정점 하나로 구성되므로 아름답다. 아래에서 서브트리 T(1)이 아름답다는 것을 보인다.
서로 다른 값들로 구성된 수열
[v0,v1,v2,v3,v4,v5,v6]=[1,4,5,12,13,6,14]
을 보자. 이 수열은 T(1)에 있는 정점들의 순열이다. 그림에서 정점들에 붙어 있는 레이블들은 각 정점이 순열에서 나타나는 위치를 표현한다.

이제 이 수열이 아름답다는 것을 보일 것이다.
- v0=1.
- f(1)=0이다. 왜냐하면 C[v1]=C[4]=1은 []에 0번 등장하기 때문이다. 그리고 v1의 부모는 v0이다. 즉, 정점 4의 부모는 정점 1이다. (엄밀하게는 P[4]=1이다.)
- f(2)=0이다. 왜냐하면 C[v2]=C[5]=2는 [1]에 0번 등장하기 때문이다. 그리고 v2의 부모는 v0이다. 즉, 정점 5의 부모는 정점 1이다.
- f(3)=1이다. 왜냐하면 C[v3]=C[12]=1은 [1,2]에 1번 등장하기 때문이다. 그리고 v3의 부모는 v1이다. 즉, 정점 12의 부모는 정점 4이다.
- f(4)=1이다. 왜냐하면 C[v4]=C[13]=2는 [1,2,1]에 1번 등장하기 때문이다. 그리고 v4의 부모는 v1이다. 즉, 정점 13의 부모는 정점 4이다.
- f(5)=0이다. 왜냐하면 C[v5]=C[6]=3은 [1,2,1,2]에 0번 등장하기 때문이다. 그리고 v5의 부모는 v0이다. 즉, 정점 6의 부모는 정점 1이다.
- f(6)=2이다. 왜냐하면 C[v6]=C[14]=2는 [1,2,1,2,3]에 2번 등장하기 때문이다. 그리고 v6의 부모는 v2이다. 즉, 정점 14의 부모는 정점 5이다.
T(1)에 있는 정점들의 아름다운 순열을 찾을 수 있으므로 서브트리 T(1)은 아름답다.
아르파드를 도와 오스 베저의 서브트리들 각각에 대해 아름다운지의 여부를 판단하는 프로그램을 작성하라.
구현 세부사항
다음 함수를 작성해야 한다.
int[] beechtree(int N, int M, int[] P, int[] C)
- N: 트리의 정점 개수
- M: 가능한 색의 개수
- P, C: 간선들을 표현한 크기 N인 배열들
- 이 함수는 크기 N인 배열 b를 리턴해야 한다. 각 r (0≤r<N)에 대해 b[r]은 T(r)가 아름다운 경우 1, 아닌 경우 0이어야 한다.
- 각 테스트 케이스에서 이 함수는 정확히 한 번 호출된다.
예제
예제 1
다음 호출을 보자.
beechtree(4, 2, [-1, 0, 0, 0], [0, 1, 1, 2])
해당하는 트리는 아래 그림과 같다.

T(1), T(2), T(3)의 세 서브트리는 각각 한 개의 정점을 가지므로 아름답다. T(0)은 아름답지 않다. 따라서 이 호출은 [0,1,1,1]을 리턴해야 한다.
예제 2
다음 호출을 보자.
beechtree(18, 3,
[-1, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 10, 11, 11],
[ 0, 1, 2, 3, 1, 2, 3, 1, 3, 3, 2, 1, 1, 2, 2, 1, 2, 3])
해당하는 트리는 본문의 예제와 같다.
이 호출은 [0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1]을 리턴해야 한다.
예제 3
다음 호출을 보자.
beechtree(7, 2, [-1, 0, 1, 1, 0, 4, 5], [0, 1, 1, 2, 2, 1, 1])
해당하는 트리는 아래 그림과 같다.

이 경우 T(0)이 유일하게 아름답지 않은 서브트리이다. 이 호출은 [0,1,1,1,1,1,1]을 리턴해야 한다.
제약 조건
- 3≤N≤200000
- 2≤M≤200000
- 0≤P[i]<i (각 i (1≤i<N)에 대해)
- 1≤C[i]≤M (각 i (1≤i<N)에 대해)
- P[0]=−1이고 C[0]=0
서브태스크
- (9점) N≤8이고 M≤500.
- (5점) 간선 i는 정점 i와 i−1을 연결한다. 즉, 각 i (1≤i<N)에 대해 P[i]=i−1이다.
- (9점) 정점 0을 제외한 각 정점은 정점 0에 바로 연결되어 있거나 정점 0에 바로 연결된 정점에 바로 연결되어 있다. 즉, 각 i (1≤i<N)에 대해 P[i]=0 혹은 P[P[i]]=0이 성립한다.
- (8점) 각 c (1≤c≤M)에 대해 색이 c인 간선은 최대 두 개 존재한다.
- (14점) N≤200이고 M≤500.
- (14점) N≤2000이고 M=2.
- (12점) N≤2000.
- (17점) M=2.
- (12점) 추가적인 제한이 없다.