#include <iostream>
#include <vector>
#include <queue>
#include <set>
using namespace std;

typedef vector <int> VI;
typedef vector <bool> VB;
typedef vector <VB> VVB;

const int DO_SW_ON = 0;
const int DO_SW_OFF = 1;
const int DO_MV = 2;

class STATE
{
public:
	int L;	/* CgÌóÔ */
	int P;	/* mÌ»Ýn */
	VI H;	/* Ú®ð */
	STATE()
	{
		L = 0;
		P = 1;
		H = VI();
	}
	bool operator < ( const STATE &s ) const
	{
		if ( L != s.L ) return L < s.L;
		if ( P < s.P ) return P < s.P;
		return false;
	}
};

void print_step( int step )
{
	if ( step % 1000 ) cout << "Move to room " << (int)( step % 1000 ) << "." << endl;
	else if ( ( step / 1000 ) % 1000 ) cout << "Switch on room " << (int)( ( step / 1000 ) % 1000 ) << "." << endl;
	else if ( step / 1000000 ) cout << "Switch off room " << (int)( step / 1000000 ) << "." << endl;
}

void print_history( STATE& S )
{
	cout << "You can go home in " << (int)S.H.size() << " steps." << endl;
	for ( VI ::iterator it = S.H.begin(); it != S.H.end(); it++ ) print_step( *it );
}

int create_step( int k, int n )
{
	int answer = 0;
	if ( k == DO_SW_ON ) answer += 1000 * n;
	else if ( k == DO_SW_OFF ) answer += 1000000 * n;
	else if ( k == DO_MV ) answer += n;
	return answer;
}

int main( void )
{
	/* üÍp */
	int n; /* ®Ì */
	int m; /* hAÌ */
	int s, t; /* hAîñFs-tÅÚ®Â\ */
	int l; /* CgÌ_îñ */
	int k, r; /* XCb`îñF®i©ç®rÌCgðìÅ«é©Ç¤© */

	/* óÔ */
	STATE init; /* úóÔ */
	VVB D; /* D[i][j]: i-jªhAÅqªÁÄ¢é */
	VVB SW; /* SW[i][j]: iÅjÌCgðìÅ«é */
	int goal; /* Case 1 ÌS[ */
	int case_no; /* I¹óÔ */
	STATE finish; /* Case 1ÅS[µ½Æ«Ég¤ */
	int exit_room; /* oû */

	while ( cin >> n >> m && n && m )
	{
		/* ú»ÆüÍ */
		exit_room = n;
		goal = 1 << n;
		// for ( int i = 1; i < n; i++ ) goal |= 1 << i;
		D = VVB( n+1, VB( n+1, false ) );
		for ( int i = 0; i < m; i++ )
		{
			cin >> s >> t;
			D[s][t] = D[t][s] = true;
		}
		init = STATE();
		for ( int i = 1; i <= n; i++ )
		{
			cin >> l;
			if ( l == 1 ) init.L |= 1 << i;
		}
		SW = VVB( n+1, VB( n+1, false ) );
		for ( int i = 1; i <= n; i++ )
		{
			cin >> k;
			for ( int j = 0; j < k; j++ )
			{
				cin >> r;
				SW[i][r] = true;
			}
		}

		/* BFS õ */
		queue <STATE> Q;
		Q.push( init );
		set <STATE> V;
		V.insert( init );
		case_no = 3;
		finish = STATE();
		bool not_found = true;

		/* BFS */
		while ( Q.empty() == false )
		{
			STATE now = Q.front();
			Q.pop();

			if ( ( now.L & 1 << now.P ) == 0 ) continue;

			/* S[`FbN */
			if ( now.L == goal && now.P == exit_room )
			{
				if ( not_found ) finish = now;
				else if ( now.H.size() < finish.H.size() ) finish = now;
				not_found = false;
				case_no = min( case_no, 1 );
			}
			else if ( now.P == exit_room ) case_no = min( case_no, 2 );

			/* ªò: XCb`ð· */
			for ( int i = 1; i <= n; i++ )
			{
				if ( SW[now.P][i] )
				{
					STATE next = now;
					next.L ^= 1 << i;
					next.H.push_back( create_step( ( next.L & 1 << i ) ? DO_SW_ON : DO_SW_OFF, i ) );
					if ( V.find( next ) == V.end() )
					{
						Q.push( next );
						V.insert( next );
					}
				}
			}
			/* ªò: Ú® */
			for ( int i = 1; i <= n; i++ )
			{
				if ( ( now.L & 1 << i ) && D[now.P][i] )
				{
					STATE next = now;
					next.P = i;
					next.H.push_back( create_step( DO_MV, i ) );
					if ( V.find( next ) == V.end() )
					{
						Q.push( next );
						V.insert( next );
					}
				}
			}
		}

		if ( case_no == 3 ) cout << "Help me!" << endl;
		else if ( case_no == 2 ) cout << "You can not switch off all lights." << endl;
		else if ( case_no == 1 ) print_history( finish );
	}

	return 0;
}

Measured memory_bytes: 9064