또 다시 충족 가능성

아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

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

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

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

입력

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

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

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

출력

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