/*
  AOJ 1037
  Title:Midnight Tea Time
  @kankichi573
*/
#include <stdio.h>
#include <string.h>

int a1,a2,a3,a4;
char node[11];
char s_exp[100];
int dist[16],n;

void evaluate(char s_exp[],int dist[])
{
  int ret,dist1[16],dist2[16],lv,len;
  int i,j;
  char *p,*q,*r; 

  //printf("s-exp=[%s]\n",s_exp);
  memset(dist,0,sizeof(dist));
  memset(dist1,0,sizeof(dist1));
  memset(dist2,0,sizeof(dist2));

  if((ret=atoi(s_exp))>0)
    {
      dist[node[ret]]=1;
      return;
    }

  lv=0;
  len=strlen(s_exp);
  for(p=s_exp;*p;p++)
    {
      if(*p=='(')
	lv++;
      if(*p==')')
	lv--;
      if(lv==1 && *p==' ')
	{
	  q=p;
	  break;
	}
    }
  *q=0;
  evaluate(s_exp+1,dist1);
  s_exp[len-1]='\0';
  evaluate(p+1,dist2);
  
  for(i=0;i<16;i++)
    for(j=0;j<16;j++)
      {
	dist[i & j] += dist1[i]*dist2[j];
	dist[i | j] += dist1[i]*dist2[j];
	dist[i ^ j] += dist1[i]*dist2[j];
      }
}

main()
{
  int i,ret,dn;
  
  fgets(s_exp,100,stdin);
    {
      
      scanf("%d",&n);
      for(i=1;i<=n;i++)
	{
	  scanf("%d %d %d %d",&a1,&a2,&a3,&a4);
	  node[i]=8*a1+4*a2+2*a3+a4;
	}
      
      s_exp[strlen(s_exp)-1]=0;
      evaluate(s_exp,dist);
      printf("%d\n",dist[15]);
    }
  return(0);
}