#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
struct P{
	int p,q,r;
	P(int p,int q,int r):p(p),q(q),r(r){
	}
};
int main(){
	int i,j;
	int n,m;
	while(scanf("%d%d",&n,&m),n||m){
		vector<int> a[15];
		for(i=0;i<m;++i){
			int p,q;
			scanf("%d%d",&p,&q);
			--p;
			--q;
			a[p].push_back(q);
			a[q].push_back(p);
		}
		int b=0;
		for(i=0;i<n;++i){
			int p;
			scanf("%d",&p);
			if(p)
				b|=1<<i;
		}
		vector<int> c[15];
		for(i=0;i<n;++i){
			int l;
			scanf("%d",&l);
			for(j=0;j<l;++j){
				int p;
				scanf("%d",&p);
				--p;
				c[i].push_back(p);
			}
		}
		vector<P> d;
		bool e[15][1<<15]={};
		e[0][b]=true;
		queue<P> f;
		f.push(P(0,b,-1));
		bool g=false;
		while(!f.empty()){
			d.push_back(f.front());
			if(d.back().p==n-1)
				g=true;
			if(d.back().p==n-1&&d.back().q==1<<(n-1))
				break;
			f.pop();
			for(i=0;i<(int)c[d.back().p].size();++i){
				if(c[d.back().p][i]==d.back().p||e[d.back().p][d.back().q^1<<c[d.back().p][i]])
					continue;
				e[d.back().p][d.back().q^1<<c[d.back().p][i]]=true;
				f.push(P(d.back().p,d.back().q^1<<c[d.back().p][i],d.size()-1));
			}
			for(i=0;i<(int)a[d.back().p].size();++i){
				if(!(d.back().q>>a[d.back().p][i]&1)||e[a[d.back().p][i]][d.back().q])
					continue;
				e[a[d.back().p][i]][d.back().q]=true;
				f.push(P(a[d.back().p][i],d.back().q,d.size()-1));
			}
		}
		if(false){
		}else if(!f.empty()){
			vector<int> h;
			for(i=d.size()-1;i>=0;i=d[i].r)
				h.push_back(i);
			printf("You can go home in %d steps.\n",h.size()-1);
			for(i=h.size()-1;i;--i){
				if(d[h[i]].p==d[h[i-1]].p)
					printf("Switch %s room %d.\n",(d[h[i]].q^d[h[i-1]].q)&d[h[i-1]].q?"on":"off",(int)(log((double)(d[h[i]].q^d[h[i-1]].q))/log(2.))+1);
				else
					printf("Move to room %d.\n",d[h[i-1]].p+1);
			}
		}else if(g){
			puts("You can not switch off all lights.");
		}else{
			puts("Help me!");
		}
	}
	return 0;
}