사설 탐정 홍 씨가 맡은 살인 사건의 정보를 정리하고 있다. 사건 관계자의 행적을 모아 n개의 진술 S1,S2,…,Sn을 적었다. 각 진술이 참인지 거짓인지는 아직 모르므로 홍 씨는 진술 하나하나를 사건 변수라고 부른다. 아래 여섯 진술이 사건 변수의 예다.
홍 씨는 사건 변수 각각의 참 거짓과 변수 사이의 관계를 조사해 그 결과로 추론을 세웠다. 추론은 주장 하나 이상으로 이루어지고, 주장은 모두 다음 세 유형 중 하나다. 유형 1은 사건 변수 Si가 참이라는 주장이다. 유형 2는 사건 변수 하나 이상을 모은 집합에 거짓인 변수가 적어도 하나 있다는 주장이다. 유형 3은 Si와 함께 적힌 변수가 모두 참이면 Si도 참이라는 주장이다. 세 유형은 다음과 같이 쓴다.
예를 들어 홍 씨의 추론이 다음 여덟 주장으로 이루어졌다고 하자.
주장 1과 2는 유형 1, 주장 3은 유형 2, 주장 4부터 8까지는 유형 3이다. 추론이 타당하려면 주장 사이에 모순이 없어야 하고, → 왼쪽 변수가 모두 참인데 오른쪽 변수는 거짓이어야 하는 유형 3 주장이 없어야 한다. → 왼쪽에 거짓인 변수가 하나라도 있으면 오른쪽 변수의 참 거짓은 추론의 타당성을 해치지 않는다.
타당한 배정은 추론을 타당하게 만드는 사건 변수의 참 거짓 배정이다. 홍 씨는 자기 추론에 타당한 배정이 있는지 알고 싶다.
위 예에서는 주장 1과 2로 S1과 S2가 참이고, 주장 4로 S6도 참이 된다. 그런데 주장 3은 S1, S2, S6 중 하나가 거짓이기를 요구하므로 이 추론은 타당하지 않다. 주장 3을 빼면 타당한 배정이 있다. 모든 변수를 참으로 두어도 되고, S4만 거짓으로 두어도 된다.
사건 변수 n개로 이루어진 홍 씨의 추론이 주어질 때, 타당한 배정이 있는지 판정하는 프로그램을 작성하시오.
입력은 표준 입력으로 받는다. 첫 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫 줄에는 네 정수 n, m1, m2, m3 (1≤n≤1500, 1≤m1<n, 0≤m2,m3≤1500)이 주어진다. n은 사건 변수의 개수이고, m1, m2, m3은 각각 유형 1, 유형 2, 유형 3 주장의 개수다.
다음 m1개 줄에는 각각 정수 i (1≤i≤n)가 주어지며, 유형 1 주장 Si를 뜻한다.
다음 m2개 줄에는 각각 정수 k+1개 k,i1,i2,…,ik (1≤k, 1≤i1,i2,…,ik≤n, r=s이면 ir=is)가 주어지며, 유형 2 주장 Si1,Si2,…,Sik→∅을 뜻한다.
다음 m3개 줄에는 각각 정수 k+2개 k,j1,j2,…,jk,i (1≤k≤n−1, 1≤j1,j2,…,jk,i≤n, r=s이면 jr=js, 모든 r에 대해 i=jr)가 주어지며, 유형 3 주장 Sj1,Sj2,…,Sjk→Si를 뜻한다.
출력은 표준 출력으로 한다. 테스트 케이스마다 정확히 한 줄을 출력한다. 추론이 타당하면 YES를, 타당하지 않으면 NO를 출력한다.