/*
TASK:gen
LANG:C++
*/
#include<cstdio>
#include<cstring>
#define MAXC 32
#define MAXN 128
int dp[MAXC][MAXN][MAXN];
char str[MAXN];
int  want[MAXN];
int n;
int p1,p2;
typedef struct
{
    int b;
    int e;
}P1;
typedef struct
{
    int b;
    int e1,e2;
}P2;
P1 f[MAXN];
P2 s[MAXN];
int fl=0;
void init()
{
    char p[8];
//    freopen("gen.in","r",stdin);
    scanf("%s",str);
    n=strlen(str);
    scanf("%d",&p1);
    for(int i=0;i<p1;i++)
    {
        scanf("%s",p);
        f[i].b=p[0]-'A';
        f[i].e=p[1]-'a';
    }
    
    scanf("%d",&p2);
    for(int i=0;i<p2;i++)
    {
        scanf("%s",p);
        s[i].b=p[0]-'A';
        s[i].e1=p[1]-'A';
        s[i].e2=p[2]-'A';
    }
    for(int i=0;i<n;i++)
    {
        want[i]=str[i]-'a';
    }
}
void solve()
{
    int i,j,k,l,m;
    for(i=0;i<p1;i++)
    {
        for(j=0;j<n;j++)
        {
        if(want[j]==f[i].b)
                dp[f[i].b][1][j]=1;
        }
    }
    for(i=2;i<=n;i++)
        for(j=0;j<=n-i;j++)
            for(k=0;k<=p2;k++)
                for(l=1;l<=i;l++)
                {
                    if(dp[s[k].e1][l][j]&&dp[s[k].e2][i-l][j+l])
                        dp[s[k].b][i][j]=1;
                }
}
void output()
{
    for(int i=0;i<MAXC;i++)
    {
        if(dp[i][n][0]==1) {fl=1;printf("%c",i+'A');}
    }
    if(!fl)
    {
        printf("0");
    }
    printf("\n");
}
int main()
{
    init();
    solve();
    output();
    return 0;
}
