#include <iostream>
#include<bits/stdc++.h>
#include<fstream>
typedef long long ll;
using namespace std;
void winter_is_coming()
{
std::ios_base::sync_with_stdio(0);
cin.tie(NULL); cout.tie(NULL );
}
void file()
{
freopen("crosses.in", "r", stdin);
freopen("crosses.out","w", stdout);
}
int dx[]={ 0, 0, 1, -1, 1, -1, 1, -1 };
int dy[]={ 1, -1, 0, 0, -1, 1, 1, -1 };
const int INF=1e9;
char ch[5][5];
map<pair<int,int>,int>mp;
vector<vector<pair<int,int> > >cor;
int lvl[25];
queue<pair<int,int> >q;
string s;
bool valid(int x, int y)
{
if(x>=0 && x<4 && y>=0 &&y<4 )return true;
return false;
}
bool ok;
void reach(pair<int,int>node)
{
int a,b;
a=node.first;
b=node.second;
if(ch[a][b]==s[s.size()-1] && lvl[mp[{a,b}]]==s.size()-1)
{
ok=true;
return;
}
for(int i=0;i<8;i++)
{
int x=a+dx[i],y=b+dy[i];
if(valid(x,y))
{
int aa,bb;
aa=mp[{a,b}];
bb=mp[{x,y}];
// cout<<ch[a][b]<<" "<<ch[x][y]<<" . "<<s[lvl[aa]+1]<<"\n";
if(lvl[bb]>lvl[aa]+1 && ch[x][y]==s[lvl[aa]+1] && lvl[aa]+1<s.size() )
{
lvl[bb]=lvl[aa]+1;
// cout<<ch[x][y]<<" "<<lvl[bb]<<"\n";
reach({x,y});
lvl[bb]=INF;
}
}
}
return;
}
int main()
{
winter_is_coming();
int t,ca=1,cnt,n,res,ans;
cin>>t;
while(t--)
{
ans=0;
cnt=1;
mp.clear();
cor=vector<vector<pair<int,int> > >(30);
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
cin>>ch[i][j];
mp[{i,j}]=cnt++;
cor[ch[i][j]-'A'].push_back({i,j});
}
}
cin>>n;
while(n--)
{
cin>>s;
res=s.size();
for(int i=0;i<cor[s[0]-'A'].size();i++)
{
for(int k=0;k<25;k++)lvl[k]=INF;
pair<int,int>node=cor[s[0]-'A'][i];
//cout<<node.first<<node.second<<"\n";
ok=false;
lvl[mp[node]]=0;
//q.push(node); bfs();
reach(node);
if(ok)
{
if(res==3 || res==4)ans+=1;
else if(res==5)ans+=2;
else if(res==6)ans+=3;
else if(res==7)ans+=5;
else ans+=11;
//cout<<s<<"\n";
break;
}
lvl[mp[node]]=INF;
}
}
cout<<"Score for Boggle game #"<<ca++<<": "<<ans<<"\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZTxmc3RyZWFtPgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdm9pZCB3aW50ZXJfaXNfY29taW5nKCkKewoJc3RkOjppb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCApOwp9CnZvaWQgZmlsZSgpCnsKCWZyZW9wZW4oImNyb3NzZXMuaW4iLCAiciIsIHN0ZGluKTsKCWZyZW9wZW4oImNyb3NzZXMub3V0IiwidyIsIHN0ZG91dCk7Cn0KaW50IGR4W109eyAwLCAwLCAxLCAtMSwgMSwgLTEsIDEsIC0xIH07CmludCBkeVtdPXsgMSwgLTEsIDAsIDAsIC0xLCAxLCAxLCAtMSB9Owpjb25zdCBpbnQgSU5GPTFlOTsKCmNoYXIgY2hbNV1bNV07Cm1hcDxwYWlyPGludCxpbnQ+LGludD5tcDsKdmVjdG9yPHZlY3RvcjxwYWlyPGludCxpbnQ+ID4gPmNvcjsKaW50IGx2bFsyNV07CnF1ZXVlPHBhaXI8aW50LGludD4gPnE7CnN0cmluZyBzOwpib29sIHZhbGlkKGludCB4LCBpbnQgeSkKewogICAgaWYoeD49MCAmJiB4PDQgJiYgeT49MCAmJnk8NCApcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7Cn0KYm9vbCBvazsKdm9pZCByZWFjaChwYWlyPGludCxpbnQ+bm9kZSkKewogICAgaW50IGEsYjsKICAgIGE9bm9kZS5maXJzdDsKICAgIGI9bm9kZS5zZWNvbmQ7CiAgICBpZihjaFthXVtiXT09c1tzLnNpemUoKS0xXSAmJiBsdmxbbXBbe2EsYn1dXT09cy5zaXplKCktMSkKICAgIHsKICAgICAgICBvaz10cnVlOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IoaW50IGk9MDtpPDg7aSsrKQogICAgewogICAgICAgaW50IHg9YStkeFtpXSx5PWIrZHlbaV07CiAgICAgICBpZih2YWxpZCh4LHkpKQogICAgICAgewogICAgICAgICAgIGludCBhYSxiYjsKICAgICAgICAgICBhYT1tcFt7YSxifV07CiAgICAgICAgICAgYmI9bXBbe3gseX1dOwogICAgICAgICAgLy8gY291dDw8Y2hbYV1bYl08PCIgIjw8Y2hbeF1beV08PCIgLiAiPDxzW2x2bFthYV0rMV08PCJcbiI7CiAgICAgICAgICAgaWYobHZsW2JiXT5sdmxbYWFdKzEgJiYgY2hbeF1beV09PXNbbHZsW2FhXSsxXSAmJiBsdmxbYWFdKzE8cy5zaXplKCkgKQogICAgICAgICAgIHsKICAgICAgICAgICAgICAgbHZsW2JiXT1sdmxbYWFdKzE7CiAgICAgICAgICAgICAvLyBjb3V0PDxjaFt4XVt5XTw8IiAiPDxsdmxbYmJdPDwiXG4iOwogICAgICAgICAgICAgICByZWFjaCh7eCx5fSk7CiAgICAgICAgICAgICAgIGx2bFtiYl09SU5GOwogICAgICAgICAgIH0KICAgICAgIH0KICAgIH0KcmV0dXJuOwp9CgppbnQgbWFpbigpCnsKCXdpbnRlcl9pc19jb21pbmcoKTsKICAgIGludCB0LGNhPTEsY250LG4scmVzLGFuczsKICAgIGNpbj4+dDsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICBhbnM9MDsKICAgICAgICBjbnQ9MTsKICAgICAgICBtcC5jbGVhcigpOwogICAgICAgIGNvcj12ZWN0b3I8dmVjdG9yPHBhaXI8aW50LGludD4gPiA+KDMwKTsKCiAgICAgICAgZm9yKGludCBpPTA7aTw0O2krKykKICAgICAgICB7CiAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8NDtqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2luPj5jaFtpXVtqXTsKICAgICAgICAgICAgICAgbXBbe2ksan1dPWNudCsrOwogICAgICAgICAgICAgICBjb3JbY2hbaV1bal0tJ0EnXS5wdXNoX2JhY2soe2ksan0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNpbj4+bjsKICAgICAgICB3aGlsZShuLS0pCiAgICAgICAgewogICAgICAgICAgICBjaW4+PnM7CiAgICAgICAgICAgIHJlcz1zLnNpemUoKTsKICAgICAgICAgICAgZm9yKGludCBpPTA7aTxjb3Jbc1swXS0nQSddLnNpemUoKTtpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBmb3IoaW50IGs9MDtrPDI1O2srKylsdmxba109SU5GOwogICAgICAgICAgICAgIHBhaXI8aW50LGludD5ub2RlPWNvcltzWzBdLSdBJ11baV07CgogICAgICAgICAgICAgICAvL2NvdXQ8PG5vZGUuZmlyc3Q8PG5vZGUuc2Vjb25kPDwiXG4iOwogICAgICAgICAgICAgIG9rPWZhbHNlOwogICAgICAgICAgICAgIGx2bFttcFtub2RlXV09MDsKCiAgICAgICAgICAgICAgLy9xLnB1c2gobm9kZSk7IGJmcygpOwogICAgICAgICAgICAgcmVhY2gobm9kZSk7CiAgICAgICAgICAgICAgaWYob2spCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZihyZXM9PTMgfHwgcmVzPT00KWFucys9MTsKICAgICAgICAgICAgICAgIGVsc2UgaWYocmVzPT01KWFucys9MjsKICAgICAgICAgICAgICAgIGVsc2UgaWYocmVzPT02KWFucys9MzsKICAgICAgICAgICAgICAgIGVsc2UgaWYocmVzPT03KWFucys9NTsKICAgICAgICAgICAgICAgIGVsc2UgYW5zKz0xMTsKICAgICAgICAgICAgICAgIC8vY291dDw8czw8IlxuIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsdmxbbXBbbm9kZV1dPUlORjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY291dDw8IlNjb3JlIGZvciBCb2dnbGUgZ2FtZSAjIjw8Y2ErKzw8IjogIjw8YW5zPDwiXG4iOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==