rt,悬1关,orz
#include<bits/stdc++.h>
using namespace std;
const int N=25;
bool v;
int dy[N],jy[N],lr[N],lg[N],vdie[N];
int bdy[N],bjy[N],blr[N],blg[N],bvdie[N];
int t,n,a[N],m,op,id1,id2,jss[N],die[N],d,s;
bool cz(int js,int x,int y){
// 1狼 2民 3猎 4巫
if(x<1||x>n||y<1||y>n)return 0;//编号不合法
if(vdie[x]<0||vdie[y]<0)return 0;//之前死的
if(js==0){//狼
if(jss[x]!=1)return 0;//不是狼
if(vdie[x]||vdie[y])return 0;//杀或被杀的已经死了
if(lg[x])return 0;//用过技能了
if(x==y)return 0;//杀自己
lg[x]=1;//今天杀过了
vdie[y]=1,d++;//杀了
return 1;
}else if(js==1){//巫毒(堵)
if(jss[x]!=4)return 0;//不是巫
if(vdie[x]||vdie[y])return 0;//杀或被杀的已经死了
if(dy[x])return 0;//用过技能了
if(x==y)return 0;//杀自己
dy[x]=t+114;//毒药夜
if(dy[x]==jy[x])return 0;//同一天用技能
vdie[y]=1,d++;//杀了
return 1;
}else if(js==2){//巫救
if(jss[x]!=4)return 0;//不是巫
if(vdie[x]||!vdie[y])return 0;//巫死了或救的是活的
if(jy[x])return 0;//用过技能了
if(x==y&&vdie[x]!=1)return 0;//救自己且还活着
jy[x]=t+114;//解药夜
if(dy[x]==jy[x])return 0;//同一天用技能
vdie[y]=0,d--;//救了
return 1;
}else if(js==3){//猎
if(jss[x]!=3)return 0;//不是猎
if(vdie[x]!=1)return 0;//未死
if(lr[x])return 0;//用过技能了
if(x==y)return 0;//杀自己
lr[x]=1;//带走了
vdie[y]=1,d++;
return 1;
}else{
return 0;
}
}
void bf(){
for(int i=1;i<=n;i++){
bdy[i]=dy[i],bjy[i]=jy[i];
blr[i]=lr[i],blg[i]=lg[i],bvdie[i]=vdie[i];
}
}
void hy(){
for(int i=1;i<=n;i++){
dy[i]=bdy[i],jy[i]=bjy[i];
lr[i]=blr[i],lg[i]=blg[i],vdie[i]=bvdie[i];
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0);
cin>>t>>n;
for(int i=1;i<=n;i++){
cin>>a[i],jss[i]=a[i];
}
while(t--){
cin>>m;
d=s=0,v=1;
memset(lg,0,sizeof(lg));//狼技能重置
while(m--){
cin>>op>>id1>>id2,v&=cz(op,id1,id2);
}
if(!v){
cout<<"Wrong\n";
}else{
bool f=0;
for(int i=1;i<=n;i++){
if(vdie[i]==1&&a[i]==3&&!lr[i]){
f=1,cout<<"Wrong\n",hy();break;
}
}
if(f)continue;
if(!d){cout<<"Safe\n";bf();continue;}
cout<<d;
for(int i=1;i<=n;i++){
if(vdie[i]==1)cout<<" "<<i,vdie[i]=-1;
}
bf();cout<<"\n";
}
}
return 0;
}