만드는 중입니다

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

추론

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

요약
참으로 고정된 변수와 최소 하나가 거짓인 절, 다전제 함의를 모두 만족하는 변수 배정이 존재하는지 판정합니다.
난이도

보통10점 중 7점

유형
그래프, BFS
정답자
아직 제출이 없습니다

문제

사설 탐정 홍 씨가 맡은 살인 사건의 정보를 정리하고 있다. 사건 관계자의 행적을 모아 nn개의 진술 S1,S2,…,SnS_1, S_2, \dots, S_n을 적었다. 각 진술이 참인지 거짓인지는 아직 모르므로 홍 씨는 진술 하나하나를 사건 변수라고 부른다. 아래 여섯 진술이 사건 변수의 예다.

  1. S1S_1: 김철수는 개를 기른다.
  2. S2S_2: 박수철은 고양이를 좋아한다.
  3. S3S_3: 안희영은 박수철을 좋아한다.
  4. S4S_4: (생략)
  5. S5S_5: (생략)
  6. S6S_6: (생략)

홍 씨는 사건 변수 각각의 참 거짓과 변수 사이의 관계를 조사해 그 결과로 추론을 세웠다. 추론은 주장 하나 이상으로 이루어지고, 주장은 모두 다음 세 유형 중 하나다. 유형 1은 사건 변수 SiS_i가 참이라는 주장이다. 유형 2는 사건 변수 하나 이상을 모은 집합에 거짓인 변수가 적어도 하나 있다는 주장이다. 유형 3은 SiS_i와 함께 적힌 변수가 모두 참이면 SiS_i도 참이라는 주장이다. 세 유형은 다음과 같이 쓴다.

  1. 유형 1: SiS_i (SiS_i는 참이다.)
  2. 유형 2: Si1,Si2,…,Sik→∅S_{i_1}, S_{i_2}, \dots, S_{i_k} \to \emptyset (Si1,Si2,…,SikS_{i_1}, S_{i_2}, \dots, S_{i_k} 중 적어도 하나는 거짓이다.)
  3. 유형 3: Sj1,Sj2,…,Sjk→SiS_{j_1}, S_{j_2}, \dots, S_{j_k} \to S_i (Sj1,Sj2,…,SjkS_{j_1}, S_{j_2}, \dots, S_{j_k}가 모두 참이면 SiS_i도 참이다.)

예를 들어 홍 씨의 추론이 다음 여덟 주장으로 이루어졌다고 하자.

  1. S1S_1
  2. S2S_2
  3. S1,S2,S6→∅S_1, S_2, S_6 \to \emptyset
  4. S1→S6S_1 \to S_6
  5. S2→S6S_2 \to S_6
  6. S1,S6→S3S_1, S_6 \to S_3
  7. S2,S4→S1S_2, S_4 \to S_1
  8. S5,S6→S2S_5, S_6 \to S_2

주장 1과 2는 유형 1, 주장 3은 유형 2, 주장 4부터 8까지는 유형 3이다. 추론이 타당하려면 주장 사이에 모순이 없어야 하고, →\to 왼쪽 변수가 모두 참인데 오른쪽 변수는 거짓이어야 하는 유형 3 주장이 없어야 한다. →\to 왼쪽에 거짓인 변수가 하나라도 있으면 오른쪽 변수의 참 거짓은 추론의 타당성을 해치지 않는다.

타당한 배정은 추론을 타당하게 만드는 사건 변수의 참 거짓 배정이다. 홍 씨는 자기 추론에 타당한 배정이 있는지 알고 싶다.

위 예에서는 주장 1과 2로 S1S_1과 S2S_2가 참이고, 주장 4로 S6S_6도 참이 된다. 그런데 주장 3은 S1S_1, S2S_2, S6S_6 중 하나가 거짓이기를 요구하므로 이 추론은 타당하지 않다. 주장 3을 빼면 타당한 배정이 있다. 모든 변수를 참으로 두어도 되고, S4S_4만 거짓으로 두어도 된다.

사건 변수 nn개로 이루어진 홍 씨의 추론이 주어질 때, 타당한 배정이 있는지 판정하는 프로그램을 작성하시오.

입력

입력은 표준 입력으로 받는다. 첫 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스의 첫 줄에는 네 정수 nn, m1m_1, m2m_2, m3m_3 (1≤n≤15001 \le n \le 1500, 1≤m1<n1 \le m_1 < n, 0≤m2,m3≤15000 \le m_2, m_3 \le 1500)이 주어진다. nn은 사건 변수의 개수이고, m1m_1, m2m_2, m3m_3은 각각 유형 1, 유형 2, 유형 3 주장의 개수다.

다음 m1m_1개 줄에는 각각 정수 ii (1≤i≤n1 \le i \le n)가 주어지며, 유형 1 주장 SiS_i를 뜻한다.

다음 m2m_2개 줄에는 각각 정수 k+1k+1개 k,i1,i2,…,ikk, i_1, i_2, \dots, i_k (1≤k1 \le k, 1≤i1,i2,…,ik≤n1 \le i_1, i_2, \dots, i_k \le n, r≠sr \ne s이면 ir≠isi_r \ne i_s)가 주어지며, 유형 2 주장 Si1,Si2,…,Sik→∅S_{i_1}, S_{i_2}, \dots, S_{i_k} \to \emptyset을 뜻한다.

다음 m3m_3개 줄에는 각각 정수 k+2k+2개 k,j1,j2,…,jk,ik, j_1, j_2, \dots, j_k, i (1≤k≤n−11 \le k \le n-1, 1≤j1,j2,…,jk,i≤n1 \le j_1, j_2, \dots, j_k, i \le n, r≠sr \ne s이면 jr≠jsj_r \ne j_s, 모든 rr에 대해 i≠jri \ne j_r)가 주어지며, 유형 3 주장 Sj1,Sj2,…,Sjk→SiS_{j_1}, S_{j_2}, \dots, S_{j_k} \to S_i를 뜻한다.

출력

출력은 표준 출력으로 한다. 테스트 케이스마다 정확히 한 줄을 출력한다. 추론이 타당하면 YES를, 타당하지 않으면 NO를 출력한다.

예제7

  1. 예제 1

    입력
    2
    6 2 1 5
    1
    2
    3 1 2 6
    1 1 6
    1 2 6
    2 1 6 3
    2 2 4 1
    2 5 6 2
    6 2 0 5
    1
    2
    1 1 6
    1 2 6
    2 1 6 3
    2 2 4 1
    2 5 6 2
    
    예상 출력
    NO
    YES
    
  2. 예제 2

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

    입력
    1
    2 1 1 0
    1
    1 1
    
    예상 출력
    NO
    
  4. 예제 4

    입력
    1
    3 1 1 3
    1
    2 2 3
    1 1 2
    1 2 3
    1 3 1
    
    예상 출력
    NO
    
  5. 예제 5

    입력
    1
    5 1 1 1
    1
    2 1 4
    2 2 3 4
    
    예상 출력
    YES
    
  6. 예제 6

    입력
    2
    4 1 1 2
    1
    2 3 4
    1 1 3
    1 2 4
    4 2 1 2
    1
    2
    2 3 4
    1 1 3
    1 2 4
    
    예상 출력
    YES
    NO
    
  7. 예제 7

    입력
    1
    4 3 1 4
    2
    2
    2
    2 2 3
    1 2 3
    1 2 3
    2 2 3 4
    1 4 1
    
    예상 출력
    NO