거짓말쟁이 찾기

시간 제한3초메모리 제한128 MB

요약
원형으로 배열된 진술 결과와 최대 거짓말쟁이 수 t가 주어질 때 모든 가능한 배정에서 항상 거짓말쟁이여야 하는 사람을 찾는 문제입니다.
난이도

보통10점 중 6점

유형
그리디, 시뮬레이션, 수학
정답자
아직 제출이 없습니다

문제

n≥2n \ge 2명의 사람이 1,2,…,n1, 2, \dots, n번으로 번호가 매겨져 있습니다. 각 사람은 참말쟁이(진실만 말하는 사람) 또는 거짓말쟁이이며, 거짓말쟁이의 수는 tt 이하입니다(t≤nt \le n).

임의의 사람 ii는 다른 사람 jj를 검사하여 jj가 참말쟁이인지 거짓말쟁이인지 판정할 수 있습니다. 검사 결과 ai,ja_{i,j}는 사람 ii가 jj를 거짓말쟁이라고 판정하면 11, 참말쟁이라고 판정하면 00입니다. 이 결과는 검사한 사람 ii가 참말쟁이일 때에만 신뢰할 수 있습니다. 즉 ii가 거짓말쟁이이면 결과는 신뢰할 수 없어 00 또는 11 어느 값이든 될 수 있습니다. 결과 값을 정리하면 다음과 같습니다.

검사자 ii대상 jj결과 ai,ja_{i,j}
참말쟁이참말쟁이00
참말쟁이거짓말쟁이11
거짓말쟁이참말쟁이00 또는 11
거짓말쟁이거짓말쟁이00 또는 11

검사는 원형으로 이루어집니다. 사람 11이 사람 22를, 사람 22가 사람 33을, …\dots, 사람 n−1n-1이 사람 nn을, 그리고 사람 nn이 사람 11을 검사합니다. 이 결과들로부터 어떤 사람은 반드시 거짓말쟁이임이 확정되지만, 어떤 사람은 거짓말쟁이일 수도 아닐 수도 있습니다. nn, tt, 그리고 검사 결과가 주어질 때 반드시 거짓말쟁이인 사람을 모두 찾으세요.

예를 들어 n=5n = 5, t=2t = 2이고 결과 (a1,2,a2,3,a3,4,a4,5,a5,1)(a_{1,2}, a_{2,3}, a_{3,4}, a_{4,5}, a_{5,1})가 (0,1,1,0,0)(0, 1, 1, 0, 0)이라고 합시다. 사람 33은 반드시 거짓말쟁이입니다. 만약 사람 33이 참말쟁이라면 결과를 따라갈 때 사람 11, 44, 55도 모두 거짓말쟁이가 되어 거짓말쟁이가 33명 이상이 되고, 이는 t=2t = 2에 어긋납니다. 따라서 사람 33은 확정된 거짓말쟁이입니다. 반면 거짓말쟁이 집합이 {3,4}\{3, 4\}일 수도 {3}\{3\}일 수도 있으므로 사람 44를 거짓말쟁이라고 확정할 수는 없습니다.

주어진 결과는 거짓말쟁이가 tt명 이하인 어떤 배치에서 나온 것이라고 가정해도 됩니다.

입력

첫째 줄에 테스트 케이스의 수 TT가 주어집니다. 각 테스트 케이스는 두 줄로 이루어집니다. 첫째 줄에는 두 정수, 사람 수 nn(1≤n≤10001 \le n \le 1000)과 거짓말쟁이의 최대 수 tt(0≤t≤n0 \le t \le n)가 주어집니다. 둘째 줄에는 00 또는 11인 nn개의 값이 a1,2,a2,3,…,an−1,n,an,1a_{1,2}, a_{2,3}, \dots, a_{n-1,n}, a_{n,1} 순서로 주어집니다.

출력

각 테스트 케이스마다 한 줄에 두 정수를 출력합니다. 첫째 정수는 확정된 거짓말쟁이의 수, 둘째 정수는 확정된 거짓말쟁이 중 가장 작은 번호입니다. 확정된 거짓말쟁이가 없으면 둘째 정수로 00을 출력합니다.

예제3

  1. 예제 1

    입력
    3
    5 2
    0 1 1 0 0
    7 2
    0 0 1 0 0 1 1
    9 8
    1 0 0 0 0 1 0 0 0
    
    예상 출력
    1 3
    2 4
    0 0
    
  2. 예제 2

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

    입력
    2
    1 0
    0
    1 1
    1
    
    예상 출력
    0 0
    1 1