/*
TASK: gen
LANG: C
*/
#include <stdio.h>
#include <string.h>

 int z[125][105][105];
 char a[105];
 int cb[125];
 int cc[125];
 int b[125][105];
 int c[125][105][2];
 int n,e;

 int solve (int ch,int i,int j)
  {
   int k,w;
   if (z[ch][i][j]!=-1) return z[ch][i][j];
   for (k=1;k<=cb[ch];k++)
    if (solve(b[ch][k],i,j))
     return z[ch][i][j]=1;
   for (k=1;k<=cc[ch];k++)
    for (w=i;w<j;w++)
     if (solve(c[ch][k][0],i,w) && solve(c[ch][k][1],w+1,j))
      return z[ch][i][j]=1;
   return (z[ch][i][j]=0);
  }  

 int main ()
  {
   int i,j,k;
   char pom[8];   
   scanf("%s",a);
   scanf("%d",&n);
   for (i=1;i<=n;i++)
    {
     scanf("%s",&pom);
     b[pom[0]][++cb[pom[0]]]=pom[1];
    }
   scanf("%d",&n);
   for (i=1;i<=n;i++)
    {
     scanf("%s",pom);
     ++cc[pom[0]];
     c[pom[0]][cc[pom[0]]][0]=pom[1];
     c[pom[0]][cc[pom[0]]][1]=pom[2];
    }
   memset(z,-1,sizeof(z));
   n=strlen(a);   
   for (i=n;i>=1;i--)
    {
     a[i]=a[i-1];
     z[a[i]][i][i]=1;
    }
   a[0]='!';
   j=0;
   for (i='A';i<='Z';i++)
    if (solve(i,1,n))
     {
      printf("%c",i);
      j=1;
     }
   if (j==0) printf("0");
   printf("\n");
   return 0;
  }
  
