/*
TASK:gen
LANG:C++
*/

#include <stdio.h>
//#include <conio.h>
#include <time.h>
#include <algorithm>
#include <queue>
#include <string>
#include <set>
using namespace std;

#define MN  128
#define pr  printf

vector<char> t1[256],t2[256][256];
int t1n,t2n;
char a[MN];
queue<string> q;
set<char> st;
set<string> sts[MN];

void readf()
{
	//freopen("p2.in","r",stdin);    // to rem
	scanf("%s",a);
	scanf("%d",&t1n);
	char buf[20];
	for (int i=0;i<t1n;++i) {
		scanf("%s",buf);
		t1[buf[1]].push_back(buf[0]);
	}
	scanf("%d",&t2n);
	for (int i=0;i<t2n;++i) {
		scanf("%s",buf);
		t2[buf[1]][buf[2]].push_back(buf[0]);
	}
	//for (int i=0;i<t2['A']['B'].size();++i)pr("%c,",t2['A']['B'][i]);
}

void solve()
{
	string cs(a);
	q.push(cs);
	sts[cs.length()].insert(cs);
	
	int i,l,j;
	//int cnt=0;

	while (!q.empty() && clock()<980) {
		cs=q.front();
		q.pop();
		l=cs.length();

		if (l==1) { st.insert(cs[0]); continue; }
		
		for (i=0;i<l;++i) {
			if (i>0) {
				for (j=0;j<t2[cs[i-1]][cs[i]].size();++j) {
					string s(cs);
					s[i-1]=t2[cs[i-1]][cs[i]][j];
					s.erase(i,1);
					if (sts[l-1].find(s)==sts[l-1].end()) {
						q.push(s);
						sts[l-1].insert(s);
					}
				}
			}
			
			for (j=0;j<t1[cs[i]].size();++j) {
				string s(cs);
				s[i]=t1[cs[i]][j];
				if (sts[l].find(s)==sts[l].end()) {
					q.push(s);
					sts[l].insert(s);
				}
			}
		}
	}
	
	if (st.empty() || !q.empty()) pr("0\n");
	else {
		for (set<char>::iterator it=st.begin(); it!=st.end(); it++) pr("%c",*it);
		pr("\n");
	}
}

int main()
{
	readf();
	solve();

    //getch();
    return 0;
}
