만드는 중입니다

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

토큰

시간 제한2초메모리 제한1024 MB

요약
방향 그래프에서 빨간 카드의 정점 집합에서 파란 카드의 집합으로 토큰을 옮긴 뒤 다시 빨간 집합으로 되돌릴 수 있는지 판별합니다.
난이도

어려움10점 중 9점

유형
그래프, DFS, 위상 정렬
정답자
아직 제출이 없습니다

문제

동훈이는 친구 찬경이에게 NN개의 정점과 MM개의 단방향 간선으로 이루어진 그래프를 선물했다. 찬경이는 그래프와 함께 온 카드 두 장을 보고, 동훈이가 자신을 골탕 먹이려고 미션을 준비했다는 것을 알아챘다. 찬경이가 수행해야 하는 미션은 다음과 같다.

  • 카드 두 장 중 한 장은 빨간색, 다른 한 장은 파란색이다. 각 카드에는 1부터 NN까지의 정점 번호 중 PP개가 적혀 있다. 각 카드에 적힌 정점 번호는 모두 다르며, 한 정점 번호가 두 카드에 모두 적혀 있을 수 있다. 빨간 카드에 적힌 번호의 정점마다 토큰을 하나씩 올려놓은 상태를 '첫 번째 상태', 파란 카드에 적힌 번호의 정점마다 토큰을 하나씩 올려놓은 상태를 '두 번째 상태'라고 한다.
  • 그래프에 토큰을 올려놓아 첫 번째 상태를 만든다.
  • 토큰을 움직이는 과정을 반복해서 두 번째 상태를 만든다. 정점 uu에서 정점 vv로 가는 간선이 있고, 정점 uu에 토큰이 있으며, 정점 vv에 토큰이 없으면 정점 uu의 토큰을 정점 vv로 움직일 수 있다.
  • 토큰을 움직이는 과정을 반복해서 다시 첫 번째 상태를 만든다.

찬경이는 동훈이의 성격을 알기 때문에, 미션이 처음부터 불가능할지도 모른다고 의심하고 있다. 불가능하다면 찬경이는 고생하지 않고 다른 일을 하러 갈 것이다. 찬경이를 도와주자!

입력

첫째 줄에 정점의 개수 NN과 단방향 간선의 개수 MM이 주어진다. (1≤N≤200 000,0≤M≤min⁡(N⋅(N−1),200 000))(1 \le N \le 200\,000, 0 \le M \le \min(N \cdot (N - 1), 200\,000))

다음 MM개의 줄에는 간선 정보가 주어진다. ii번째 줄에는 두 정수 uiu_i, viv_i가 주어지며, uiu_i번 정점에서 viv_i번 정점으로 가는 단방향 간선이 있다는 뜻이다. 중복 간선이나 자기 자신으로 가는 간선은 입력되지 않는다.

(M+2)(M + 2)번째 줄에는 각 카드에 적힌 정점의 수 PP가 주어진다. (0≤P≤N)(0 \le P \le N)

(M+3)(M + 3)번째 줄에는 빨간 카드에 적힌 정점 번호 a1,a2,…,aPa_1, a_2, \ldots, a_P가 주어진다. 서로 다른 양의 정수이다. (1≤ai≤N)(1 \le a_i \le N)

(M+4)(M + 4)번째 줄에는 파란 카드에 적힌 정점 번호 b1,b2,…,bPb_1, b_2, \ldots, b_P가 주어진다. 서로 다른 양의 정수이다. (1≤bi≤N)(1 \le b_i \le N)

각 줄의 값은 모두 공백으로 구분되어 주어진다.

출력

찬경이가 미션을 수행할 수 있으면 YES, 수행할 수 없으면 NO를 출력한다.

예제2

  1. 예제 1

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

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