수 게임
시간 제한1초메모리 제한128 MB
이전 선택으로 아직 금지되지 않은 수들이 주어질 때, 상대를 패배 위치에 놓는 모든 수를 오름차순으로 출력하거나 그러한 수가 없음을 밝힌다.
문제
크리스틴(Christine)과 매트(Matt)가 직접 만든 수 게임(Number Game)을 한다. 규칙은 다음과 같다.
두 사람은 번갈아 가며 보다 큰 정수를 하나씩 고른다. 먼저 크리스틴이 고르고, 그다음 매트, 다시 크리스틴이 고르는 식으로 진행한다. 지금까지 고른 모든 수는 앞으로 고를 수 있는 수를 다음과 같이 제한한다.
- 두 사람 중 누군가 이미 고른 수, 또는 그 수의 배수는 고를 수 없다.
- 그런 배수들의 합도 고를 수 없다.
즉, 어떤 수들이 선택되고 나면 그 수들의 음이 아닌 정수 계수 조합(계수 중 적어도 하나는 양수) 전체가 금지된다. 더 이상 새로운 수를 고를 수 없는 사람이 진다.
예시. 크리스틴이 를 고르면 가 금지된다. 이어서 매트가 을 고르면 뿐 아니라 , , , 같은 합들도 금지된다. 이제 남은 수는 와 뿐이다. 크리스틴이 를 고르면 도 금지되어 매트가 고를 수 있는 수가 없어지므로 크리스틴이 이긴다.
충분히 여러 번 두고 나면 고를 수 있는 수의 개수가 유한해진다. 하나의 국면(아직 금지되지 않은 수들의 목록)이 주어질 때, 모든 이기는 수(winning move)를 출력하라.
이기는 수란, 그 수를 고른 뒤 상대가 어떻게 두더라도 자신이 이길 수 있게 만드는 수이다. 엄밀한 정의는 다음과 같다.
- 이기는 수는 그 수를 고른 뒤의 국면이 지는 국면이 되는 수이다.
- 이기는 국면은 이기는 수가 존재하는 국면이고, 지는 국면은 이기는 수가 존재하지 않는 국면이다.
- 모든 수가 금지된 국면은 지는 국면이다(그 국면에서 두어야 하는 사람이 진다).
입력
입력은 여러 개의 테스트 케이스로 이루어지며, 각 국면은 한 줄로 주어진다. 각 줄은 아직 고를 수 있는 수의 개수 ()으로 시작하고, 이어서 그 개의 수 ()이 주어진다. 주어지는 국면은 항상 실제 게임에서 나타날 수 있는 국면이다(예를 들어 이 목록에 없으면 도 목록에 없다). 입력의 마지막 줄에는 하나만 주어지며, 이 줄은 처리하지 않는다.
출력
번째 테스트 케이스(은 부터 시작)에 대해 먼저 Test Case #m을 출력한다. 다음 줄에는 이기는 수가 없으면 There's no winning move.를, 있으면 모든 이기는 수를 오름차순()으로 나열한 The winning moves are: w1 w2 ... wk를 출력한다. 연속한 두 테스트 케이스 사이에는 빈 줄을 하나 넣는다.