#include<iostream> #include<string> #include<iomanip> #include<algorithm> #include <cstdio> #include <queue> #include <cstring> #include <cstdlib> using namespace std; int dp[2000000]; //int hash[]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096, //8192,16384,32768,65536,131072,262144,524288}; bool dfs(int state) { if (dp[state]!=-1) return dp[state]; if (!state) { dp[state]=0; return false; } int i,j; bool flag=false; for (i=2;i<=20;i++) if ((state&1<<(i-1))!=0) { int temp_state=state; temp_state&=~(1<<(i-1)); for (j=2;i+j<=20;j++) if ((temp_state&1<<(j-1))==0) temp_state&=~(1<<(i+j-1)); if (!dfs(temp_state)) { flag=true; break; } } if (flag) { dp[state]=1; return true; } dp[state]=0; return false; } int main() { int n; int T=0; memset(dp,-1,sizeof(dp)); while (1) { T++; scanf("%d",&n); if (!n) break; int A[20]; int i,j; int state=0; for (i=0;i<n;i++) { scanf("%d",&A[i]); state|=1<<(A[i]-1); } int ans[20]; int counter=0; for (i=2;i<=20;i++) if ((state&1<<(i-1))!=0) { int temp_state=state; temp_state&=~(1<<(i-1)); for (j=2;i+j<=20;j++) if ((temp_state&1<<(j-1))==0) temp_state&=~(1<<(i+j-1)); if (!dfs(temp_state)) ans[counter++]=i; } printf("Test Case #%d\n",T); if (counter) { printf("The winning moves are:"); for (i=0;i<counter;i++) printf(" %d",ans[i]); printf("\n"); } else printf("There's no winning move.\n"); printf("\n"); } }