아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

수 게임

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

요약
이전 선택으로 아직 금지되지 않은 수들이 주어질 때, 상대를 패배 위치에 놓는 모든 수를 오름차순으로 출력하거나 그러한 수가 없음을 밝힌다.
난이도

보통10점 중 7점

유형
게임 이론, 동적 계획법, 완전 탐색, 정수론
정답자
아직 제출이 없습니다

문제

크리스틴(Christine)과 매트(Matt)가 직접 만든 수 게임(Number Game)을 한다. 규칙은 다음과 같다.

두 사람은 번갈아 가며 11보다 큰 정수를 하나씩 고른다. 먼저 크리스틴이 고르고, 그다음 매트, 다시 크리스틴이 고르는 식으로 진행한다. 지금까지 고른 모든 수는 앞으로 고를 수 있는 수를 다음과 같이 제한한다.

  • 두 사람 중 누군가 이미 고른 수, 또는 그 수의 배수는 고를 수 없다.
  • 그런 배수들의 합도 고를 수 없다.

즉, 어떤 수들이 선택되고 나면 그 수들의 음이 아닌 정수 계수 조합(계수 중 적어도 하나는 양수) 전체가 금지된다. 더 이상 새로운 수를 고를 수 없는 사람이 진다.

예시. 크리스틴이 44를 고르면 4,8,12,…4, 8, 12, \dots가 금지된다. 이어서 매트가 33을 고르면 3,6,9,…3, 6, 9, \dots뿐 아니라 7=3+47 = 3 + 4, 10=2⋅3+410 = 2 \cdot 3 + 4, 11=3+2⋅411 = 3 + 2 \cdot 4, 13=3⋅3+413 = 3 \cdot 3 + 4 같은 합들도 금지된다. 이제 남은 수는 22와 55뿐이다. 크리스틴이 22를 고르면 5=2+35 = 2 + 3도 금지되어 매트가 고를 수 있는 수가 없어지므로 크리스틴이 이긴다.

충분히 여러 번 두고 나면 고를 수 있는 수의 개수가 유한해진다. 하나의 국면(아직 금지되지 않은 수들의 목록)이 주어질 때, 모든 이기는 수(winning move)를 출력하라.

이기는 수란, 그 수를 고른 뒤 상대가 어떻게 두더라도 자신이 이길 수 있게 만드는 수이다. 엄밀한 정의는 다음과 같다.

  • 이기는 수는 그 수를 고른 뒤의 국면이 지는 국면이 되는 수이다.
  • 이기는 국면은 이기는 수가 존재하는 국면이고, 지는 국면은 이기는 수가 존재하지 않는 국면이다.
  • 모든 수가 금지된 국면은 지는 국면이다(그 국면에서 두어야 하는 사람이 진다).

입력

입력은 여러 개의 테스트 케이스로 이루어지며, 각 국면은 한 줄로 주어진다. 각 줄은 아직 고를 수 있는 수의 개수 nn(1≤n≤201 \le n \le 20)으로 시작하고, 이어서 그 nn개의 수 a1,…,ana_1, \dots, a_n(2≤ai≤202 \le a_i \le 20)이 주어진다. 주어지는 국면은 항상 실제 게임에서 나타날 수 있는 국면이다(예를 들어 33이 목록에 없으면 66도 목록에 없다). 입력의 마지막 줄에는 00 하나만 주어지며, 이 줄은 처리하지 않는다.

출력

mm번째 테스트 케이스(mm은 11부터 시작)에 대해 먼저 Test Case #m을 출력한다. 다음 줄에는 이기는 수가 없으면 There's no winning move.를, 있으면 모든 이기는 수를 오름차순(wi<wi+1w_i < w_{i+1})으로 나열한 The winning moves are: w1 w2 ... wk를 출력한다. 연속한 두 테스트 케이스 사이에는 빈 줄을 하나 넣는다.

예제4

  1. 예제 1

    입력
    2 2 5
    2 2 3
    5 2 3 4 5 6
    0
    
    예상 출력
    Test Case #1
    The winning moves are: 2
    
    Test Case #2
    There's no winning move.
    
    Test Case #3
    The winning moves are: 4 5 6
    
  2. 예제 2

    입력
    1 2
    0
    
    예상 출력
    Test Case #1
    The winning moves are: 2
    
  3. 예제 3

    입력
    1 3
    0
    
    예상 출력
    Test Case #1
    The winning moves are: 3
    
  4. 예제 4

    입력
    2 2 3
    0
    
    예상 출력
    Test Case #1
    There's no winning move.