#include<bits/stdc++.h>usingnamespace std;using ll =longlong;
map<char,int>mp[1005];//一个数组,每个数字表示一个点,//里面用map存转换函数int a[10005];//为终态,终态是数字intmain(){int n, st;
cin >> st >> n;//st是初态for(int i =1; i <= n; i++){int x;//终态集合
cin >> x;
a[x]=1;}int m;
cin >> m;//转换函数数量for(int i =1; i <= m; i++){char c;int u, v;//u经c到v
cin >> u >> c >> v;
mp[u][c]= v;}
string s;
cin >> s;//判断的字符
vector<int> ans;
ans.push_back(st);//需要输出转换的路径,用vector存放结点int u = st;for(int i =0; i < s.length(); i++){//s还没判断完char now = s[i];//现在是到s的第几个字符if(mp[u][now]){//u这个点的转换函数存在
ans.push_back(mp[u][now]);
u = mp[u][now];//移动到下一个点}else{
cout <<"False";return0;}}if(!a[u]){//判断完毕,u不是终态
cout <<"False";return0;}for(int i =0; i < ans.size()-1; i++)
cout << ans[i]<<"->";
cout << ans.back()<< endl;//在这里注意vector最后一个元素的输出//因为有‘->’,如果输出到尾,那么还会输出一个,不符合标准
cout <<"True"<< endl;return0;}