만드는 중입니다

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

몰로코의 리그 오브 오버워치 (Hard)

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

요약
n명의 직원과 m개의 갈등 쌍이 주어질 때, 같은 쌍이 같은 그룹에 속하지 않도록 두 개의 비어 있지 않은 그룹으로 나눌 수 있는지 판정한다.
난이도

보통10점 중 4점

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

문제

몰로코 직원들은 가끔 두 그룹으로 나뉘어 리그 오브 오버워치 5판 3선승제 대결을 벌인다. 직원 중에는 예전에 듀오를 맺고 함께 플레이한 열성 게이머 쌍이 있는데, 회사는 이런 쌍을 서로 다른 그룹에 넣기로 했다. 경쟁이 과열되지 않아야 초보자도 행사를 즐길 수 있기 때문이다.

몰로코에는 직원이 nn명 있고, 1번부터 nn번까지 번호가 붙어 있다.

예전에 듀오로 함께 플레이한 직원 쌍 (fi,si)(f_i, s_i)가 mm개 알려져 있다. 한 쌍의 두 직원은 이번 행사에서 서로 다른 그룹에 속해야 한다.

직원 nn명을 비어 있지 않은 두 그룹으로 나눌 수 있는지 판정하라. 각 직원은 정확히 한 그룹에만 속하고, 어떤 쌍 (fi,si)(f_i, s_i)도 두 직원이 같은 그룹에 들어가면 안 된다.

입력

첫째 줄에 정수 nn과 mm이 공백으로 구분되어 주어진다. (1≤n≤1 000 0001 \le n \le 1\,000\,000, 1≤m≤1 000 0001 \le m \le 1\,000\,000)

다음 mm개 줄 중 ii번째 줄에는 정수 fif_i와 sis_i가 주어진다. (1≤fi,si≤n1 \le f_i, s_i \le n) 모든 ii에 대해 fi≠sif_i \ne s_i가 보장된다. 같은 쌍이 여러 번 주어지기도 한다.

출력

조건을 만족하는 분할이 존재하면 POSSIBLE을, 존재하지 않으면 IMPOSSIBLE을 한 줄에 출력한다.

힌트

두 번째 예제에서는 {2}와 {1, 3}으로 나누면 조건을 만족한다.

예제2

  1. 예제 1

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

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