#include <bits/stdc++.h>
using namespace std;
string s;
vector<vector<int>> tree;
void init_tree(int tree_id, int node_id = 1, int left = 0, int right = s.size())
{
if (left + 1 == right) {
tree[tree_id][node_id] = (s[left] - 'A') == tree_id;
return;
}
int middle = (left + right) / 2;
init_tree(tree_id, node_id + node_id, left, middle);
init_tree(tree_id, node_id + node_id + 1, middle, right);
tree[tree_id][node_id] = tree[tree_id][node_id + node_id] + tree[tree_id][node_id + node_id + 1];
}
void update_tree(int tree_id, int position, int value, int node_id = 1, int left = 0, int right = s.size())
{
if (position < left || right <= position) {
return;
}
if (left + 1 == right) {
tree[tree_id][node_id] += value;
return;
}
int middle = (left + right) / 2;
update_tree(tree_id, position, value, node_id + node_id, left, middle);
update_tree(tree_id, position, value, node_id + node_id + 1, middle, right);
tree[tree_id][node_id] = tree[tree_id][node_id + node_id] + tree[tree_id][node_id + node_id + 1];
}
int query_tree(int tree_id, int number, int node_id = 1, int left = 0, int right = s.size())
{
if (left + 1 == right) {
return left;
}
int middle = (left + right) / 2;
if (number <= tree[tree_id][node_id + node_id]) {
return query_tree(tree_id, number, node_id + node_id, left, middle);
} else {
return query_tree(tree_id, number - tree[tree_id][node_id + node_id], node_id + node_id + 1, middle, right);
}
}
void save_tree_to_string(int tree_id, int node_id = 1, int left = 0, int right = s.size())
{
if (tree[tree_id][node_id] == 0) {
return;
}
if (left + 1 == right) {
if (tree[tree_id][node_id] == 1) {
s[left] = (char)('A' + tree_id);
}
return;
}
int middle = (left + right) / 2;
save_tree_to_string(tree_id, node_id + node_id, left, middle);
save_tree_to_string(tree_id, node_id + node_id + 1, middle, right);
}
int main()
{
int q;
cin >> s >> q;
tree.assign(26, vector<int>(4 * s.size(), 0));
for (int i = 0; i < 26; ++i) {
init_tree(i);
}
while (q--) {
int number_1, number_2;
char letter_1, letter_2;
cin >> number_1 >> letter_1 >> number_2 >> letter_2;
int position_1 = query_tree(letter_1 - 'A', number_1);
int position_2 = query_tree(letter_2 - 'A', number_2);
update_tree(letter_1 - 'A', position_1, -1);
update_tree(letter_1 - 'A', position_2, 1);
update_tree(letter_2 - 'A', position_2, -1);
update_tree(letter_2 - 'A', position_1, 1);
}
for (int i = 0; i < 26; ++i) {
save_tree_to_string(i);
}
cout << s << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJpbmcgczsKdmVjdG9yPHZlY3RvcjxpbnQ+PiB0cmVlOwoKdm9pZCBpbml0X3RyZWUoaW50IHRyZWVfaWQsIGludCBub2RlX2lkID0gMSwgaW50IGxlZnQgPSAwLCBpbnQgcmlnaHQgPSBzLnNpemUoKSkKewogICAgaWYgKGxlZnQgKyAxID09IHJpZ2h0KSB7CiAgICAgICAgdHJlZVt0cmVlX2lkXVtub2RlX2lkXSA9IChzW2xlZnRdIC0gJ0EnKSA9PSB0cmVlX2lkOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBtaWRkbGUgPSAobGVmdCArIHJpZ2h0KSAvIDI7CiAgICBpbml0X3RyZWUodHJlZV9pZCwgbm9kZV9pZCArIG5vZGVfaWQsIGxlZnQsIG1pZGRsZSk7CiAgICBpbml0X3RyZWUodHJlZV9pZCwgbm9kZV9pZCArIG5vZGVfaWQgKyAxLCBtaWRkbGUsIHJpZ2h0KTsKICAgIHRyZWVbdHJlZV9pZF1bbm9kZV9pZF0gPSB0cmVlW3RyZWVfaWRdW25vZGVfaWQgKyBub2RlX2lkXSArIHRyZWVbdHJlZV9pZF1bbm9kZV9pZCArIG5vZGVfaWQgKyAxXTsKfQoKdm9pZCB1cGRhdGVfdHJlZShpbnQgdHJlZV9pZCwgaW50IHBvc2l0aW9uLCBpbnQgdmFsdWUsIGludCBub2RlX2lkID0gMSwgaW50IGxlZnQgPSAwLCBpbnQgcmlnaHQgPSBzLnNpemUoKSkKewogICAgaWYgKHBvc2l0aW9uIDwgbGVmdCB8fCByaWdodCA8PSBwb3NpdGlvbikgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChsZWZ0ICsgMSA9PSByaWdodCkgewogICAgICAgIHRyZWVbdHJlZV9pZF1bbm9kZV9pZF0gKz0gdmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKICAgIHVwZGF0ZV90cmVlKHRyZWVfaWQsIHBvc2l0aW9uLCB2YWx1ZSwgbm9kZV9pZCArIG5vZGVfaWQsIGxlZnQsIG1pZGRsZSk7CiAgICB1cGRhdGVfdHJlZSh0cmVlX2lkLCBwb3NpdGlvbiwgdmFsdWUsIG5vZGVfaWQgKyBub2RlX2lkICsgMSwgbWlkZGxlLCByaWdodCk7CiAgICB0cmVlW3RyZWVfaWRdW25vZGVfaWRdID0gdHJlZVt0cmVlX2lkXVtub2RlX2lkICsgbm9kZV9pZF0gKyB0cmVlW3RyZWVfaWRdW25vZGVfaWQgKyBub2RlX2lkICsgMV07Cn0KCmludCBxdWVyeV90cmVlKGludCB0cmVlX2lkLCBpbnQgbnVtYmVyLCBpbnQgbm9kZV9pZCA9IDEsIGludCBsZWZ0ID0gMCwgaW50IHJpZ2h0ID0gcy5zaXplKCkpCnsKICAgIGlmIChsZWZ0ICsgMSA9PSByaWdodCkgewogICAgICAgIHJldHVybiBsZWZ0OwogICAgfQogICAgaW50IG1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKICAgIGlmIChudW1iZXIgPD0gdHJlZVt0cmVlX2lkXVtub2RlX2lkICsgbm9kZV9pZF0pIHsKICAgICAgICByZXR1cm4gcXVlcnlfdHJlZSh0cmVlX2lkLCBudW1iZXIsIG5vZGVfaWQgKyBub2RlX2lkLCBsZWZ0LCBtaWRkbGUpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcXVlcnlfdHJlZSh0cmVlX2lkLCBudW1iZXIgLSB0cmVlW3RyZWVfaWRdW25vZGVfaWQgKyBub2RlX2lkXSwgbm9kZV9pZCArIG5vZGVfaWQgKyAxLCBtaWRkbGUsIHJpZ2h0KTsKICAgIH0KfQoKdm9pZCBzYXZlX3RyZWVfdG9fc3RyaW5nKGludCB0cmVlX2lkLCBpbnQgbm9kZV9pZCA9IDEsIGludCBsZWZ0ID0gMCwgaW50IHJpZ2h0ID0gcy5zaXplKCkpCnsKICAgIGlmICh0cmVlW3RyZWVfaWRdW25vZGVfaWRdID09IDApIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobGVmdCArIDEgPT0gcmlnaHQpIHsKICAgICAgICBpZiAodHJlZVt0cmVlX2lkXVtub2RlX2lkXSA9PSAxKSB7CiAgICAgICAgICAgIHNbbGVmdF0gPSAoY2hhcikoJ0EnICsgdHJlZV9pZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBtaWRkbGUgPSAobGVmdCArIHJpZ2h0KSAvIDI7CiAgICBzYXZlX3RyZWVfdG9fc3RyaW5nKHRyZWVfaWQsIG5vZGVfaWQgKyBub2RlX2lkLCBsZWZ0LCBtaWRkbGUpOwogICAgc2F2ZV90cmVlX3RvX3N0cmluZyh0cmVlX2lkLCBub2RlX2lkICsgbm9kZV9pZCArIDEsIG1pZGRsZSwgcmlnaHQpOwp9CgppbnQgbWFpbigpCnsKICAgIGludCBxOwogICAgY2luID4+IHMgPj4gcTsKICAgIHRyZWUuYXNzaWduKDI2LCB2ZWN0b3I8aW50Pig0ICogcy5zaXplKCksIDApKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjY7ICsraSkgewogICAgICAgIGluaXRfdHJlZShpKTsKICAgIH0KICAgIHdoaWxlIChxLS0pIHsKICAgICAgICBpbnQgbnVtYmVyXzEsIG51bWJlcl8yOwogICAgICAgIGNoYXIgbGV0dGVyXzEsIGxldHRlcl8yOwogICAgICAgIGNpbiA+PiBudW1iZXJfMSA+PiBsZXR0ZXJfMSA+PiBudW1iZXJfMiA+PiBsZXR0ZXJfMjsKICAgICAgICBpbnQgcG9zaXRpb25fMSA9IHF1ZXJ5X3RyZWUobGV0dGVyXzEgLSAnQScsIG51bWJlcl8xKTsKICAgICAgICBpbnQgcG9zaXRpb25fMiA9IHF1ZXJ5X3RyZWUobGV0dGVyXzIgLSAnQScsIG51bWJlcl8yKTsKICAgICAgICB1cGRhdGVfdHJlZShsZXR0ZXJfMSAtICdBJywgcG9zaXRpb25fMSwgLTEpOwogICAgICAgIHVwZGF0ZV90cmVlKGxldHRlcl8xIC0gJ0EnLCBwb3NpdGlvbl8yLCAxKTsKICAgICAgICB1cGRhdGVfdHJlZShsZXR0ZXJfMiAtICdBJywgcG9zaXRpb25fMiwgLTEpOwogICAgICAgIHVwZGF0ZV90cmVlKGxldHRlcl8yIC0gJ0EnLCBwb3NpdGlvbl8xLCAxKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjY7ICsraSkgewogICAgICAgIHNhdmVfdHJlZV90b19zdHJpbmcoaSk7CiAgICB9CiAgICBjb3V0IDw8IHMgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9