코드 수열 (라지)
시간 제한5초메모리 제한512 MB
계수가 알려지지 않은 이진 가산 수열의 연속한 항들이 주어질 때, 다음 항이 유일하게 정해지면 출력하고 아니면 UNKNOWN을 출력한다.
문제
비밀 코드로 만들어진 수열 의 다음 항을 구한다. 코드는 다음 절차로 만들어졌다.
먼저 부터 까지의 각 에 대해 이상 이하의 수 를 하나 고른다.
그다음 이상 이하의 각 정수 에 대해 다음을 한다.
- 을 이진법으로 쓴다.
- 그 이진 표현에서 켜져 있는 모든 비트 에 대해 를 모은다. 면 0번 비트와 2번 비트가 켜져 있으므로 과 를 모은다.
- 모은 값을 모두 더하고 로 나눈 나머지를 으로 둔다.
수열 의 연속한 항 몇 개가 주어진다. 그 항들이 수열의 어느 위치에서 시작하는지는 모르지만, 뒤에 항이 적어도 하나 더 있다는 것은 안다. 수열을 만들 때 어떤 를 골랐는지도 모른다.
주어진 항 바로 다음 항을 구한다. 입력만으로 값이 하나로 정해지지 않으면 UNKNOWN을 출력한다.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다.
각 테스트 케이스는 두 줄이다.
- 첫 줄에 알고 있는 항의 개수 이 주어진다.
- 둘째 줄에 알고 있는 항 개가 공백 하나로 구분되어 주어진다. 각 항은 이상 이하이다.
제한
- 각 테스트 케이스는 위 절차로 만들 수 있는 어떤 수열의 연속한 일부이고, 마지막으로 주어진 항 뒤에 항이 적어도 하나 더 있다. 즉 와 인 이 존재해서 주어진 항이 차례로 이 된다.
출력
각 테스트 케이스마다 Case #: 형식으로 한 줄 출력한다. 는 1부터 시작하는 테스트 케이스 번호이고, 는 다음 항이다. 다음 항이 하나로 정해지지 않으면 자리에 UNKNOWN을 쓴다.
설명
예제 입력의 첫 번째 테스트 케이스에서는 가 각각 1, 2, 4이고 주어진 항이 에서 시작한다고 볼 수 있다. 이렇게 보면 을 모르므로 다음 항은 어떤 값이든 될 수 있고, 답은 UNKNOWN이다.
두 번째 테스트 케이스에서는 전체도, 시작 위치도 알아낼 수 없다. 그래도 어떤 수열에서든 1, 10, 11, 200이 이 순서로 연속해서 나오면 다음 값은 항상 201임을 증명할 수 있다.