만드는 중입니다

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

또 다시 충족 가능성

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

요약
최대 20개 변수와 100개 절로 이루어진 CNF 논리식이 모든 절을 참으로 만드는 변수 배정을 가지는지 판정합니다.
난이도

쉬움10점 중 3점

유형
완전 탐색, 비트 연산
정답자
아직 제출이 없습니다

문제

앨리스는 얼마 전 하드웨어 설계 회사에 들어갔다. 맡은 일 가운데 하나는 제작된 집적 회로에서 결함을 찾아내는 것인데, 이 검사는 결국 논리식 하나가 충족 가능한지 판정하는 문제로 귀결된다.

논리식은 곱항 정규형(CNF)으로 주어진다. 변수는 X1X_1부터 XnX_n까지다. 리터럴은 변수 XiX_i 또는 그 부정 ∼Xi\sim X_i다. 절은 리터럴을 논리합으로 이은 것이고, 논리식은 mm개의 절을 모두 논리곱으로 이은 것이다.

각 변수에 참이나 거짓을 배정해서 모든 절을 동시에 참으로 만드는 방법이 있는지 판정하는 프로그램을 작성하라.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. TT는 5보다 크지 않다.

각 테스트 케이스의 첫째 줄에 변수의 개수 nn과 절의 개수 mm이 주어진다(1≤n≤201 \le n \le 20, 1≤m≤1001 \le m \le 100). 이어지는 mm개의 줄에 절이 한 줄에 하나씩 주어진다.

각 절은 리터럴을 논리합으로 이은 형태다. 리터럴은 XiX_i 또는 ∼Xi\sim X_i이고 1≤i≤n1 \le i \le n이다. 논리합은 문자 v로 적으며, 양옆의 리터럴과 공백 한 칸으로 구분한다. 한 절에 같은 변수가 여러 번 나올 수 있고, 한 변수의 두 극성이 함께 나올 수도 있다.

출력

각 테스트 케이스마다 모든 절을 참으로 만드는 배정이 있으면 satisfiable을, 없으면 unsatisfiable을 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    2
    3 3
    X1 v X2
    ~X1
    ~X2 v X3
    3 5
    X1 v X2 v X3
    X1 v ~X2
    X2 v ~X3
    X3 v ~X1
    ~X1 v ~X2 v ~X3
    
    예상 출력
    satisfiable
    unsatisfiable
    
  2. 예제 2

    입력
    3
    1 1
    X1
    1 2
    X1
    ~X1
    2 1
    X1 v ~X1
    
    예상 출력
    satisfiable
    unsatisfiable
    satisfiable