아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

요원

시간 제한1초메모리 제한128 MB

요약
서로 싫어하는 관계 그래프에서 최대 세 명의 특별한 에이전트를 통해 모든 정점을 세 개 이하의 독립 집합으로 색칠할 수 있는지 판정하고, 사전순으로 가장 작은 색 배정을 출력한다.
난이도

어려움10점 중 8점

유형
그래프, DFS, 백트래킹, 그리디
정답자
아직 제출이 없습니다

문제

어느 비밀 조직은 모든 요원을 팀에 배정해야 합니다. 일부 요원 쌍은 서로 함께 일할 수 없으므로, 같은 팀 안에 서로 싫어하는 요원 쌍이 들어가서는 안 됩니다. 임무의 특성상 요원은 최대 세 개의 팀으로만 나눌 수 있습니다.

조직에는 특별히 다루기 어려운 요원이 소수 존재합니다. 이런 요원은 최소 1명, 최대 3명이며, 나머지 모든 요원은 이들 중 적어도 한 명을 싫어합니다. 이러한 구조 덕분에 유효한 분할이 존재하는지 판정하는 문제는 항상 다항 시간에 풀 수 있습니다.

요원들과 서로 함께 일할 수 없는 쌍이 주어질 때, 같은 팀에 서로 싫어하는 쌍이 없도록 요원들을 최대 세 팀으로 나눌 수 있는지 판정하고, 가능하다면 그 배정을 출력하세요.

입력

입력은 여러 개의 테스트 인스턴스로 구성됩니다.

각 인스턴스의 첫 줄에는 두 정수 AA와 RR가 공백으로 구분되어 주어집니다 (1≤A≤5001 \le A \le 500, 0≤R0 \le R). AA는 요원의 수이며, 요원은 00부터 A−1A-1까지 번호가 매겨집니다. RR은 서로 싫어하는 요원 쌍의 수입니다. 이어지는 RR개의 줄에는 각각 두 정수 a1a_1과 a2a_2가 주어지며 (0≤a1,a2<A0 \le a_1, a_2 < A), 이는 요원 a1a_1과 a2a_2가 서로 싫어함을 의미합니다. 서로 싫어하는 각 쌍은 정확히 한 번만 주어집니다.

각 인스턴스 뒤에는 빈 줄이 하나 옵니다. 입력은 두 개의 00이 적힌 줄로 끝납니다.

출력

각 인스턴스마다 한 줄을 출력합니다.

같은 팀에 서로 싫어하는 쌍이 없도록 요원들을 최대 세 팀으로 나눌 수 있다면, 공백으로 구분된 AA개의 정수를 출력합니다. ii번째 정수(ii는 00부터 A−1A-1까지)는 요원 ii에게 배정된 팀 번호로 {0,1,2}\{0, 1, 2\} 중 하나입니다. 유효한 배정이 여러 개라면, 팀 번호 수열이 사전순으로 가장 앞서는 것을 출력합니다.

그러한 분할이 존재하지 않으면 문자열 The agents cannot be split을 출력합니다.

예제3

  1. 예제 1

    입력
    3 3
    0 1
    0 2
    2 1
    
    4 6
    0 1
    0 2
    0 3
    1 2
    1 3
    2 3
    
    0 0
    
    예상 출력
    0 1 2
    The agents cannot be split
    
  2. 예제 2

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

    입력
    2 1
    0 1
    
    0 0
    
    예상 출력
    0 1