일반화된 삽입 정렬
시간 제한2초메모리 제한256 MB
루트가 있는 트리의 각 정점에 놓인 순열을, 루트에서 정점까지의 경로를 회전하는 연산 최대 25,000번으로 정렬합니다.
문제
루트가 있는 트리가 주어진다. 정점은 로 번호가 매겨져 있고, 루트는 정점 이다. 정점 ()의 부모는 정점 이다.
처음에 정점 에는 정수 가 적혀 있다. 여기서 은 의 순열이다.
다음 연산을 최대 번 수행할 수 있다. 목표는 모든 에 대해 정점 의 값을 로 만드는 것이다.
- 정점 를 하나 고른다. 정점 에서 까지의 경로를 생각한다.
- 이 경로 위의 값을 회전시킨다. 경로의 각 간선 에 대해 정점 의 값을 연산 전 정점 의 값으로 바꾸고, 정점 의 값을 연산 전 정점 의 값으로 바꾼다.
- 정점 을 고르면 아무 일도 일어나지 않는다.
입력
입력은 다음 형식으로 주어진다.
...
...
출력
첫 줄에 연산 횟수 를 출력한다. 이어지는 개의 줄에 선택한 정점을 순서대로 출력한다.
제한
, , 은 의 순열이다.
힌트
샘플 1에서 첫 번째 연산 후 정점 의 값은 이다.
샘플 2에서 첫 번째 연산 후 정점 의 값은 이다. 두 번째 연산 후에는 이다.