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

#include <stdio.h>

#include <vector>

using namespace std;


#define MAXN 128
#define IN "gen.in"
#define OUT "gen.out"
#define pb push_back
#define mp make_pair
#define sz size()
#define X first
#define Y second
#define PII pair<int,int>

char str[MAXN] = {};
int ar[MAXN] = {};
int letter[1024] = {};
vector<int> v1[MAXN];
vector<PII > v[MAXN];
char vis[MAXN][MAXN][MAXN] = {};
int dp[MAXN][MAXN][MAXN] = {};
int h[MAXN][MAXN] = {};
int N;


int init() {
    int Free = 1;
    for (int i='a'; i<='z'; i++) {
        letter[i] = Free++;
    }
    for (int i='A'; i<='Z'; i++) {
        letter[i] = Free++;
    }
    return 0;
}

int read() {
    int k;
    scanf("%s\n",str);
    scanf("%d\n",&k);
    
    for (int i=1; i<=k; i++) {
        char c1,c2;
        scanf("%c%c\n",&c1,&c2);
        h[(int)letter[(int)c2]][(letter[(int)c1])] = 1;
    }
    scanf("%d\n",&k);
    for (int i=1; i<=k; i++) {
        char c1,c2,c3;
        scanf("%c%c%c\n",&c1,&c2,&c3);
        v[(int)letter[(int)c1]].pb(mp(letter[(int)c2],letter[(int)c3]));
    }
    N = strlen(str)-1;

    for (int i=0; i<=N; i++) {
        ar[i] = letter[(int)str[i]];
    }
    return 0;
}

int can (int a,int b,int c) {
    if (vis[a][b][c] == 1) return dp[a][b][c];
    vis[a][b][c] = 1;
    int & ret = dp[a][b][c];
    ret = 0;
    
    if (a==b) {
       if (h[ar[a]][c]) ret = 1;
       return ret;
    }

    for (int k=a; k<b; k++) {
        for (unsigned i=0; i<v[c].size(); i++) {
            if (can(a,k,v[c][i].X) && can(k+1,b,v[c][i].Y)) {
               ret = 1;
               return ret;
            }
        }
    }
    return ret;
}

int main () {
//    freopen(IN,"r",stdin);
//    freopen(OUT,"w",stdout);
    
    init();
    read();

    int ans = 0;
    for (int i='A'; i<='Z'; i++) {
        if (can(0,N,letter[i])) {
           printf("%c",(char)i);
           ans++;
        }
    }
    if (ans == 0) {
       printf("0");
    }
    printf("\n");
    return 0;
}

