만드는 중입니다

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

도로는 사치품이 아니라 이동 수단이다

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

요약
단방향 도로를 하나씩 추가할 때마다, 모든 도시를 한 번씩만 지나도록 덮는 최소 경로 개수를 구합니다.
난이도

보통10점 중 7점

유형
그래프, DFS, BFS
정답자
아직 제출이 없습니다

문제

나라 N에는 nn개의 도시가 있으며, 1번부터 nn번까지 번호가 붙어 있습니다. 그런데 이 나라에는 도로가 하나도 없습니다! 대통령은 mm일 동안 매일 도로를 한 개씩, 총 mm개의 도로를 건설하기로 결정했습니다. 인구 이동을 돕기 위해 모든 도로는 일방통행으로 만들고, 도시 ii에서 도시 jj로 가는 경로가 있으면 도시 jj에서 도시 ii로 가는 경로는 없도록 도로망을 계획합니다.

새 도로를 널리 알리기 위해 나라 N은 매일 도시들을 돌며 자동차 시범 운행을 진행합니다. 각 자동차는 한 도시에서 출발해 그날까지 건설된 도로를 따라 달린 뒤, 어느 도시에서든 운행을 마칩니다. 출발 도시와 도착 도시가 같아도 됩니다. 이 경우 자동차는 도로를 한 번도 지나지 않습니다. 주민들을 즐겁게 하고 운전자의 연료를 아끼기 위해, 조직위원회는 매일 다음 규칙에 따라 운행 경로를 고르기로 했습니다.

  1. 모든 도시를 어떤 자동차가 반드시 방문해야 합니다. 방문한 도시는 자동차 경로의 출발 도시, 도착 도시, 그리고 경로 중간에 지나는 모든 도시입니다.
  2. 어떤 도시도 자동차들이 두 번 이상 방문해서는 안 됩니다.
  3. 사용하는 자동차의 총 대수가 최소여야 합니다.

나라 N의 교통부는 앞으로 mm일 동안 날마다 도로를 정확히 하나씩 건설하기로 이미 계획했습니다. 교통부는 매일 필요한 자동차의 최소 대수를 알고 싶어 합니다. ii일에는 1일부터 ii일까지 건설된 도로를 모두 사용할 수 있다고 봅니다.

입력

첫 줄에 두 정수 nn과 mm이 주어집니다(2≤n≤10002 \leq n \leq 1000, 1≤m≤100 0001 \leq m \leq 100\,000). 각각 도시의 수와 도로를 건설하는 날의 수입니다. 이어지는 mm개의 줄에는 각각 두 정수 uiu_i와 viv_i가 주어집니다(1≤ui,vi≤n1 \leq u_i, v_i \leq n, ui≠viu_i \neq v_i). 이는 ii일에 도시 uiu_i에서 도시 viv_i로 가는 일방통행 도로가 건설된다는 뜻입니다. 이미 도로로 연결된 두 도시 사이에 도로를 또 건설할 수도 있습니다. 어떤 도로를 건설한 뒤에도, 도시 aa에서 도시 bb로 가는 경로가 있으면 도시 bb에서 도시 aa로 가는 경로는 없다는 것이 보장됩니다.

출력

mm개의 정수를 출력합니다. ii번째 정수는 처음 ii개의 도로를 건설한 뒤 필요한 자동차의 최소 대수입니다.

힌트

첫 번째 예제에서는 처음 두 도로를 건설한 뒤에도 자동차가 최소 2대 필요합니다. 예를 들어 한 대는 도시 1에서 도시 2로 이동하고, 다른 한 대는 도시 3에서 출발해 도시 3에서 운행을 마칠 수 있습니다. 모든 도로를 건설한 뒤에는 1→2→31 \rightarrow 2 \rightarrow 3 경로를 도는 자동차 한 대면 충분합니다.

두 번째 예제에서는 모든 도로를 건설한 뒤 자동차 두 대로 모든 도시를 방문할 수 있습니다. 하지만 어떤 도시도 두 번 이상 방문해서는 안 된다는 조건 때문에 이 방법은 쓸 수 없습니다.

예제3

  1. 예제 1

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

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

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