/*
TASK:gen
LANG:C
*/

#include <stdio.h>
#include <string.h>

typedef char string[101];

char s[101], p1[100][2], p2[100][3], letter[26];
short p1c, p2c, sl;
string queue[10000];
short queuel[10000];
long qf=0, ql=0;

int get(string *s, short *l)
{
  if(qf==ql)
    return 0;
  strcpy((char*)s, queue[qf]);
  *l=queuel[qf++];
  return 1;
}

void add(string *s, short l)
{
  queuel[ql]=l;
  strcpy(queue[ql++], (char*)s);
}

void input(void)
{
  char t[5];
  short i;
  gets(s);
  scanf("%hd\n", &p1c);
  for(i=0; i<p1c; ++i)
  {
    gets(t);
    p1[i][0]=t[0];
    p1[i][1]=t[1];
  }
  scanf("%hd\n", &p2c);
  for(i=0; i<p2c; ++i)
  {
    gets(t);
    p2[i][0]=t[0];
    p2[i][1]=t[1];
    p2[i][2]=t[2];
  }
  sl=strlen(s);
}

int check(char *str)
{
  static short i, j;
  static char f;
  for(i=0; i<sl; ++i)
  {
    f=0;
    for(j=0; j<p1c; j++)
    {
      if(p1[j][0]==str[i]&&p1[j][1]==s[i])
        f=1;
    }
    if(f)
      continue;
    return 0;
  }
  return 1;
}

int main(void)
{
  short i, l, j, k;
  string ts, ts2;
  memset(letter, 0, 26);
  input();
  for(i=0; i<p2c; ++i)
  {
    qf=ql=0;
    add((string*)&p2[i][1], 2);
    while(get(&ts, &l))
    {
      if(l==sl)
      {
        if(check(&ts))
        {
          letter[p2[i][0]-'A']=1;
          break;
        }
        continue;
      }
      for(j=0; j<l; ++j)
        for(k=0; k<p2c; ++k)
          if(p2[k][0]==ts[j])
          {
            memcpy(&ts2, &ts, j);
            memcpy(&ts2[j], &p2[k][1], 2);
            memcpy(&ts2[j+2], &ts[j+1], l-j-1);
            add(ts2, l+1);
          }
    }
  }
  for(i=0; i<26; ++i)
    if(letter[i])
      printf("%c", 'A'+i);
  printf("\n");
  return 0;
}
