코드 수열
시간 제한5초메모리 제한512 MB
알 수 없는 계수로 GF(10007) 위에서 만들어진 수열의 연속한 N개 항이 주어질 때, 다음 항을 구하거나 UNKNOWN을 출력한다.
문제
비밀 코드로 만들어진 수열 의 다음 값을 알아내려고 한다. 이 코드는 다음 절차로 수열을 만들었다.
먼저 이상 이하의 각 에 대해 이상 이하의 수 를 하나 고른다.
그다음 이상 이하의 각 정수 에 대해 다음을 수행한다.
- 을 이진법으로 쓴다.
- 의 이진 표현에서 켜져 있는 모든 비트 에 대해 를 꺼낸다. 예를 들어 이면 0번 비트와 2번 비트가 켜져 있으므로 과 를 꺼낸다.
- 꺼낸 값을 모두 더하고 로 나눈 나머지를 으로 둔다.
수열 에서 연속한 값 몇 개를 받는다. 이 값들이 수열의 어느 위치에서 시작하는지는 모르지만, 뒤에 값이 적어도 하나 더 있다는 것은 안다. 수열을 만들 때 고른 가 무엇인지도 모른다.
주어진 값 다음에 오는 수를 구한다. 입력만으로 정할 수 없으면 UNKNOWN을 출력한다.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다.
각 테스트 케이스는 두 줄이다.
- 첫 줄에는 알고 있는 의 원소 개수 이 주어진다.
- 둘째 줄에는 알고 있는 원소 개가 공백 하나로 구분되어 주어진다. 각 원소는 이상 이하이다.
제한
- 각 테스트 케이스는 위 절차로 만들어진 어떤 수열의 연속한 구간이고, 그 구간 뒤에는 값이 적어도 하나 더 있다.
출력
각 테스트 케이스마다 "Case #: " 형식으로 한 줄 출력한다. 는 1부터 시작하는 테스트 케이스 번호이고, 는 다음에 오는 수이다. 다음 수를 정할 수 없으면 자리에 UNKNOWN을 쓴다.
노트
첫 번째 예제에서는 , , 가 각각 1, 2, 4이고 주어진 값이 에서 시작했을 수 있다. 그렇다면 을 알 수 없으므로 다음 수는 무엇이든 될 수 있고, 답은 UNKNOWN이다.
두 번째 예제에서는 를 전부 알아낼 수 없고 이 무엇인지도 알 수 없다. 그래도 이 절차로 만들어진 어떤 수열에서든 1, 10, 11, 200이 이 순서로 나타나면 그다음 값은 항상 201임을 증명할 수 있다.