#include <iostream> #include <cmath> #include <cstring> using namespace std; const int maxn = 7+5; const int maxn1 = 1024; int n, m; int weight[maxn]; //保存xi的顺序 char terminal[maxn1]; char varible[maxn]; //排序前的输入值,按weight数组内容排序 char varible2[maxn]; //;排序后的输入值 void non_terminal() //输入xi { string s; for(int i = 1; i <= n; i++) { cin >> s; if(s[0] == 'x') weight[i] = s[1] - '0'; } } void resort() { for (int i = 1; i <= n; i++) { varible2[i] = varible[weight[i]]; } } void print() { int k = 1; for(int i = 1; i <= n; i++) { if(varible2[i] == '0') k = k*2 -1; else k = k*2; } cout << terminal[k -1] ; } int main() { int count = 1; while(cin>>n && n != 0) { //初始化 memset(weight, 0 , sizeof(weight)); memset(terminal, 0, sizeof(terminal)); non_terminal(); cin >> terminal; cin >>m; cout << "S-Tree #" << count << ":" <<endl; while(m--) { for(int i = 1; i <= n; i++) cin >> varible[i]; resort(); print(); } cout<<endl<<endl; count++; } return 0; } </cstring></cmath></iostream>