만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

난수 생성기 역추적 (Small)

시간 제한5초메모리 제한512 MB

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

보통10점 중 6점

유형
완전 탐색, 정수론, 수학
정답자
아직 제출이 없습니다

문제

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

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

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

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

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

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

입력

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

제한

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

출력

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

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

예제5

  1. 예제 1

    입력
    3
    2 10
    0 1 2 3 4 5 6 7 8 9
    3 1
    13
    1 5
    6 6 6 6 6
    
    예상 출력
    Case #1: 10
    Case #2: I don't know.
    Case #3: 6
    
  2. 예제 2

    입력
    4
    1 1
    0
    2 1
    96
    3 1
    500
    4 1
    9972
    
    예상 출력
    Case #1: I don't know.
    Case #2: I don't know.
    Case #3: I don't know.
    Case #4: I don't know.
    
  3. 예제 3

    입력
    4
    1 2
    0 0
    2 3
    0 0 0
    3 3
    996 996 996
    4 10
    0 0 0 0 0 0 0 0 0 0
    
    예상 출력
    Case #1: 0
    Case #2: 0
    Case #3: 996
    Case #4: 0
    
  4. 예제 4

    입력
    3
    1 3
    1 2 4
    2 3
    1 2 4
    4 3
    1 2 4
    
    예상 출력
    Case #1: I don't know.
    Case #2: I don't know.
    Case #3: I don't know.
    
  5. 예제 5

    입력
    2
    1 4
    5 3 3 3
    4 4
    5 3 3 3
    
    예상 출력
    Case #1: 3
    Case #2: 3