[B] 이진 매칭

시간 제한2초메모리 제한1024 MB

요약
남은 그래프에서 모든 정점의 차수가 홀수가 되도록 간선 부분집합을 찾고, 없으면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
그래프, DFS, 그리디, 비트 연산
정답자
아직 제출이 없습니다

문제

하이바이는 최근 이진 매칭을 배웠다. 이진 매칭이 무엇인지 모른다면, 아래 정의를 참고하자.

무방향 그래프 G=(V,E)G=(V,E)의 이진 매칭은 아래 조건을 만족하는 S⊆ES\subseteq E이다.

  • SS에 속한 간선들만 남긴 그래프 G′=(V,S)G'=(V,S)에서, 모든 정점 vv에 대해 deg(v)≡1(mod2)\mathrm{deg}(v)\equiv 1\pmod 2이다. 여기서 deg(v)\mathrm{deg}(v)는 vv의 차수를 의미한다.

마침 출제할 만한 문제가 없었던 하이바이는 주어진 그래프의 이진 매칭을 찾는 문제를 내기로 했다. 그런데 실수로 입력 제한을 106106이 아니라 10610^6으로 세팅해 버렸다!

입력

첫째 줄에는 그래프 GG의 정점 개수 NN과 간선 개수 MM이 공백으로 구분되어 주어진다. (1≤N≤106;(1\le N\le 10^6; 0≤M≤106)0\le M\le 10^6)

이후 MM개의 줄에 걸쳐 i+1i+1번째 줄에는 22개의 정수 v_iv\_i, w_iw\_i가 공백으로 구분되어 주어진다. 이는 v_iv\_i번 정점과 w_iw\_i번 정점을 연결하는 ii번 간선을 의미한다. (1≤v_i,w_i≤N;(1\le v\_i,w\_i\le N; v_i≠w_i)v\_i\neq w\_i)

두 정점을 잇는 간선이 여러 개일 수 있으며, 주어지는 그래프가 연결되어 있지 않을 수도 있다.

출력

만약 주어진 그래프의 이진 매칭이 존재하지 않는다면 첫째 줄에 -1을 출력한다.

만약 주어진 그래프의 이진 매칭이 존재한다면 첫째 줄에 이진 매칭의 크기 KK를 출력하고, 둘째 줄에 이진 매칭에 속한 간선의 번호를 오름차순으로 공백으로 구분하여 출력한다.

가능한 이진 매칭이 여러 가지라면 그중 아무거나 하나를 출력하면 된다. 이진 매칭의 크기를 최대화하거나, 최소화할 필요는 없다.

예제3

  1. 예제 1

    입력
    6 7
    1 2
    2 3
    3 4
    4 1
    1 3
    5 6
    6 5
    
    예상 출력
    3
    1 3 6
    
  2. 예제 2

    입력
    3 3
    1 2
    1 3
    2 3
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    4 1
    2 3
    
    예상 출력
    -1