#include <stdio.h>
#include <string.h>
#define MAX 2000
char a[MAX];
int n,t;
int mat[25][110];
int viz[1000];
int sir1[1000];
int viz1[1000];
int viz2[1000];
int sir2[1000];
int nr1,nr2;
void citire()
{
freopen ("episoade.in","r",stdin);
fgets(a,MAX,stdin);
scanf ("%d %d",&t,&n);
for (int i=0;i<t;i++)
for (int j=0;j<n;j++)
scanf ("%d ",&mat[i][j]);
}
long da(int st,int dr,char s1)
{
int num=0;
for (int i=st;i<=dr;i++)
{
if (a[i]==')')
num++;
else
if (a[i]=='(')
num--;
else
if (a[i]==s1 && num==0)
return i;
}
return -1;
}
long da2(int st,int dr,char s1)
{
int num=0;
for (int i=dr;i>=st;i--)
{
if (a[i]==')')
num++;
else
if (a[i]=='(')
num--;
else
if (a[i]==s1 && num==0)
return i;
}
return -1;
}
int paranteza(int &st,int &dr)
{
int num=0;
if (a[st]!='('&& a[dr]!=')')
return 0;
for (int i=dr-1;i>st;i--)
if (a[i]==')')
num++;
else
if (a[i]=='(')
{
num--;
if (num<0)
return 0;
}
if (num==0)
{
st++;
dr--;
return 1;
}
return 0;
}
long lal (int n,int m)
{
long aa=0;
char pp[100];
for (int k=n;k<=m;k++)
pp[k-n]=a[k];
pp[m-n+1]=0;
sscanf(pp,"%ld",&aa);
return aa;
}
void calc(int st,int dr,int au)
{
memset(viz1,0,sizeof(viz1));
memset(viz2,0,sizeof(viz2));
nr1=nr2=0;
int aux=0;
for (int i=st;i<au;i++)
{
while (a[i]>='0' && a[i]<='9')
{
aux=aux*10+a[i]-'0';
i++;
}
if (a[i-1]>='0' && a[i-1]<='9')
{
sir1[nr1++]=aux;
viz1[aux]=1;
aux=0;
}
}
for (int i=au+1;i<=dr;i++)
{
while (a[i]>='0' && a[i]<='9')
{
aux=aux*10+a[i]-'0';
i++;
}
if (a[i-1]>='0' && a[i-1]<='9')
{
sir2[nr2++]=aux;
viz2[aux]=1;
aux=0;
}
}
}
int fct(int poz)
{
int ok1=0,ok2=0,fost=0;
for (int i=0;i<n;i++)
if (viz1[mat[poz][i]]==1)
{
ok1++;
if (fost==2 && ok1>1)
return 0;
fost=1;
}
else
if (viz2[mat[poz][i]]==1)
{
ok2++;
if (fost==1 && ok2>1)
return 0;
fost=2;
}
return 1;
}
void unu(int st,int dr,int aux)
{
for (int i=0;i<t;i++)
if (viz[i])
viz[i]=fct(i);
}
int fct2(int poz,int nr1)
{
for (int i=0;i<n;i++)
if (viz1[mat[poz][i]]==1)
nr1--;
else
if (viz2[mat[poz][i]]==1)
{
if (nr1==0 && viz1[mat[poz][i-1]]==1)
return 1;
return 0;
}
return 1;
}
void doi(int st,int dr,int aux)
{
for (int i=0;i<t;i++)
if (viz[i])
viz[i]=fct2(i,nr1);
}
void calc2(int st,int dr,int au)
{
memset(viz1,0,sizeof(viz1));
memset(viz2,0,sizeof(viz2));
nr1=nr2=0;
int aux=0;
for (int i=st;i<au;i++)
{
while (a[i]>='0' && a[i]<='9')
{
aux=aux*10+a[i]-'0';
i++;
}
if (a[i-1]>='0' && a[i-1]<='9')
{
sir1[nr1++]=aux;
viz1[aux]=1;
aux=0;
}
}
int numar=0;
for (int i=au+1;i<=dr;i++)
{
if (a[i]=='(')
numar++;
if (a[i]==')')
numar--;
if (a[i]=='#' && numar==0)
return ;
while (a[i]>='0' && a[i]<='9')
{
aux=aux*10+a[i]-'0';
i++;
}
if (a[i-1]>='0' && a[i-1]<='9')
{
sir2[nr2++]=aux;
viz2[aux]=1;
aux=0;
if (a[i]=='(')
numar++;
if (a[i]==')')
numar--;
if (a[i]=='#' && numar==0)
return ;
}
}
}
void lol(int st,int dr)
{
while (paranteza(st,dr));
long aux=da(st+1,dr,'#');
if (aux==-1)
aux=da2(st+1,dr,'>');
if (aux==-1)
return ;
if (a[aux]=='>')
calc(st,dr,aux);
else
calc2(st,dr,aux);
switch (a[aux])
{
case '#': unu(st,dr,aux); break;
case '>': doi(st,dr,aux); break;;
}
lol(st,aux-1);
lol(aux+1,dr);
}
int main ()
{
citire();
for (int i=0;i<100;i++)
viz[i]=1;
int n=(a[strlen (a)-1]=='\n')?strlen(a)-2:strlen(a)-1;
freopen ("episoade.out","w",stdout);
lol(0,n);
for (int i=0;i<t;i++)
printf("%d\n",viz[i]);
return 0;
}