/*
这道题做得还不错,一次AC
解题的新技巧:
步骤一:根据input,列举出需要新建那些变量
步骤二:其中用到什么函数
然后再写程序,效率高
模拟题中给你的步骤,大致题意:
一颗二叉树,每一层一个变量,次序在输入中给出。根据输入的vva然后输出对应叶子节点上的值。
其中vva是(x1,x2...)需要进行一次转换
*/
#include <iostream>
#include <sstream>
#include <string>
#include <cstdio>
using namespace std;
string exchange(string *str,const string &vva,int n)
{
string s="";
for(int i=0;i<n;i++)
{
istringstream in(str[i]);
char ch;
int a;
in>>ch;
in>>a;
s=s+vva[a-1];
}
return s;
}
int main()
{
//freopen("data.in","r",stdin);
int n,m;
string str[10],leaf,vva,changed;
int cas=1;
while(cin>>n)
{
if(n==0)
break;
printf("S-Tree #%d:\n",cas++);
for(int i=0;i<n;i++)
cin>>str[i];
cin>>leaf;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>vva;
changed=exchange(str,vva,n);
int k=1;
for(int j=0;j<changed.size();j++)
{
if(changed[j]=='0')
k*=2;
else
k=k*2+1;
}
k=k-(2<<(n-1));
cout<<leaf[k];
}
cout<<endl<<endl;
}
return 0;
}