새로운 섬

시간 제한1초메모리 제한128 MB

요약
간선 i의 비용이 2^i인 그래프에서 연결성을 유지하고 모든 정점 쌍 거리가 원래의 두 배를 넘지 않도록 가장 저렴한 간선 집합을 제거한다.
난이도

어려움10점 중 8점

유형
그래프, 최단 경로, 그리디, 구현
정답자
아직 제출이 없습니다

문제

새로운 섬이 발견되었다. 건축가들이 이 섬의 주요 장소들을 잇는 도로 계획을 설계했지만, 예산이 부족하여 계획을 그대로 건설할 수 없다. 그래서 일부 도로를 없애 더 저렴한 계획으로 수정하려고 한다.

제안된 계획에서 각 도로는 11 이상 EE 이하의 서로 다른 번호(id)를 가지며(EE는 도로의 수), 번호가 ii인 도로의 비용은 정확히 2i2^i이다. 번호가 모두 다르므로 도로 비용은 서로 다른 22의 거듭제곱이다.

모든 장소가 여전히 연결된 상태를 유지하면서, 남은 도로들의 총비용이 최소가 되도록 일부 도로를 제거하려고 한다. 다만 도로를 마음대로 제거할 수는 없다. 제거한 뒤의 계획에서 임의의 두 장소 사이의 거리는 원래 계획에서의 거리의 두 배를 넘어서는 안 된다. 두 장소 사이의 거리는 그 둘을 잇는 경로에 포함된 도로 수의 최솟값이다.

원래 도로 계획이 그래프로 주어진다. 거리 제약을 지키면서 남은 총비용을 최소로 만드는 제거 방법을 구하여라. 비용이 서로 다른 22의 거듭제곱이므로 이러한 최적의 제거 방법은 유일하다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 두 정수 NN (1≤N≤2001 \le N \le 200)과 EE가 주어지며, 각각 장소(정점)의 수와 도로(간선)의 수이다. 이어지는 EE개의 줄 중 ii번째 줄에는 두 정수 viv_i와 uiu_i가 주어지고, 이는 번호가 ii인 도로가 장소 viv_i와 uiu_i를 잇는다는 뜻이다(도로는 주어진 순서대로 11번부터 EE번까지 번호가 매겨진다).

입력의 끝은 두 개의 00으로 이루어진 줄로 표시된다.

출력

각 테스트 케이스마다 한 줄에 제거한 도로의 개수를 출력하고, 이어서 제거한 도로들의 번호를 증가하는 순서로 출력한다. 제거한 도로가 없으면 00만 출력한다.

예제1

  1. 예제 1

    입력
    4 5
    1 2
    3 1
    4 1
    4 2
    3 4
    3 3
    1 2
    2 3
    3 1
    0 0
    
    예상 출력
    2 4 5
    1 3