#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstring>
#include <cstdio>
using namespace std;
const int xsize = 128 + 10;
struct Tree
{
Tree *left, *right;
int flog;
Tree():left(0), right(0), flog(0) {}
};
char temp[1024];
vector<Tree* > tl;
Tree* MakeTree(int cn)
{
Tree* tp = new Tree;
if(cn == 1)
tl.push_back(tp);
else
{
tp->left = MakeTree(cn-1);
tp->right = MakeTree(cn-1);
}
return tp;
}
void KillTree(Tree* Root)
{
if(Root)
{
KillTree(Root->left);
KillTree(Root->right);
delete Root;
}
//else return;
}
char FindLeaf(char* inp, Tree* Root)
{
if(inp[0] == 0)
return Root->flog;
if(*inp == '0')
return FindLeaf(inp+1, Root->left);
else if(*inp == '1')
return FindLeaf(inp+1, Root->right);
}
int main()
{
Tree* TRoot;
int n, cs = 0;
while(cin >> n && n)
{
cout << "S-Tree #"<< ++cs <<":" <<endl;
TRoot = MakeTree(n+1);
for(int i = 0; i < n; ++i)
scanf("%s", temp);
scanf("%s", temp);
for(int i = 0; i < tl.size(); ++i)
tl[i]->flog = temp[i];
cin >> n;
for(int i = 0; i < n; ++i)
{
scanf("%s", temp);
cout <<FindLeaf(temp, TRoot);
}
cout <<endl;
cout <<endl;
tl.clear();
KillTree(TRoot);
}
return 0;
}
#include <algorithm>
#include <string>
#include <vector>
#include <cstring>
#include <cstdio>
using namespace std;
const int xsize = 128 + 10;
struct Tree
{
Tree *left, *right;
int flog;
Tree():left(0), right(0), flog(0) {}
};
char temp[1024];
vector<Tree* > tl;
Tree* MakeTree(int cn)
{
Tree* tp = new Tree;
if(cn == 1)
tl.push_back(tp);
else
{
tp->left = MakeTree(cn-1);
tp->right = MakeTree(cn-1);
}
return tp;
}
void KillTree(Tree* Root)
{
if(Root)
{
KillTree(Root->left);
KillTree(Root->right);
delete Root;
}
//else return;
}
char FindLeaf(char* inp, Tree* Root)
{
if(inp[0] == 0)
return Root->flog;
if(*inp == '0')
return FindLeaf(inp+1, Root->left);
else if(*inp == '1')
return FindLeaf(inp+1, Root->right);
}
int main()
{
Tree* TRoot;
int n, cs = 0;
while(cin >> n && n)
{
cout << "S-Tree #"<< ++cs <<":" <<endl;
TRoot = MakeTree(n+1);
for(int i = 0; i < n; ++i)
scanf("%s", temp);
scanf("%s", temp);
for(int i = 0; i < tl.size(); ++i)
tl[i]->flog = temp[i];
cin >> n;
for(int i = 0; i < n; ++i)
{
scanf("%s", temp);
cout <<FindLeaf(temp, TRoot);
}
cout <<endl;
cout <<endl;
tl.clear();
KillTree(TRoot);
}
return 0;
}