경비병
면접 대비시간 제한1초메모리 제한256 MB
각 구간에 닌자가 없거나 적어도 하나 있다는 보고가 주어질 때, 닌자 K명을 배치하는 모든 유효한 배치에서 항상 닌자가 있는 자리를 모두 찾는다.
문제
한 왕국이 닌자들의 공격을 받고 있다. 닌자는 그림자에 숨어 보이지 않으므로 매우 위협적이며, 왕이 머무는 성 하나만 남고 왕국 전체가 함락되었다.
성 앞에는 개의 덤불이 한 줄로 놓여 있고 번부터 번까지 번호가 매겨져 있다. 정확히 명의 닌자가 서로 다른 개의 덤불에 한 명씩 숨어 있다.
성에는 명의 경비병이 있다. 경비병 는 번 덤불부터 번 덤불까지 연속한 구간을 감시하며, 그 구간에 대해 다음과 같이 보고한다.
- 이면 구간 안에는 닌자가 한 명도 없다.
- 이면 구간 안에 닌자가 적어도 한 명 있다.
모든 경비병의 보고를 동시에 만족하는 닌자 배치를 가능한 배치라고 하자. 어떤 덤불이 가능한 모든 배치에서 예외 없이 닌자를 품고 있다면, 그 덤불에는 닌자가 확실히 숨어 있다고 말한다.
경비병들의 감시 구간과 보고가 주어질 때, 닌자가 확실히 숨어 있는 모든 덤불을 찾아 출력하는 프로그램을 작성하라.
입력
첫째 줄에 세 정수 , , 이 공백을 사이에 두고 주어진다. 각각 덤불의 수, 숨어 있는 닌자의 수, 경비병의 수이다.
이어지는 개의 줄 중 번째 줄에는 세 정수 , , 가 공백을 사이에 두고 주어진다(). 이는 경비병 가 번부터 번까지의 덤불을 감시하며, 가 그 구간의 보고 값임을 뜻한다. 는 또는 이고, 이면 구간에 닌자가 없음을, 이면 구간에 닌자가 적어도 한 명 있음을 나타낸다.
출력
닌자가 확실히 숨어 있는 덤불이 존재하면, 그 덤불들의 번호를 오름차순으로 한 줄에 하나씩 출력한다. 닌자가 확실히 숨어 있는 덤불이 하나도 없으면 을 출력한다.
힌트
첫 번째 예제를 살펴보자. 덤불은 개, 닌자는 명이고 경비병의 보고는 구간 에 닌자가 있음, 구간 에 닌자가 있음, 구간 에 닌자가 없음, 구간 에 닌자가 있음이다. 이 보고를 모두 만족하는 배치는 닌자가 덤불 에 있는 경우와 에 있는 경우 두 가지뿐이다. 두 배치 모두에서 덤불 과 에는 항상 닌자가 있으므로 이 둘을 출력한다. 반면 덤불 은 닌자가 있는 배치도 있고 없는 배치도 있으므로 출력하지 않으며, 덤불 도 같은 이유로 출력하지 않는다.