| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 | 128 MB | 264 | 44 | 13 | 16.667% |
<그림 1>은 어떤 도시의 도로망을 나타내고 있다.
<그림 1>
이 도시의 지점은 숫자를 포함하는 동그라미로 표시되어 있고, 두 지점 사이에 있는 도로는 두 지점을 잇는 선으로 표시되어 있다. 이 도로망의 특성은 다음과 같다.
위의 세 가지 특성을 만족하는 도로망을 트리도로망이라 한다. 이제 이 도시에서 몇 개의 버스노선을 신설하려고 한다. 각각의 버스노선은 한 종점에서 반대편 종점까지 가는 도로와 지점으로 이루어진다. 종점이 될 수 있는 지점은 도로망에서 단말지점(자신과 연결된 다른 지점이 하나 뿐인 곳)이어야 한다. 예를 들어, <그림 1>에서 버스 종점이 될 수 있는 지점은 색칠된 1, 2, 5, 6, 9, 10번 지점이다.
<그림 1>과 같은 경우에 두 개씩의 단말지점으로 짝을 지어 세 개의 서로 다른 버스노선을 만들 수 있다. 단, 버스 노선을 설정하기 위해서는 다음 조건들을 만족해야 한다.
<그림 1>에서 제한조건을 만족하는 버스노선은 다음과 같다.
이 경우 가장 긴 노선의 길이가 4이다.
다음 <그림 2>와 같은 경우라면 위의 조건들을 만족시키는 버스노선은 존재하지 않는다. 왜냐하면 6-2-7-9가 버스노선이 되면 도로 (7, 8)은 다른 노선에 포함될 수 없고, 6번에서 시작하여 9번이 아닌 다른 곳이 종점이 된다면 9번의 다른 쪽 종점을 정할 수 없기 때문이다.
<그림 2>
트리도로망이 주어졌을 때, 위의 조건들을 만족하는 버스노선을 찾는 프로그램을 작성하시오.
첫째 줄에는 도로망에 있는 지점 개수 n(2 ≤ n ≤ 500)이 주어진다. 둘째 줄부터 n-1개의 도로에 대한 정보가 한 줄에 하나씩 주어진다. 만일 지점 i와 지점 j 사이에 도로가 있다면 "i j"로 한 줄에 표시한다. 또는 "j i"라고 표시될 수도 있다. 숫자 사이에는 빈칸이 하나 있다. 지점은 1부터 n까지의 서로 다른 숫자로 표시된다.
첫째 줄에는 제일 긴 노선의 길이를 출력한다. 둘째 줄에는 버스노선의 개수 m 을 출력한다. 다음 m 줄의 각 줄에는 위의 조건을 만족하는 버스노선 을 한 줄에 하나씩 출력한다. 한 버스노선은 노선에 포함된 지점의 개수와 한 종점 번호에서부터 다른 종점까지 거치는 지점 번호들을 차례로 출력한다. 지점 번호 사이에는 빈칸을 하나 둔다. 답이 여러 개인 경우는 그 중에 하나만 출력한다. 만일 위 네 가지 조건을 만족하는 답이 존재하진 않을 경우에는 첫째 줄에 숫자 0을 출력한다.
10 1 3 3 8 8 4 4 5 8 10 7 8 6 7 2 7 9 7
4 3 2 7 8 10 9 7 6 1 3 8 4 5