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

#define MAXN 110

void input();
void solve();


char s[MAXN] = {0};
char R1[MAXN][2] = {0};
char R2[MAXN][3] = {0};

int r1,r2;
int N;

int dp[MAXN][MAXN][MAXN] = {0};


int main()
{
    input();
    solve();
        
    return 0;
}




void solve()
{
int i,j,k;
int t;
int flag = 0;


for(i=1; i<=N; i++)
 for(j=1; j<=r1; j++)
  if(s[i] == R1[j][1])
   dp[i][1][R1[j][0]] = 1;
   
for(j=2; j<=N; j++)
 for(i=1; i+j-1<=N; i++)
  for(k=i; k<i+j-1; k++)
   for(t=1; t<=r2; t++)
    if(dp[i][k-i+1][R2[t][1]] && dp[k+1][i+j-k-1][R2[t][2]])
     dp[i][j][R2[t][0]] = 1;


for(i='A'; i<='Z'; i++)
 if(dp[1][N][i])
  {
  printf("%c",i);
  flag = 1;
  }

if(flag == 0) printf("0");
   
printf("\n");
}

void input()
{
int i;
s[0] = '#';
scanf("%s",s+1);
N = strlen(s) - 1;
scanf("%d",&r1);

for(i=1; i<=r1; i++)
 scanf("%s",R1[i]);

scanf("%d",&r2);

for(i=1; i<=r2; i++)
 scanf("%s",R2[i]);
}

