거짓말쟁이 찾기
시간 제한3초메모리 제한128 MB
원형으로 배열된 진술 결과와 최대 거짓말쟁이 수 t가 주어질 때 모든 가능한 배정에서 항상 거짓말쟁이여야 하는 사람을 찾는 문제입니다.
문제
명의 사람이 번으로 번호가 매겨져 있습니다. 각 사람은 참말쟁이(진실만 말하는 사람) 또는 거짓말쟁이이며, 거짓말쟁이의 수는 이하입니다().
임의의 사람 는 다른 사람 를 검사하여 가 참말쟁이인지 거짓말쟁이인지 판정할 수 있습니다. 검사 결과 는 사람 가 를 거짓말쟁이라고 판정하면 , 참말쟁이라고 판정하면 입니다. 이 결과는 검사한 사람 가 참말쟁이일 때에만 신뢰할 수 있습니다. 즉 가 거짓말쟁이이면 결과는 신뢰할 수 없어 또는 어느 값이든 될 수 있습니다. 결과 값을 정리하면 다음과 같습니다.
검사는 원형으로 이루어집니다. 사람 이 사람 를, 사람 가 사람 을, , 사람 이 사람 을, 그리고 사람 이 사람 을 검사합니다. 이 결과들로부터 어떤 사람은 반드시 거짓말쟁이임이 확정되지만, 어떤 사람은 거짓말쟁이일 수도 아닐 수도 있습니다. , , 그리고 검사 결과가 주어질 때 반드시 거짓말쟁이인 사람을 모두 찾으세요.
예를 들어 , 이고 결과 가 이라고 합시다. 사람 은 반드시 거짓말쟁이입니다. 만약 사람 이 참말쟁이라면 결과를 따라갈 때 사람 , , 도 모두 거짓말쟁이가 되어 거짓말쟁이가 명 이상이 되고, 이는 에 어긋납니다. 따라서 사람 은 확정된 거짓말쟁이입니다. 반면 거짓말쟁이 집합이 일 수도 일 수도 있으므로 사람 를 거짓말쟁이라고 확정할 수는 없습니다.
주어진 결과는 거짓말쟁이가 명 이하인 어떤 배치에서 나온 것이라고 가정해도 됩니다.
입력
첫째 줄에 테스트 케이스의 수 가 주어집니다. 각 테스트 케이스는 두 줄로 이루어집니다. 첫째 줄에는 두 정수, 사람 수 ()과 거짓말쟁이의 최대 수 ()가 주어집니다. 둘째 줄에는 또는 인 개의 값이 순서로 주어집니다.
출력
각 테스트 케이스마다 한 줄에 두 정수를 출력합니다. 첫째 정수는 확정된 거짓말쟁이의 수, 둘째 정수는 확정된 거짓말쟁이 중 가장 작은 번호입니다. 확정된 거짓말쟁이가 없으면 둘째 정수로 을 출력합니다.