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

#define MAXN 128
#define MAXA 32

char f[MAXN][MAXN][MAXA],str[MAXN],can[MAXA];
char t1[MAXN][8],t2[MAXN][8];

int main()
{
	int i,j,k,l,n,c1,c2,len,flg;
	scanf("%s",str);
	n=strlen(str);
	scanf("%d",&c1);
	for(i=0;i<c1;i++) scanf("%s",t1[i]);
	scanf("%d",&c2);
	for(i=0;i<c2;i++) scanf("%s",t2[i]);
	for(i=0;i<c2;i++)
	{
		len=strlen(t2[i]);
		for(j=0;j<len;j++) t2[i][j]-='A';
	}
	for(i=0;i<n;i++)
	{
		if('a'<=str[i]&&str[i]<='z')
		{
			for(j=0;j<c1;j++) if(t1[j][1]==str[i]) f[i][i][t1[j][0]-'A']=1;
		}
		else f[i][i][str[i]-'A']=1;
	}
	for(len=1;len<n;len++)
	{
		for(i=0;i<n-len;i++)
		{
			j=i+len;
			for(k=i;k<j;k++)
			{
				for(l=0;l<c2;l++)
				{
					if(f[i][k][(int)t2[l][1]]&&f[k+1][j][(int)t2[l][2]]) f[i][j][(int)t2[l][0]]=1;
				}
			}
		}
	}
	flg=0;
	for(j=0;j<=26;j++) if(f[0][n-1][j]) { can[j]=1; flg=1; }
	if(flg)
	{
		for(i=0;i<=26;i++) if(can[i]) printf("%c",i+'A');
	}
	else printf("0");
	printf("\n");
	return 0;
}
