{
TASK:gen
LANG:PASCAL
}

type el = record
           ch1, ch2 : char;
          end;



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;
    b : array['A'..'Z', 0..100] of el;
    c : array['A'..'Z'] of longint;
    vr, 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;
     inc(c[ch]);
     b[ch, c[ch]].ch1 := ch1;
     b[ch, c[ch]].ch2 := ch2;
    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 ch := 'A' to 'Z' do
            begin
             vr := c[ch];
             for o := 1 to vr do
               begin
                ch1 := b[ch, o].ch1;
                ch2 := b[ch, o].ch2;
                if (a[i, l, ch1] = 1) and (a[l + 1, j, ch2] = 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.

