#include <iostream>
#include <vector>
#include <string>
using namespace std;
const int MAXN = 1000005;
struct Node {
int cnt[5];
char map[5];
} tree[4 * MAXN];
int n, m;
string initial_str;
void push_up(int node) {
for (int i = 0; i < 5; ++i) {
tree[node].cnt[i] = tree[2 * node].cnt[i] + tree[2 * node + 1].cnt[i];
}
}
void apply_map(int node, const char* p_map) {
int new_cnt[5] = {0};
char new_map[5];
for (int i = 0; i < 5; ++i) {
new_cnt[p_map[i]] += tree[node].cnt[i];
new_map[i] = p_map[tree[node].map[i]];
}
for (int i = 0; i < 5; ++i) {
tree[node].cnt[i] = new_cnt[i];
tree[node].map[i] = new_map[i];
}
}
void push_down(int node) {
apply_map(2 * node, tree[node].map);
apply_map(2 * node + 1, tree[node].map);
for (int i = 0; i < 5; ++i) tree[node].map[i] = i;
}
void build(int node, int start, int end) {
for (int i = 0; i < 5; ++i) tree[node].map[i] = i;
if (start == end) {
tree[node].cnt[initial_str[start - 1] - 'a'] = 1;
return;
}
int mid = (start + end) / 2;
build(2 * node, start, mid);
build(2 * node + 1, mid + 1, end);
push_up(node);
}
int find_kth(int node, int start, int end, int k, int color) {
if (start == end) return start;
push_down(node);
int mid = (start + end) / 2;
int left_count = tree[2 * node].cnt[color];
if (k <= left_count) {
return find_kth(2 * node, start, mid, k, color);
} else {
return find_kth(2 * node + 1, mid + 1, end, k - left_count, color);
}
}
void update(int node, int start, int end, int l, int r, int c_from, int c_to) {
if (l > end || r < start) return;
if (l <= start && end <= r) {
char trans[5];
for(int i = 0; i < 5; ++i) trans[i] = i;
trans[c_from] = c_to;
apply_map(node, trans);
return;
}
push_down(node);
int mid = (start + end) / 2;
update(2 * node, start, mid, l, r, c_from, c_to);
update(2 * node + 1, mid + 1, end, l, r, c_from, c_to);
push_up(node);
}
void print_tree(int node, int start, int end) {
if (start == end) {
for (int i = 0; i < 5; ++i) {
if (tree[node].cnt[i]) {
cout << (char)('a' + i);
return;
}
}
return;
}
push_down(node);
int mid = (start + end) / 2;
print_tree(2 * node, start, mid);
print_tree(2 * node + 1, mid + 1, end);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m >> initial_str;
build(1, 1, n);
for (int i = 0; i < m; ++i) {
int p;
char c1, c2;
cin >> p >> c1 >> c2;
int color_from = c1 - 'a';
int color_to = c2 - 'a';
if (color_from == color_to || p == 0) continue;
int idx = find_kth(1, 1, n, p, color_from);
update(1, 1, n, 1, idx, color_from, color_to);
}
print_tree(1, 1, n);
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNQVhOID0gMTAwMDAwNTsKCnN0cnVjdCBOb2RlIHsKICAgIGludCBjbnRbNV07CiAgICBjaGFyIG1hcFs1XTsKfSB0cmVlWzQgKiBNQVhOXTsKCmludCBuLCBtOwpzdHJpbmcgaW5pdGlhbF9zdHI7Cgp2b2lkIHB1c2hfdXAoaW50IG5vZGUpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7CiAgICAgICAgdHJlZVtub2RlXS5jbnRbaV0gPSB0cmVlWzIgKiBub2RlXS5jbnRbaV0gKyB0cmVlWzIgKiBub2RlICsgMV0uY250W2ldOwogICAgfQp9Cgp2b2lkIGFwcGx5X21hcChpbnQgbm9kZSwgY29uc3QgY2hhciogcF9tYXApIHsKICAgIGludCBuZXdfY250WzVdID0gezB9OwogICAgY2hhciBuZXdfbWFwWzVdOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7CiAgICAgICAgbmV3X2NudFtwX21hcFtpXV0gKz0gdHJlZVtub2RlXS5jbnRbaV07CiAgICAgICAgbmV3X21hcFtpXSA9IHBfbWFwW3RyZWVbbm9kZV0ubWFwW2ldXTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7ICsraSkgewogICAgICAgIHRyZWVbbm9kZV0uY250W2ldID0gbmV3X2NudFtpXTsKICAgICAgICB0cmVlW25vZGVdLm1hcFtpXSA9IG5ld19tYXBbaV07CiAgICB9Cn0KCnZvaWQgcHVzaF9kb3duKGludCBub2RlKSB7CiAgICBhcHBseV9tYXAoMiAqIG5vZGUsIHRyZWVbbm9kZV0ubWFwKTsKICAgIGFwcGx5X21hcCgyICogbm9kZSArIDEsIHRyZWVbbm9kZV0ubWFwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB0cmVlW25vZGVdLm1hcFtpXSA9IGk7Cn0KCnZvaWQgYnVpbGQoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHRyZWVbbm9kZV0ubWFwW2ldID0gaTsKICAgIAogICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICAgIHRyZWVbbm9kZV0uY250W2luaXRpYWxfc3RyW3N0YXJ0IC0gMV0gLSAnYSddID0gMTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIGludCBtaWQgPSAoc3RhcnQgKyBlbmQpIC8gMjsKICAgIGJ1aWxkKDIgKiBub2RlLCBzdGFydCwgbWlkKTsKICAgIGJ1aWxkKDIgKiBub2RlICsgMSwgbWlkICsgMSwgZW5kKTsKICAgIHB1c2hfdXAobm9kZSk7Cn0KCmludCBmaW5kX2t0aChpbnQgbm9kZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgaywgaW50IGNvbG9yKSB7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gc3RhcnQ7CiAgICAKICAgIHB1c2hfZG93bihub2RlKTsKICAgIGludCBtaWQgPSAoc3RhcnQgKyBlbmQpIC8gMjsKICAgIGludCBsZWZ0X2NvdW50ID0gdHJlZVsyICogbm9kZV0uY250W2NvbG9yXTsKICAgIAogICAgaWYgKGsgPD0gbGVmdF9jb3VudCkgewogICAgICAgIHJldHVybiBmaW5kX2t0aCgyICogbm9kZSwgc3RhcnQsIG1pZCwgaywgY29sb3IpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmluZF9rdGgoMiAqIG5vZGUgKyAxLCBtaWQgKyAxLCBlbmQsIGsgLSBsZWZ0X2NvdW50LCBjb2xvcik7CiAgICB9Cn0KCnZvaWQgdXBkYXRlKGludCBub2RlLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBsLCBpbnQgciwgaW50IGNfZnJvbSwgaW50IGNfdG8pIHsKICAgIGlmIChsID4gZW5kIHx8IHIgPCBzdGFydCkgcmV0dXJuOwogICAgCiAgICBpZiAobCA8PSBzdGFydCAmJiBlbmQgPD0gcikgewogICAgICAgIGNoYXIgdHJhbnNbNV07CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDU7ICsraSkgdHJhbnNbaV0gPSBpOwogICAgICAgIHRyYW5zW2NfZnJvbV0gPSBjX3RvOwogICAgICAgIGFwcGx5X21hcChub2RlLCB0cmFucyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBwdXNoX2Rvd24obm9kZSk7CiAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CiAgICB1cGRhdGUoMiAqIG5vZGUsIHN0YXJ0LCBtaWQsIGwsIHIsIGNfZnJvbSwgY190byk7CiAgICB1cGRhdGUoMiAqIG5vZGUgKyAxLCBtaWQgKyAxLCBlbmQsIGwsIHIsIGNfZnJvbSwgY190byk7CiAgICBwdXNoX3VwKG5vZGUpOwp9Cgp2b2lkIHByaW50X3RyZWUoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7CiAgICAgICAgICAgIGlmICh0cmVlW25vZGVdLmNudFtpXSkgewogICAgICAgICAgICAgICAgY291dCA8PCAoY2hhcikoJ2EnICsgaSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBwdXNoX2Rvd24obm9kZSk7CiAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CiAgICBwcmludF90cmVlKDIgKiBub2RlLCBzdGFydCwgbWlkKTsKICAgIHByaW50X3RyZWUoMiAqIG5vZGUgKyAxLCBtaWQgKyAxLCBlbmQpOwp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKCiAgICBjaW4gPj4gbiA+PiBtID4+IGluaXRpYWxfc3RyOwoKICAgIGJ1aWxkKDEsIDEsIG4pOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgKytpKSB7CiAgICAgICAgaW50IHA7CiAgICAgICAgY2hhciBjMSwgYzI7CiAgICAgICAgY2luID4+IHAgPj4gYzEgPj4gYzI7CiAgICAgICAgaW50IGNvbG9yX2Zyb20gPSBjMSAtICdhJzsKICAgICAgICBpbnQgY29sb3JfdG8gPSBjMiAtICdhJzsKICAgICAgICAKICAgICAgICBpZiAoY29sb3JfZnJvbSA9PSBjb2xvcl90byB8fCBwID09IDApIGNvbnRpbnVlOwogICAgICAgIAogICAgICAgIGludCBpZHggPSBmaW5kX2t0aCgxLCAxLCBuLCBwLCBjb2xvcl9mcm9tKTsKICAgICAgICB1cGRhdGUoMSwgMSwgbiwgMSwgaWR4LCBjb2xvcl9mcm9tLCBjb2xvcl90byk7CiAgICB9CgogICAgcHJpbnRfdHJlZSgxLCAxLCBuKTsKICAgIGNvdXQgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==