광케이블을 대신하는 무선망

연결된 다중 그래프가 주어질 때, 원래 차수와 다른 차수를 가진 정점 수가 최소가 되는 신장 트리를 정해진 구성 절차에 따라 출력한다.

어려움8그래프그리디트리정렬아직 제출이 없습니다시간 제한2초메모리 제한1024 MB

문제

대역폭에 제한이 없는 새로운 무선 통신 방식이 시험을 통과했다. 늘어나는 트래픽을 감당하지 못하는 기존 광케이블 망을 이 방식으로 교체할 수 있다. 새 망의 배치는 당신이 정한다.

기존 망은 메시지를 중계하는 노드와, 서로 다른 두 노드를 잇는 광케이블 회선으로 이루어진다. 어느 두 노드 사이에도 광케이블을 따라가는 경로가 적어도 하나 있고, 대역폭 때문에 두 노드를 회선 여러 개가 잇기도 한다.

새 망에는 광케이블이 없다. 대신 두 노드를 잇는 무선 회선을 쓴다. 대역폭에는 제한이 없지만 무선 회선은 비싸다. 그래서 망 전체를 연결한 상태로 두면서 회선 수를 최소로 한다. 즉 어느 두 노드 사이에도 무선 회선을 따라가는 경로가 정확히 하나 있어야 한다. 한편 각 노드는 연결 개수를 미리 정해 두고 만들었다. 지금 연결된 회선 수와 다른 수의 회선에 연결되는 노드는 재구성해야 하고, 여기에 비용이 든다.

어느 두 노드 사이에도 경로가 정확히 하나씩 있으면서 회선 수가 기존 망과 달라지는 노드 수가 최소가 되도록 새 망을 설계하라.

입력

첫째 줄에 노드 수 nn과 기존 망의 광케이블 회선 수 mm이 주어진다 (2n1042 \le n \le 10^4, 1m1051 \le m \le 10^5). 노드 번호는 00부터 n1n - 1까지다.

다음 mm개 줄에는 서로 다른 두 정수 aia_ibib_i가 주어진다. ii번째 광케이블 회선이 노드 aia_i와 노드 bib_i를 잇는다는 뜻이다. 어느 두 노드 사이에도 광케이블 회선으로 이어지는 경로가 적어도 하나 있다. 두 노드를 광케이블 회선 여러 개가 이을 수도 있다.

출력

첫째 줄에 회선 수를 바꿔야 하는 노드의 최소 개수를 출력한다.

둘째 줄에는 노드 수와 무선 회선 수를 출력한다. 노드 수는 입력과 같다. 이어지는 각 줄에는 무선 회선 하나를 두 노드 번호로 출력하되 작은 번호를 앞에 쓴다. 회선은 앞 번호 오름차순으로, 앞 번호가 같으면 뒤 번호 오름차순으로 정렬한다.

최소를 달성하는 배치가 여럿이므로 다음 절차가 만드는 배치를 출력한다. dvd_v를 기존 망에서 노드 vv에 연결된 광케이블 회선 수라고 하자. 같은 두 노드를 잇는 회선이 여럿이면 각각 따로 센다.

  1. 노드를 dvd_v 오름차순으로, dvd_v가 같으면 번호가 작은 쪽을 앞에 두고 정렬한다. 합을 00에서 시작해 정렬한 순서대로 읽는다. 각 노드에서 dv1d_v - 1을 더한 값이 n2n - 2 이하이면 더하고, 합이 n2n - 2를 넘게 만드는 첫 노드에서 멈춘다. 멈추기 전까지 읽은 노드가 보존 노드다.
  2. 보존 노드는 tv=dvt_v = d_v로, 나머지 노드는 tv=1t_v = 1로 둔다. 보존되지 않은 노드가 하나라도 있으면 그중 번호가 가장 작은 노드 wwtwt_w2n2vtv2n - 2 - \sum_v t_v를 더한다.
  3. n=2n = 2이면 무선 회선은 노드 00과 노드 11을 잇는 하나뿐이다. 그렇지 않으면 tv2t_v \ge 2인 노드를 v1<v2<<vpv_1 < v_2 < \dots < v_p, tv=1t_v = 1인 노드를 u1<u2<<uLu_1 < u_2 < \dots < u_L이라고 하자. 먼저 경로 v1v2,v2v3,,vp1vpv_1 v_2, v_2 v_3, \dots, v_{p-1} v_p를 만든다. viv_i의 남은 용량은 tvit_{v_i}에서 viv_i에 이미 붙은 경로 회선 수를 뺀 값이다. u1,u2,,uLu_1, u_2, \dots, u_L을 이 순서대로 남은 용량이 있는 첫 viv_i에 붙인다. 즉 v1v_1의 남은 용량을 다 쓴 다음에 v2v_2가 노드를 받는다.

3단계는 항상 모든 uju_j를 붙이고, 무선 회선 수는 항상 n1n - 1이다.