만드는 중입니다

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

분할 통치

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

요약
연결 그래프의 도시를 세 개의 독립 집합으로 나누되 두 집합의 크기가 같아야 할 때, 가능한 모든 공통 크기를 오름차순으로 나열한다.
난이도

어려움10점 중 8점

유형
그래프, 분할 정복, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

타로, 하나코, 지로는 세 명이서 JAG 왕국을 통치하고 있다. JAG 왕국에는 NN개의 도시가 있고, 몇몇 도시는 양방향 도로로 연결되어 있다. 어떤 도시에서도 다른 모든 도시로 1개 이상의 도로를 거쳐 반드시 도달할 수 있다.

어느 날 타로와 하나코는 결국 사이가 틀어졌고, 세 명이 도시를 나누어 통치하기로 했다. 하지만 사이가 너무 나빠진 나머지, 타로가 통치하는 도시와 하나코가 통치하는 도시가 도로 하나로 직접 연결되어 있는 것조차 싫어한다. 그래서 다음 조건을 만족하도록 통치할 도시를 나누기로 했다.

  • 타로가 통치하는 도시와 하나코가 통치하는 도시로 이루어진 임의의 쌍은 직접 도로로 연결되어 있지 않다. 타로와 하나코의 사이가 매우 나쁘기 때문이다.
  • 같은 사람이 통치하는 도시끼리도 직접 도로로 연결되어 있지 않다. 그런 와중에도 다른 사람의 통치 아래에 있는 도시를 경유하도록 강제해서 외교를 장려하기 위해서이다.
  • 타로가 통치하는 도시의 총수와 하나코가 통치하는 도시의 총수는 같아야 한다. 총수를 같게 하지 않으면 타로와 하나코의 사이가 더 나빠질 것 같기 때문이다. 지로는 마음이 매우 넓으므로 지로가 통치하는 도시의 총수는 몇 개여도 된다.

위 조건을 만족하는 분담이라면 세 사람은 납득하고 통치할 수 있으며, 누군가가 통치하는 도시가 0개여도 불만이 없다. 이때 타로가 통치하는 도시의 총수(=하나코가 통치하는 도시의 총수)로 가능한 수를 모두 나열하는 프로그램을 작성하시오.

입력

입력은 여러 데이터셋으로 이루어진다. 데이터셋의 수는 최대 50이다. 각 데이터셋은 다음 형식으로 주어진다.

N M
u1 v1
...
uM vM

1번째 줄은 두 정수 NN (2≤N≤1032 \le N \le 10^3)과 MM (1≤M≤1031 \le M \le 10^3)으로 이루어지며, 각각 도시의 수와 도로의 수를 나타낸다. 이어지는 MM개의 줄 중 ii번째 줄은 두 정수 uiu_i와 viv_i (1≤ui<vi≤N1 \le u_i < v_i \le N)로 이루어지며, ii번째 도로가 도시 uiu_i와 도시 viv_i를 양방향으로 연결함을 나타낸다. 어떤 도시에서도 다른 모든 도시로 1개 이상의 도로를 거쳐 반드시 도달할 수 있음이 보장된다. 또한 같은 도시 쌍을 잇는 도로가 여러 개 주어지는 경우는 없다. 즉 모든 1≤i<j≤M1 \le i < j \le M에 대해 (ui,vi)≠(uj,vj)(u_i, v_i) \ne (u_j, v_j)를 만족한다.

입력의 끝은 두 개의 0으로 이루어진 줄로 나타낸다.

출력

각 데이터셋에 대해 타로가 통치하는 도시의 총수로 가능한 수가 KK가지일 때, 먼저 1번째 줄에 KK를 출력하고, 그 뒤에 가능한 총수를 1줄에 1개씩 오름차순으로 출력하시오.

예제1

  1. 예제 1

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