바이러스
시간 제한0.7초메모리 제한256 MB
각 유전자에서 나올 수 있는 모든 바이러스가 항체 조각에 걸리는지 확인하고, 걸리지 않는 가장 짧은 바이러스의 길이를 구합니다.
문제
이진 바이러스 연구위원회가 유전 코드가 0과 1의 수열로 이루어진 바이러스 집단을 연구하고 있다. 각 바이러스는 유전자 하나에서 시작한다. 편의상 유전자는 부터 까지의 정수로 번호를 붙인다. 바이러스는 어느 시점에서든 유전자의 수열이다. 돌연변이가 일어나면 수열에서 유전자 하나를 골라 돌연변이 표에 따라 유전자 수열로 바꾼다. 바이러스는 유전자 0과 1로만 이루어지면 돌연변이를 멈춘다.
예를 들어 돌연변이 표가 , , , , , 일 때, 유전자 4 하나로 시작한 바이러스는 ⟨4⟩ → ⟨0 3 1 2⟩ → ⟨0 2 0 0 1 2⟩ → ⟨0 0 1 0 0 1 2⟩ → ⟨0 0 1 0 0 1 0 1⟩ 순서로 변할 수 있다.
항체는 바이러스 안에 있는 0과 1의 특정 연속 구간을 찾아낸다. 예를 들어 구간 ⟨0 0 1 0 0⟩에 반응하는 항체는 ⟨0 0 1 0 0 1 0 1⟩ 바이러스를 탐지하지만, ⟨0 1 0 1 0 0 1 0 1⟩ 바이러스는 탐지하지 못한다.
유전자 부터 까지 각각에 대해, 주어진 항체들로 그 유전자에서 나올 수 있는 모든 바이러스를 탐지할 수 있는지 판단한다. 탐지하지 못하는 바이러스가 있으면 탐지되지 않는 가장 짧은 바이러스의 길이를 구한다. 항체가 하나도 없으면 아무 바이러스도 탐지할 수 없으므로, 그 유전자에서 나올 수 있는 가장 짧은 바이러스의 길이를 구한다.
입력
첫 줄에 세 정수 , , 이 주어진다 (, , ). 각각 유전자의 수, 돌연변이 표의 행 수, 항체의 수이다.
이어지는 개의 줄은 돌연변이 표의 각 행을 나타낸다. 각 줄은 두 정수 와 (, )로 시작하고, 이어서 정수 ()가 나온다. 이 줄은 를 뜻한다. 모든 의 합은 100을 넘지 않는다. 부터 까지의 모든 정수는 표에서 로 적어도 한 번 나타난다.
이어지는 개의 줄은 항체를 나타낸다. 각 줄은 정수 ()로 시작하고, 이어서 항체를 이루는 개의 정수 ()이 나온다. 모든 의 합은 50을 넘지 않는다.
출력
정확히 줄을 출력한다. 유전자 부터 까지 순서대로 한 줄씩 답을 쓴다.
그 유전자에서 나올 수 있는 모든 바이러스를 항체로 탐지할 수 있으면 YES를 출력한다. 돌연변이가 끝나지 않아서 나오는 바이러스가 없는 경우에도 YES를 출력한다.
그렇지 않으면 NO를 출력하고, 한 칸 띄운 뒤 탐지되지 않는 가장 짧은 바이러스의 길이를 출력한다. 모든 테스트 데이터에서 이 값은 보다 작다고 가정해도 된다.