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

#include <iostream>
#include <cstdlib>
#include <vector>
#include <list>

using namespace std;
typedef vector<int> vint;
typedef list<char> lchar;
typedef list<int> lint;

vint sr[26];
vint br[677];
int nsr, nbr;

char input[101];
int iinput[100];
int il;
//solutions
bool sol[26];
lchar ss;
// possible
bool poss;
int numsols;

// smalls - whether the input contains small letters
// l - the last small letter, if present
// or the number of remaining chars, otherwise
void solve( int l, bool smalls );

int main( int argc, char *argv[] ) {
	scanf( "%s", input );
	int i = 0;
	while( input[i] != '\0' ) {
		iinput[i] = input[i] - 'a';
		++i;
	}
	il = i;
	
	scanf( "%d", &nsr );
	char c[4];
	for ( i = 0; i < nsr; ++i ) {
		scanf( "%s", c );
		sr[c[1]-'a'].push_back( c[0]-'A' );
	}
	scanf( "%d", &nbr );
	for ( i = 0; i < nbr; ++i ) {
		scanf( "%s", c );
		br[(c[1]-'A')*26 + c[2]-'A'].push_back( c[0]-'A' );
	}
	
	for ( i = 0; i < 26; ++i ) {
		sol[i] = false;
	}
	
	poss = true;
	numsols = 0;
	solve( 0, true );
	
	poss = false;
	for ( i = 0; i < 26; ++i ) {
		if ( sol[i] ) {
			c[0] = 'A' + i;
			printf( "%c", c[0] );
			poss = true;
		}
	}
	if ( poss == false )
		printf( "0" );
	printf( "\n" );
	
	return 0;
}


void solve( int l, bool smalls ) {
	if ( poss == false || numsols == 26 )
		return;
	
	if ( smalls ) {
		if ( l >= il ) {
			// no more smalls
			solve( il, false );
			return;
		}
		
		vint& rsr = sr[ iinput[l] ];
		if ( rsr.size() == 0 ) {
			poss = false;
			return;
		}
		int i;
		int end = rsr.size();
		for ( i = 0; i < end; ++i ) {
			iinput[l] = rsr[i];
			solve( l+1, true );
			if ( poss == false )
				return;
		}
		return;
	}
	
	// one char left
	if ( l == 1 ) {
		int i = 0;
		while ( iinput[i] == -1 ) ++i;
		if ( sol[ iinput[i] ] == false ) {
			sol[ iinput[i] ] = true;
			++numsols;
		}		
		return;
	}
	
	int i, j, a, b, e;
	i = 0;
	while ( iinput[i] == -1 ) ++i;
	b = i;
	int n, oa, ob;
	for ( i = i + 1; i < il; ++i ) {
		a = b;
		// find second char
		while ( iinput[i] == -1 ) ++i;
		b = i;
		oa = iinput[a];
		ob = iinput[b];
		n = 26*oa + ob;
		vint &rbr = br[n];
		e = rbr.size();
		if ( e == 0 ) continue;
		
		iinput[b] = -1;
		for ( j = 0; j < e; ++j ) {
			iinput[a] = rbr[j];
			solve( l - 1, false );
			if ( numsols == 26 ) return;
		}
		iinput[a] = oa;
		iinput[b] = ob;
	}
}
