rt
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define re register
const int N=1e5+7;
int n,m,d,head1[N],head2[N],cnt1=0,cnt2=0,tot=0,rp=0,q[N],f[N];
string s;
int wh[17],num[N][4];
char si[N][4];
bool vis[N],flag=false;
struct edge{
int to,next,dis;
}e1[N<<1],e2[N<<1];
inline void add1(int from,int to,int dis){
e1[++cnt1]={to,head1[from],dis};
head1[from]=cnt1;
}
inline void add2(int from,int to,int dis){
e2[++cnt2]={to,head2[from],dis};
head2[from]=cnt2;
}
inline void add(int u,int v,int w){
add1(u,v,w);
add2(v,u,w);
}
inline void dfs1(int u){
vis[u]=1;
for(re int i=head1[u];i;i=e1[i].next){
int v=e1[i].to;
if(!vis[v])dfs1(v);
}
q[++tot]=u;
}
inline void dfs2(int u,int fa){
vis[u]=0,f[u]=fa;
for(re int i=head2[u];i;i=e2[i].next){
int v=e2[i].to;
if(vis[v])dfs2(v,fa);
}
}
inline int get(int k,char x){
if(s[k]=='a'){
if(x=='B')return k;
return k+n;
}
if(s[k]=='b'){
if(x=='A')return k;
return k+n;
}
if(s[k]=='c'){
if(x=='A')return k;
return k+n;
}
}
inline int find(int a){
if(a>n)return a-n;
return a+n;
}
inline void init(){
cnt1=cnt2=tot=rp=0;
memset(head1,0,sizeof(head1));
memset(head2,0,sizeof(head2));
memset(q,0,sizeof(q));
memset(f,0,sizeof(f));
memset(vis,0,sizeof(vis));
}
inline bool work(){
init();
for(re int i=1;i<=m;++i){
int a=num[i][1];
char ha=si[i][1];
int b=num[i][2];
char hb=si[i][2];
if(s[a]==ha+32)continue;
int n1=get(a,ha),n2=get(b,hb);
if(s[b]==hb+32)add(n1,find(n1),0);
else{
add(n1,n2,0);
add(find(n2),find(n1),0);
}
}
for(re int i=1;i<=2*n;++i){
if(!vis[i])dfs1(i);
}
for(re int i=2*n;i>=1;--i){
if(vis[q[i]])dfs2(q[i],++rp);
}
for(re int i=1;i<=n;++i){
if(f[i]==f[i+n]){
return 0;
}
}
return 1;
}
inline void dfs(int k){
if(k>d){
if(work())flag=1;
return ;
}
for(re int i=0;i<2;++i){
s[wh[k]]=i+'a';
dfs(k+1);
if(flag)return;
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
s+='#';
for(re int i=1;i<=n;++i){
char ch;cin>>ch;
s+=ch;
if(ch=='x')wh[++d]=i;
}
cin>>m;
for(re int i=1;i<=m;++i){
cin>>num[i][1]>>si[i][1]>>num[i][2]>>si[i][2];
}
dfs(1);
if(!flag){
puts("-1");
return 0;
}
for(re int i=1;i<=n;++i){
if(s[i]=='a'){
if(f[i]>=f[i+n])cout<<"B";
else cout<<"C";
}
if(s[i]=='b'){
if(f[i]>=f[i+n])cout<<"A";
else cout<<"C";
}
if(s[i]=='c'){
if(f[i]>=f[i+n])cout<<"A";
else cout<<"B";
}
}
}