#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
int main(){
// 读取初始字符串
string line;
getline(cin, line);
string s = line.substr(1, line.size() - 2); // 去掉前后井号
// 读取字符对数
int n;
cin >> n;
cin.ignore();
// 构建字符替换表
unordered_map<char, char> f;
for (int i = 0; i < n; ++i) {
getline(cin, line);
char x = line[1];
char y = line[2];
f[x] = y;
}
// 读取查询次数
int m;
cin >> m;
// 读取查询的 k 值
vector<int> queries(m+1);
for (int i = 1; i <=m; ++i) {
cin >> queries[i];
}
// 处理多次查询
vector<string> results(6500);
string transformed_s = s;
results[0]=s;
int count=1000;
for (int j = 1; j <=6500; ++j) {
string new_s = transformed_s; // 从当前状态开始
for (char &c : new_s) {
if (f.count(c)) {
c = f[c];
}
}
transformed_s = new_s;
if(transformed_s==s){
count=j;
break;
}
results[j] = transformed_s;
}
for (int i = 1; i<=m; ++i) {
cout << "#" << results[queries[i]%count] << "#" << endl;
}
}
这里时间复杂度是O(n*m)