만드는 중입니다

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

NOT a SAT 문제

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

요약
주어진 CNF를 거짓으로 만드는 변수 값을 찾습니다. 모든 절에 변수와 그 부정이 함께 있으면 NO를 출력합니다.
난이도

쉬움10점 중 2점

유형
구현, 문자열
정답자
아직 제출이 없습니다

문제

SAT 문제는 주어진 CNF가 참이 되도록 논리 변수에 참과 거짓을 적절히 배정할 수 있는지 판별하는 문제이다.

  • CNF는 하나 이상의 절이 ∧\wedge (논리곱)로 연결된 논리식이다.
  • 절은 논리 변수 또는 논리 변수의 부정이 하나 이상 ∨\vee (논리합)로 연결된 논리식이다.

예를 들어 (x1∨x2∨¬x3)(x_1\vee x_2\vee\neg x_3)와 (x2∨¬x4∨¬x2∨¬x4)(x_2\vee\neg x_4\vee\neg x_2\vee\neg x_4)는 절이다. 두 절을 이으면 (x1∨x2∨¬x3)∧(x2∨¬x4∨¬x2∨¬x4)(x_1\vee x_2\vee\neg x_3)\wedge(x_2\vee\neg x_4\vee\neg x_2\vee\neg x_4)인 CNF가 된다.

이 문제는 SAT 문제가 아니다. 이 문제에서는 CNF를 참으로 만드는 대신 CNF를 거짓으로 만들어야 한다.

입력

첫째 줄에 논리 변수의 개수 NN과 CNF에 있는 절의 개수 MM이 주어진다. (1≤N≤5000001 \le N \le 500000, 1≤M≤2000001 \le M \le 200000)

둘째 줄부터 MM개의 줄에 각 절의 정보가 주어진다. 각 줄의 첫 번째 정수 kk는 절에 있는 논리 변수의 개수이며 (1≤k≤2000001 \le k \le 200000), 이어서 kk개의 정수 aa가 공백으로 구분되어 주어진다. aa가 양수이면 xax_a가 절에 들어 있고, 음수이면 ¬x∣a∣\neg x_{|a|}가 절에 들어 있다 (1≤∣a∣≤N1 \le |a| \le N).

모든 줄의 kk의 합은 500000 이하이다.

출력

첫째 줄에 CNF의 결과를 거짓으로 만들 수 있다면 YES를, 없다면 NO를 출력한다.

CNF의 결과를 거짓으로 만들 수 있다면 둘째 줄에 CNF의 값을 거짓으로 만드는 x1,x2,…,xNx_1, x_2, \ldots, x_N의 값을 공백으로 구분하여 출력한다. xix_i가 참이면 11을, 거짓이면 00을 출력한다. 가능한 배정이 여러 가지라면 그중 아무거나 하나를 출력한다.

예제2

  1. 예제 1

    입력
    4 2
    3 1 2 -3
    4 2 -4 -2 -4
    
    예상 출력
    YES
    0 0 1 0
    
  2. 예제 2

    입력
    1 1
    2 1 -1
    
    예상 출력
    NO