{
TASK:gen
LANG:PASCAL
}




var t1 : array['a'..'z', '@'..'Z'] of byte;
    t2 : array['A'..'Z', 'A'..'Z', '@'..'Z'] of byte;
    a : array[0..100, 0..100, '@'..'Z'] of byte;
    fl, len, n1, n2, i, j, k, l, o, p, m, n : longint;
    s, s1, s2 : string;
    ch, ch1, ch2 : char;


procedure input;
var f : text;
    ch, ch1, ch2, ch3 : char;
 begin
  assign(f, '');
  reset(f);
  readln(f, s);
  readln(f, n1);
  for i := 1 to n1 do
    begin
     readln(f, ch1, ch2);
     t1[ch2, ch1] := 1;
    end;
  readln(f, n2);
  for i := 1 to n2 do
    begin
     readln(f, ch, ch1, ch2);
     t2[ch1, ch2, ch] := 1;
    end;
  close(f);
 end;


begin
 input;

 n := length(s);
 for i := 1 to n do
   begin
    for ch := 'A' to 'Z' do
      if t1[s[i], ch] = 1 then a[i, i, ch] := 1;
   end;
 for len := 2 to n do
   begin
    for i := 1 to n - len + 1 do
      begin
       j := i + len - 1;
       for l := i to j - 1 do
         begin
          for ch1 := 'A' to 'Z' do
            for ch2 := 'A' to 'Z' do
              begin
               if (a[i, l, ch1] = 1) and (a[l + 1, j, ch2] = 1) then
                 begin
                  for ch := 'A' to 'Z' do
                    if t2[ch1, ch2, ch] = 1 then a[i, j, ch] := 1;
                 end;
              end;
         end;
      end;
   end;
 for ch := 'A' to 'Z' do
   if a[1, n, ch] = 1 then
     begin
      fl := 1;
      write(ch);
     end;
 if fl = 1 then writeln
 else writeln(0);
end.

