난수 생성기 역추적 (Small)

10^D 이하의 알 수 없는 소수를 법으로 하는 선형 생성기가 낸 연속된 K개 항으로 다음 항이 하나로 정해지면 출력하고 그렇지 않으면 모른다고 답합니다.

보통6완전 탐색정수론수학아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

온라인 포커 사이트를 만들려고 한다. 이런 시스템에서 중요한 부품 하나가 난수 생성기다. 빨라야 하고, 충분히 무작위여야 한다. 그래서 다음과 같은 절충안을 생각했다.

길이가 최대 DD인 난수를 만들고 싶다. 먼저 10D10^D 이하인 소수 PP를 하나 고른다. 다음으로 음이 아닌 정수 AABB를 고른다. 마지막으로 00 이상 P1P-1 이하인 정수 시드 SS를 고른다.

의사난수 수열은 이렇게 출력한다. 먼저 SS를 출력하고, 다음 식으로 SS를 갱신한다.

S:=(A×S+B)modPS := (A \times S + B) \bmod P

갱신한 SS를 수열의 다음 항으로 출력하고, 같은 식으로 다시 갱신한다. 이 과정을 원하는 만큼 반복한다.

이 난수 생성기가 좋다고 생각하는가? 위와 같은 방식으로 만든 수열에서 연속한 KK개의 항을 읽어 그다음 항을 출력하는 프로그램을 작성하라.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스의 첫 줄에는 DDKK가 주어지고, 그다음 줄에는 위에서 설명한 난수 생성기가 만든 연속한 KK개의 항이 주어진다.

제한

  • 1T1001 \le T \le 100
  • 1D41 \le D \le 4
  • 1K101 \le K \le 10
  • 주어지는 KK개의 정수는 위에서 설명한 난수 생성기가 만든 수열의 연속한 항이다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다.

10D10^D 이하인 소수 PP와 음이 아닌 정수 AA, BB의 선택 중에서 주어진 KK개의 항을 만들어 내는 모든 선택이 같은 다음 항을 내놓으면, yy 자리에 그 값을 쓴다. 다음 항으로 서로 다른 값이 두 개 이상 나올 수 있으면 yy 자리에 I don't know.를 쓴다.