#include<iostream>#include<string>#include<vector>#include<cstring>#include<deque>using namespace std;namespace{int number(bool b1, bool b2, bool b3){int res = b1;res = res * 2 + b2;return res * 2 + b3;}bool compare(const deque<bool> &q1, const deque<bool> &q2){for (size_t i = 0; i < q1.size(); i++)if (q1[i] != q2[i])return q1[i];return false;}deque<bool> maxq(deque<bool> &q){deque<bool> res = q;int count = q.size() - 1;while (count--){bool head = q.front();q.pop_front();q.push_back(head);if (compare(q, res))res = q;}return res;}}int main(){int n, m;string s, rule;bool map[8], src[16], temp[16];deque<bool> Q;while (cin >> n){cin >> s;for (int i = 0; i < n; i++)src[i] = s[i] == 'a';for (int i = 0; i < 8; i++){cin >> rule;map[number(rule[0] == 'a', rule[1] == 'a', rule[2] == 'a')] =rule[3] == 'a';}int left, right;cin >> m;while (m--){for (int i = 0; i < n; i++){left = (i + n - 2) % n;right = (i + 1) % n;temp[i] = map[number(src[left], src[i], src[right])];}memcpy(src, temp, sizeof(temp));}Q.clear();for (int i = 0; i < n; i++)Q.push_back(src[i]);Q = maxq(Q);for (size_t i = 0; i < Q.size(); i++)cout << (Q[i] ? 'a' : 'b');cout << endl;}return 0;}


