트리 불 끄기
시간 제한2초메모리 제한1024 MB
나무 모양 그래프에서 밥이 정점을 떠날 때마다 그 정점의 전구를 뒤집으며 시작점 a에서 모든 전구를 4N번 이내로 끄는 경로를 찾습니다.
문제
개의 정점으로 이루어진 트리가 있다. 트리는 간선에 방향이 없는 연결 그래프이며, 임의의 두 정점을 잇는 최단 경로가 하나뿐이다. 각 정점에는 전구와 스위치가 있다. 전구는 켜져 있거나 꺼져 있으며, 정점의 스위치를 누르면 그 정점의 전구 상태가 바뀐다. 켜진 전구는 꺼지고, 꺼진 전구는 켜진다.
밥은 이 트리에 사는 나무늘보이다. 밥은 처음에 번 정점에 있으며, 다음 절차를 0번 이상 수행해 트리의 전구를 모두 꺼진 상태로 만들려고 한다.
- 밥이 번 정점에 있다고 하자. 번 정점과 인접한 번 정점을 고른 뒤, 번 정점의 스위치를 누르고 번 정점으로 이동한다.
밥을 도와 위 절차를 번 이하로 수행해 트리의 전구를 모두 꺼진 상태로 만들 수 있는 방법을 찾아 주자. 이러한 방법이 항상 존재함은 문제의 조건에서 증명할 수 있다.
입력
첫 번째 줄에 정점의 개수 과 밥이 처음에 위치한 정점의 번호 가 공백으로 구분되어 주어진다. (; )
두 번째 줄에 전구의 상태를 나타내는 길이 의 문자열 가 주어진다. 번 정점의 전구가 켜져 있으면 번째 문자는 \tt{'1'}이고, 꺼져 있으면 \tt{'0'}이다.
세 번째 줄부터 개의 줄에 걸쳐 각 간선이 연결하는 두 정점의 번호 , 가 공백으로 구분되어 주어진다. ()
주어진 그래프는 올바른 트리임이 보장된다.
출력
첫 번째 줄에 수행할 절차의 횟수 를 출력한다. ()
두 번째 줄에 각 절차에서 선택한 정점을 나타내는 개의 정수 를 공백으로 구분해 출력한다. 번 정점은 번 정점과 인접해야 하며, 인 모든 에 대해 번 정점은 번 정점과 인접해야 한다.
전구를 모두 꺼진 상태로 만드는 방법이 여러 가지라면 그중 하나만 출력한다. 수행하는 절차의 수가 최소일 필요는 없다.
힌트
예제에서 밥이 따르는 절차와 그에 따른 전구의 상태는 아래와 같다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 꺼진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 꺼진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 켜진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 꺼진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 꺼진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 켜진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 켜진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 꺼진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 꺼진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 켜진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 꺼진다.
- 밥이 번 정점으로 이동하고, 번 정점의 전구가 꺼진다.
총 12번의 절차를 수행했으며, 절차가 끝난 뒤 트리의 전구는 모두 꺼진 상태이다.