#include <stdio.h> #define MAX 20 #define MAXC (1<<MAX) char res [MAXC]; #define R_UNKNOWN 'U' #define R_LOOSING 'L' #define R_WINNING 'W' int readpos (int *pbits) { int n, x; *pbits = 0; scanf ("%d", &n); while ( n-- ) { scanf ("%d", &x); *pbits |= (1<<x); } return *pbits; } char checkpos (int bits, int output) { int i, r = 'L'; if ( res[bits>>2] != 'U' && !output ) return res[bits>>2]; for ( i = 2; i <= 20; ++i ) if ( bits & (1<<i) ) if ( checkpos (bits & ~(1<<i), 0) == 'L' ) { r = 'W'; if ( output ) printf (" %d", i); } return res[bits>>2] = r; } int main (void) { int i, tasks, nrtask, bits; for ( i = 0; i < MAXC; ++i ) res[i] = R_UNKNOWN; scanf ("%d", &tasks); for ( nrtask = 1; nrtask <= tasks; ++nrtask) { printf ("Scenario #%d:\n", nrtask); readpos (&bits); if ( checkpos (bits, 0) == 'L' ) printf ("There is no winning move"); else { printf ("The winning moves are:"); checkpos (bits, 1); } printf (".\n\n"); } return 0; }