이진 트리
시간 제한1초메모리 제한1024 MB
루트가 0인 두 이진 트리가 주어집니다. 첫 번째 트리를 두 번째 트리와 동형으로 만들도록 서브트리를 옮기는 연산을 최대 N번 출력합니다.
문제
어제 바딤은 길에서 뿌리가 0이고 정점이 개인 이진 트리 를 발견했다. 하지만 그가 가장 좋아하는 트리는 뿌리가 0이고 정점이 개인 이진 트리 이다. 그래서 그는 다음 연산으로 트리 를 트리 로 바꾸기로 했다.
- 뿌리가 아닌 정점 를 임의로 고른다. 자신을 포함한 의 서브트리를 선택한 서브트리에 속하지 않는 정점 아래에 다시 붙인다. 결과는 뿌리가 0인 이진 트리여야 한다.
바딤은 이 연산으로 찾은 트리를 좋아하는 트리와 동형으로 만들 수 있다고 확신한다. 연산은 번 이하로 사용한다.
이진 트리는 각 정점이 최대 2개의 다른 정점의 조상인 트리이며, 뿌리는 조상이 없다.
두 뿌리 있는 트리가 동형이란 다음 중 하나를 만족하는 것이다.
- 두 트리가 모두 정점 하나로 이루어진다.
- 두 뿌리의 자식 수가 같고, 첫 번째 트리의 각 자식 서브트리가 두 번째 트리의 어떤 자식 서브트리와 동형이며, 두 번째 트리의 각 자식 서브트리도 첫 번째 트리의 어떤 자식 서브트리와 동형이다.
입력
첫 줄에 정수 ()이 주어진다. 찾은 트리와 좋아하는 트리의 정점 수이다.
둘째 줄에는 찾은 트리에서 번호 1부터 까지 정점의 부모 가 개 주어진다().
셋째 줄에는 좋아하는 트리에서 번호 1부터 까지 정점의 부모 가 개 주어진다().
두 트리는 모두 이진 트리임이 보장된다.
출력
첫 줄에 연산 횟수 을 출력한다().
이어서 개의 줄에 연산마다 정수 와 를 출력한다. 는 옮길 서브트리의 뿌리이고, 는 그 서브트리를 붙일 정점이다(, ). 는 의 서브트리에 속할 수 없다. 각 연산 후의 트리는 이진 트리여야 한다.
답이 존재함이 보장된다. 답이 여러 개이면 그중 아무것이나 출력한다.