그래미 정렬
시간 제한1초메모리 제한1024 MB
정점에 수가 적힌 연결 그래프에서 A에서 시작하는 단순 경로의 값을 회전시켜, 모든 정점이 A에서 B까지 증가하는 경로에 포함되도록 만들 수 있는지 판단합니다. 가능하면 연산 10000번 이내의 방법을 출력합니다.
문제
그래미는 정점 개로 이루어진 연결된 무방향 그래프 를 가지고 있다. 정점은 으로 번호가 매겨져 있다. 그중 두 정점 와 는 특별한 정점이다. 각 정점 에는 수 가 적혀 있고, 은 의 순열이다.
그래미는 정점에 적힌 수들이 너무 뒤죽박죽이라고 생각한다. 그래서 각 정점 에 대해 다음 조건을 모두 만족하는 경로가 존재하도록 수들을 재배열하려고 한다.
- 경로는 에서 시작해서 에서 끝난다.
- 경로는 정점 를 지난다.
- 경로를 따라 적힌 수가 엄격하게 증가한다.
한 번의 연산에서 그래미는 에서 시작해 임의의 정점에서 끝나는 단순 경로만 고를 수 있다. 그다음 그 경로 위의 수들을 시작점 방향으로 한 칸씩 당기고, 맨 앞의 수는 맨 뒤로 보낸다. 정식으로 말하면, 선택한 단순 경로의 정점에 시작부터 끝까지 가 적혀 있다면, 연산 후에는 이 정점들에 이 적힌다.
그래미는 연산을 최대 번까지만 할 수 있다. 요구한 대로 수를 재배열할 수 있는지 판단하고, 가능하다면 해법을 출력하라.
입력
첫 줄에 네 개의 정수 , , , (, , , )가 주어진다.
둘째 줄에는 개의 정수 ()이 주어진다. 은 순열임이 보장된다.
이어지는 개의 줄에는 각각 두 정수 와 (, )가 주어지며, 이는 와 사이에 양방향 간선이 있다는 뜻이다. 그래프는 연결되어 있으며, 임의의 두 정점 사이에 간선은 최대 하나만 있다.
출력
요구한 대로 수를 재배열할 수 없다면 -1을 출력한다.
그렇지 않다면 첫 줄에 연산 횟수 ()를 출력한다. 이어지는 개의 줄에는 선택한 단순 경로의 정점 수 를 출력하고, 이어서 경로의 정점 (, )를 출력한다. 는 서로 달라야 하며, 에서 경로를 이루어야 한다.
를 최소화할 필요는 없다. 여러 해가 있다면 그중 아무것이나 출력하면 된다.