만드는 중입니다

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

Teoretičar

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

요약
이분 그래프의 간선을 한 꼭짓점을 공유하는 간선끼리 다른 색이 되도록 칠하고, 색은 최대 차수 이상인 가장 작은 2의 거듭제곱 개까지만 씁니다.
난이도

어려움10점 중 8점

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

문제

꼬마 앨런이 심심해하자 고란은 재미있는 문제를 내 주기로 했다. 앨런은 시험 준비로 바빴고, 고란은 옛날 프로그래밍 대회 시절에 풀었던 거대한 이분 그래프 하나만 떠올릴 수 있었다. 고란은 그 그래프를 앨런에게 주며 말했다. 이 이분 그래프의 간선을 같은 색을 가진 두 간선이 정점을 공유하지 않도록, 가능한 한 적은 색으로 칠해야 한다.

앨런은 방으로 달려가 이동식 읽기/쓰기 장치를 꺼내 테이프를 준비하고 문제를 풀기 시작했다. 그러나 곧 무언가 빠졌다는 것을 깨닫고 고란에게 돌아가 말했다. 무한한 테이프를 주면 제가 문제를 풀어 보이겠어요! 고란은 앨런을 날카롭게 쳐다보며 말했다. 무한한 테이프라고? 모든 것을 이론으로만 따지고 들면, 네 이름이 붙은 것은 하나도 남지 않을 거다.

앨런이 울상이 되는 것을 보고 고란은 봐주기로 했다. 조건을 조금 쉽게 해 주마. CC를 설명한 방식대로 그래프를 칠하는 데 필요한 최소 색의 수라고 하자. XX는 CC 이상인 2의 거듭제곱 중 가장 작은 수이며, 최대 XX개의 색을 사용해도 된다. 앨런을 도와 문제를 풀어라.

입력

첫째 줄에 양의 정수 LL, RR, MM이 주어진다 (1≤L,R≤1000001 \le L, R \le 100000, 1≤M≤5000001 \le M \le 500000). 각각 이분 그래프의 한쪽 정점 수, 다른 쪽 정점 수, 간선 수이다. 이어서 MM개의 줄에 양의 정수 aia_i (1≤ai≤L1 \le a_i \le L)와 bib_i (1≤bi≤R1 \le b_i \le R)가 주어진다. 이는 첫 번째 쪽의 aia_i번 정점과 두 번째 쪽의 bib_i번 정점을 잇는 간선이다. 모든 (ai,bi)(a_i, b_i) 쌍은 서로 다르다.

출력

첫째 줄에 사용한 색의 수 KK를 양의 정수 하나로 출력한다. 이어서 MM개의 줄에 ii번째 간선의 색 cic_i (1≤ci≤K1 \le c_i \le K)를 양의 정수 하나로 출력한다.

예제2

  1. 예제 1

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

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