만드는 중입니다

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

이진 트리

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

요약
루트가 0인 두 이진 트리가 주어집니다. 첫 번째 트리를 두 번째 트리와 동형으로 만들도록 서브트리를 옮기는 연산을 최대 N번 출력합니다.
난이도

어려움10점 중 9점

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

문제

어제 바딤은 길에서 뿌리가 0이고 정점이 NN개인 이진 트리 aa를 발견했다. 하지만 그가 가장 좋아하는 트리는 뿌리가 0이고 정점이 NN개인 이진 트리 bb이다. 그래서 그는 다음 연산으로 트리 aa를 트리 bb로 바꾸기로 했다.

  • 뿌리가 아닌 정점 vv를 임의로 고른다. vv 자신을 포함한 vv의 서브트리를 선택한 서브트리에 속하지 않는 정점 uu 아래에 다시 붙인다. 결과는 뿌리가 0인 이진 트리여야 한다.

바딤은 이 연산으로 찾은 트리를 좋아하는 트리와 동형으로 만들 수 있다고 확신한다. 연산은 NN번 이하로 사용한다.

이진 트리는 각 정점이 최대 2개의 다른 정점의 조상인 트리이며, 뿌리는 조상이 없다.

두 뿌리 있는 트리가 동형이란 다음 중 하나를 만족하는 것이다.

  1. 두 트리가 모두 정점 하나로 이루어진다.
  2. 두 뿌리의 자식 수가 같고, 첫 번째 트리의 각 자식 서브트리가 두 번째 트리의 어떤 자식 서브트리와 동형이며, 두 번째 트리의 각 자식 서브트리도 첫 번째 트리의 어떤 자식 서브트리와 동형이다.

입력

첫 줄에 정수 NN(2≤N≤1032 \le N \le 10^3)이 주어진다. 찾은 트리와 좋아하는 트리의 정점 수이다.

둘째 줄에는 찾은 트리에서 번호 1부터 N−1N-1까지 정점의 부모 paipa_i가 N−1N-1개 주어진다(0≤pai≤N−10 \le pa_i \le N-1).

셋째 줄에는 좋아하는 트리에서 번호 1부터 N−1N-1까지 정점의 부모 pbipb_i가 N−1N-1개 주어진다(0≤pbi≤N−10 \le pb_i \le N-1).

두 트리는 모두 이진 트리임이 보장된다.

출력

첫 줄에 연산 횟수 MM을 출력한다(0≤M≤N0 \le M \le N).

이어서 MM개의 줄에 연산마다 정수 vv와 uu를 출력한다. vv는 옮길 서브트리의 뿌리이고, uu는 그 서브트리를 붙일 정점이다(1≤v≤N−11 \le v \le N-1, 0≤u≤N−10 \le u \le N-1). uu는 vv의 서브트리에 속할 수 없다. 각 연산 후의 트리는 이진 트리여야 한다.

답이 존재함이 보장된다. 답이 여러 개이면 그중 아무것이나 출력한다.

예제2

  1. 예제 1

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

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