SAT-2
- 시간
- 1000ms
- 메모리
- 1536MB
문제
0 또는 1의 값을 가질 수 있는 boolean 변수 개 가 있다.
변수들과 변수들의 부정들의 논리합만으로 이루어진 표현을 절(Clause)라고 한다. 예를 들어, 와 , 와 는 각각 모두 절이지만, 은 논리곱이 포함되어 있으므로 절이 아니다.
위와 같이 정의된 절들의 논리곱만으로 이루어진 식들을 CNF (Conjunctive/Clausal Normal Form)이라고 부른다. 예를 들어, 는 CNF이다.
개의 변수와 개의 절로 이루어진 CNF 식이 입력으로 주어진다. 주어진 CNF 식에 각 변수가 (그것의 부정을 포함하여) 최소 0번, 최대 2번 등장할 때, 주어진 CNF 식의 값을 참이 되도록 하는 변수들의 값을 구하여라. 만약 그러한 변수들의 값이 존재하지 않는다면 -1을 출력하라.
입력
입력의 첫 줄에 정수 이 주어진다.
이후 개의 줄 중에서 번째 줄에는 각 절에 속한 항의 개수를 나타내는 와, 각 항을 의미하는 개의 정수 가 순서대로 주어진다. 가 양수이면 그 항은 을 의미하고, 음수이면 를 의미한다.
출력
식을 만족시키는 변수들의 값이 존재한다면 한 줄에 각 변수들의 값을 공백으로 분리하여 순서대로 출력한다. 가능한 값이 여러 개 있다면, 그 중 아무거나 출력해도 된다.
만약 그러한 변수들의 값이 존재하지 않는다면, 첫 줄에 -1을 출력한다.
제한
입력
5 4
3 1 -2 3
3 3 -4 -1
2 5 2
1 4
출력
0 0 1 1 1
입력
2 3
1 -1
1 -2
2 1 2
출력
-1
출처
-
문제를 만든 사람: Diuven
-
문제를 검수한 사람: aeren, whqkrkt04