만드는 중입니다

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

일반화된 삽입 정렬

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

요약
루트가 있는 트리의 각 정점에 놓인 순열을, 루트에서 정점까지의 경로를 회전하는 연산 최대 25,000번으로 정렬합니다.
난이도

어려움10점 중 8점

유형
트리, 시뮬레이션, 정렬
정답자
아직 제출이 없습니다

문제

루트가 있는 트리가 주어진다. 정점은 0,1,…,N−10, 1, \ldots, N-1로 번호가 매겨져 있고, 루트는 정점 00이다. 정점 ii (i=1,2,…,N−1i = 1, 2, \ldots, N-1)의 부모는 정점 pip_i이다.

처음에 정점 ii에는 정수 aia_i가 적혀 있다. 여기서 (a0,a1,…,aN−1)(a_0, a_1, \ldots, a_{N-1})은 (0,1,…,N−1)(0, 1, \ldots, N-1)의 순열이다.

다음 연산을 최대 25 00025\,000번 수행할 수 있다. 목표는 모든 ii에 대해 정점 ii의 값을 ii로 만드는 것이다.

  • 정점 vv를 하나 고른다. 정점 00에서 vv까지의 경로를 생각한다.
  • 이 경로 위의 값을 회전시킨다. 경로의 각 간선 (i,pi)(i, p_i)에 대해 정점 pip_i의 값을 연산 전 정점 ii의 값으로 바꾸고, 정점 vv의 값을 연산 전 정점 00의 값으로 바꾼다.
  • 정점 00을 고르면 아무 일도 일어나지 않는다.

입력

입력은 다음 형식으로 주어진다.

NN

p1p_1 p2p_2 ... pN−1p_{N-1}

a0a_0 a1a_1 ... aN−1a_{N-1}

출력

첫 줄에 연산 횟수 QQ를 출력한다. 이어지는 QQ개의 줄에 선택한 정점을 순서대로 출력한다.

제한

2≤N≤20002 \leq N \leq 2000, 0≤pi≤i−10 \leq p_i \leq i-1, (a0,a1,…,aN−1)(a_0, a_1, \ldots, a_{N-1})은 (0,1,…,N−1)(0, 1, \ldots, N-1)의 순열이다.

힌트

샘플 1에서 첫 번째 연산 후 정점 0,1,…,40, 1, \ldots, 4의 값은 4,0,1,2,34, 0, 1, 2, 3이다.

샘플 2에서 첫 번째 연산 후 정점 0,1,…,40, 1, \ldots, 4의 값은 3,1,0,2,43, 1, 0, 2, 4이다. 두 번째 연산 후에는 1,0,2,3,41, 0, 2, 3, 4이다.

예제2

  1. 예제 1

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

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