만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

빠진 다리

면접 대비

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

요약
모든 다리를 한 번씩 건너 출발한 섬으로 돌아오는 경로가 생기도록 새로 놓을 다리의 최소 개수와 그 다리들을 구합니다.
난이도

보통10점 중 6점

유형
그래프, 유니온 파인드, 그리디
정답자
아직 제출이 없습니다

문제

그림 1은 1부터 4까지 번호가 붙은 점으로 표시된 4개의 섬과, 선으로 표시된 7개의 다리를 보여준다. 각 다리는 서로 다른 두 점을 잇고, 양방향으로 건널 수 있다. 모든 다리 순회(all-bridges-walk)는 어떤 섬에서 출발해 모든 다리를 정확히 한 번씩 건너고 출발한 섬으로 돌아오는 경로다.

그림 1의 섬과 다리로는 이런 순회를 할 수 없다. 하지만 새 다리를 지으면 가능해진다. 예를 들어 4번 섬과 1번 섬을 잇는 다리, 2번 섬과 3번 섬을 잇는 다리를 새로 지으면 순회할 수 있다. 그림 2는 4개의 섬과 3개의 다리가 있는 지역을 보여준다. 이 지역에서는 3번 섬과 4번 섬을 잇는 다리 두 개를 추가하면 순회에 충분하다.

나라에 N개의 섬과 M개의 다리가 있다. 이 나라에서 모든 다리 순회가 가능하도록 새로 지어야 하는 다리의 최소 개수를 구하는 프로그램 bridges를 작성하라.

입력

첫 줄에 정수 NN과 MM이 주어진다. N≤1000N \le 1000이고 M≤10000M \le 10000이다. 이어지는 MM개의 줄에는 다리 한 개의 양 끝에 있는 섬 번호가 주어진다.

출력

첫 줄에 새로 지어야 하는 다리의 개수 KK를 출력한다. 이어지는 KK개의 줄에는 새 다리 한 개의 양 끝 섬 번호를 출력한다. 모든 다리 순회를 보장하는 새 다리의 집합이라면 어떤 집합이든 정답으로 인정한다. 새 다리가 필요 없으면 0만 출력한다.

예제2

  1. 예제 1

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

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