#include<bits/stdc++.h>
using namespace std;
const int WA = 2;
const int AC = 0;
const int maxn = 10005;
FILE *f_in, *f_out, *f_user;
void EXIT(int STATUS)
{
fclose(f_in);
fclose(f_out);
fclose(f_user);
exit(STATUS);
}
char buf[maxn];
int main(int argc, char **args)
{
f_in = fopen(args[1], "r");
f_out = fopen(args[2], "r");
f_user = fopen(args[3], "r");
//f_in = fopen("f_in.txt", "r");
//f_out = fopen("f_out.txt", "r");
//f_user = fopen("f_user.txt", "r");
int len;
fgets(buf, maxn, f_out);
len = strlen(buf);
while(len > 0 && buf[len-1] == '\r' || buf[len-1] == '\n') buf[--len] = 0;
if(strcmp(buf, "No Solution!") == 0)
{
fgets(buf, maxn, f_user);
len = strlen(buf);
while(len > 0 && buf[len-1] == '\r' || buf[len-1] == '\n') buf[--len] = 0;
if(strcmp(buf, "No Solution!") == 0)
{
int tmp;
if(fscanf(f_user, "%d", &tmp) == EOF) EXIT(AC);
else EXIT(WA);
}
else EXIT(WA);
}
set<int> st[20];
int need[20];
int k, n;
fscanf(f_in, "%d %d", &k, &n);
for(int i = 1; i <= k; i++) fscanf(f_in, "%d", &need[i]);
for(int i = 1; i <= n; i++)
{
int num;
fscanf(f_in, "%d", &num);
while(num--)
{
int type;
fscanf(f_in, "%d", &type);
st[type].insert(i);
}
}
bool f[20];
memset(f, 0, sizeof(f));
for(int i = 1; i <= k; i++)
{
set<int> done;
int idx;
if(fscanf(f_user, "%d:", &idx) != 1) EXIT(WA);
if(f[idx]) EXIT(WA);
f[idx] = 1;
for(int j = 1; j <= need[idx]; j++)
{
int id;
if(fscanf(f_user, "%d", &id) != 1) EXIT(WA);
if(st[idx].find(id) == st[idx].end()) EXIT(WA);
if(done.find(id) != done.end()) EXIT(WA);
done.insert(id);
}
}
int tmp;
if(fscanf(f_user, "%d", &tmp) == EOF)
EXIT(AC);
else EXIT(WA);
return 0;
}