만드는 중입니다

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

Joitter에서 친구 사귀기는 재미있다

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

요약
각 날짜의 팔로우 이벤트 직후 교환 이벤트를 더 이상 선택할 수 없을 때까지 반복했을 때, 모든 사용자가 팔로우하는 사용자 수 합의 최댓값을 구합니다.
난이도

보통10점 중 7점

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

문제

Joitter는 친구와 추억을 공유할 수 있는 인기 소셜 미디어이다.

Joitter에서는 다른 사용자를 팔로우할 수 있다. 예를 들어 사용자 a가 사용자 b를 팔로우하면, a는 타임라인에서 b의 게시글을 읽을 수 있다. 이때 b가 a를 맞팔로우할지는 정해져 있지 않다. 다만 사용자가 자기 자신을 팔로우하는 것과, 같은 사용자 b를 두 번 팔로우하는 것은 불가능하다.

사용자 1, 사용자 2, ..., 사용자 N, 이렇게 N명의 사용자가 Joitter를 쓰기 시작했다. 처음에는 아무도 다른 사용자를 팔로우하지 않는다. 이후 M일 동안 팔로우 이벤트가 일어난다. i일째에 사용자 A_i가 사용자 B_i를 팔로우한다.

Joitter 운영진은 M일 중 한 번 소셜 교환 이벤트를 열 계획이다. 소셜 교환 이벤트는 다음과 같이 진행된다.

  1. 사용자 한 명을 고른다. 이 사용자를 x라 한다.
  2. x가 지금 팔로우하고 있는 사용자 한 명을 고른다. 이 사용자를 y라 한다.
  3. 사용자 z를 고른다. z는 x와 다르고, x가 팔로우하지 않는 사용자이며, y가 팔로우하는 사용자이고, z가 y를 팔로우하는 사용자이다.
  4. x가 z를 팔로우한다.
  5. (x, y, z) 세 명을 더 이상 고를 수 없을 때까지 이 과정을 반복한다.

운영진은 이벤트를 언제 열지 아직 정하지 않았다. 각 i (1≤i≤M1 \le i \le M)에 대해, i일째 팔로우 이벤트 直後에 이벤트가 열린다고 가정할 때 이벤트 이후 각 사용자가 팔로우하는 사용자 수의 총합이 가질 수 있는 최댓값을 알고 싶어 한다. 소셜 교환 이벤트는 다음 날 팔로우 이벤트 전에 끝난다.

각 i에 대해 이 최댓값을 계산하는 프로그램을 작성하라.

입력

표준 입력에서 다음 데이터를 읽는다. 입력의 모든 값은 정수이다.

N M
A1 B1
.
.
.
AM BM

출력

표준 출력에 M개의 줄을 출력한다. i번째 줄에는 i일째 팔로우 이벤트 직후에 소셜 교환 이벤트가 열릴 때, 이벤트 이후 각 사용자가 팔로우하는 사용자 수의 총합의 최댓값을 출력한다.

제한

  • 2≤N≤1000002 \le N \le 100000
  • 1≤M≤3000001 \le M \le 300000
  • 1≤Ai≤N1 \le A_i \le N (1≤i≤M1 \le i \le M)
  • 1≤Bi≤N1 \le B_i \le N (1≤i≤M1 \le i \le M)
  • (Ai,Bi)≠(Aj,Bj)(A_i, B_i) \ne (A_j, B_j) (1≤i<j≤M1 \le i < j \le M)
  • 시간 제한 2000 ms, 메모리 제한 512 MB

예제2

  1. 예제 1

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

    입력
    6 10
    1 2
    2 3
    3 4
    4 5
    5 6
    6 5
    5 4
    4 3
    3 2
    2 1
    
    예상 출력
    1
    2
    3
    4
    5
    7
    11
    17
    25
    30