#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
int n, d, m, res = 0;
string s;
vector<int> x, a, b;
vector<char> aa, bb;
vector<vector<int>> p;
char dif[3][3] = { {' ', 'C', 'B'},
{'C', ' ', 'A'},
{'B', 'A', ' '}
};
vector<int> dfn, low, col;
int dfncnt, colcnt;
vector<bool> ins;
stack<int> S;
void tarjan(int id) {
dfn[id] = low[id] = ++dfncnt;
S.push(id);
ins[id] = 1;
for(auto &i : p[id]) {
if(!dfn[i]) {
tarjan(i);
low[id] = min(low[id], low[i]);
}
else if(ins[i]) {
low[id] = min(low[id], dfn[i]);
}
}
if(dfn[id] == low[id]) {
while(S.top() != id) {
col[S.top()] = colcnt;
ins[S.top()] = 0;
S.pop();
}
col[S.top()] = colcnt;
ins[S.top()] = 0;
S.pop();
++colcnt;
}
}
void solve() {
map<pair<int, char>, int> mp;
int cnt = 1;
for(int i = 0; i < s.size(); ++i) {
int ch = s[i] - 'A';
mp[{i, (ch + 1) % 3 + 'A'}] = cnt++;
mp[{i, dif[(ch + 1) % 3][ch]}] = cnt++;
}
{
vector<vector<int>> pp(cnt);
swap(p, pp);
}
dfn.resize(cnt, 0);
low.resize(cnt, 0);
col.resize(cnt, 0);
ins.resize(cnt, 0);
dfncnt = 0;
colcnt = 1;
while(S.size()) S.pop();
for(int i = 0; i < m; ++i) {
int u = mp[{a[i], aa[i]}],
v = mp[{b[i], bb[i]}],
uu = mp[{a[i], dif[s[a[i]] - 'A'][aa[i] - 'A']}],
vv = mp[{b[i], dif[s[b[i]] - 'A'][bb[i] - 'A']}];
if(s[a[i]] == aa[i]) {
continue;
}
else if(s[b[i]] == bb[i]) {
p[u].push_back(uu);
}
else {
p[u].push_back(v);
p[vv].push_back(uu);
}
}
for(int i = 1; i < cnt; ++i) {
if(!dfn[i]) {
tarjan(i);
}
}
vector<char> res;
for(int i = 0; i < s.size(); ++i) {
int ch = s[i] - 'A';
int a = mp[{i, (ch + 1) % 3 + 'A'}], b = mp[{i, dif[(ch + 1) % 3][ch]}];
if(col[a] == col[b]) {
return;
}
else {
if(col[a] < col[b]) {
res.push_back((ch + 1) % 3 + 'A');
}
else {
res.push_back(dif[(ch + 1) % 3][ch]);
}
}
}
for(auto &x : res) {
cout << x;
}
exit(0);
}
void dfs(int id) {
if(id == x.size()) {
solve();
return;
}
s[x[id]] = 'A';
dfs(id + 1);
s[x[id]] = 'B';
dfs(id + 1);
s[x[id]] = 'C';
dfs(id + 1);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> d;
cin >> s;
cin >> m;
for(int i = 0; i < m; ++i) {
int s, t;
char u, v;
cin >> s >> u >> t >> v;
a.push_back(s - 1);
b.push_back(t - 1);
aa.push_back(u);
bb.push_back(v);
}
for(int i = 0; i < s.size(); ++i) {
s[i] = s[i] - 'a' + 'A';
if(s[i] == 'X') {
x.push_back(i);
}
}
dfs(0);
cout << -1;
return 0;
}