//模拟题,遍历攻击0,1,2次后需要多少个亵渎才能解完,然后与8对比
#include <iostream>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#define ll long long
using namespace std;
const int N = 15;
struct kk{
ll dun;
ll chaofeng;
ll att;
ll defen;
}k[N],l[N],tmpk[N],tmpl[N];
vector<kk>ve;
int visk[N],visl[N];
int m,n;
ll niule=8;
ll ans;
void solve(string str,int index,int type){
kk tmp;
tmp.chaofeng=0;
tmp.dun=0;
if(str[str.length()-1]=='!'){
tmp.chaofeng=1;
}
if(str[0]=='('){
tmp.dun=1;
}
for(int i=0;i<str.length();i++){
if(str[i]=='('||str[i]==')'||str[i]=='!'){
str[i]=' ';
}
}
ll att,defen;
att=defen=0;
int flag=0;
for(int i=0;i<str.length();i++){
if(str[i]>='0'&&str[i]<='9'){
if(flag==0){
att=att*10+int(str[i]-'0');
}else{
defen=defen*10+int(str[i]-'0');
}
}
if(str[i]=='/'){
flag=1;
}
}
tmp.att=att;
tmp.defen=defen;
if(type==1){
k[index].chaofeng=tmp.chaofeng;
k[index].dun=tmp.dun;
k[index].att=tmp.att;
k[index].defen=tmp.defen;
}else{
l[index].chaofeng=tmp.chaofeng;
l[index].dun=tmp.dun;
l[index].att=tmp.att;
l[index].defen=tmp.defen;
}
}
ll dfs_xiedu(){
// cout<<ve.size()<<endl;
ll num=0;
for(int i=0;i<ve.size();i++){
if(ve[i].dun==1){
ve[i].dun=0;
ve[i].defen++;
}
}
while(1){
num++;
while(1){
int flag=0;
for(int i=0;i<ve.size();i++){
ve[i].defen--;
if(ve[i].defen==0){
flag=1;
}
}
if(flag==0)break;
}
int flag2=0;
for(int i=0;i<ve.size();i++){
if(ve[i].defen>0){
flag2=1;
}
}
if(flag2==0)break;
}
return num;
}
void l_attack_k(int x,int y){
int exi_chaofeng=0;
for(int i=1;i<=m;i++){
tmpk[i].chaofeng=k[i].chaofeng;
tmpk[i].dun=k[i].dun;
tmpk[i].att=k[i].att;
tmpk[i].defen=k[i].defen;
if(tmpk[i].chaofeng==1){
exi_chaofeng=1;
}
}
for(int i=1;i<=n;i++){
tmpl[i].chaofeng=l[i].chaofeng;
tmpl[i].dun=l[i].dun;
tmpl[i].att=l[i].att;
tmpl[i].defen=l[i].defen;
}
if(exi_chaofeng==1&&tmpk[y].chaofeng==0)return;
if(tmpl[x].dun==1){
if(tmpk[y].att!=0)tmpl[x].dun=0;
if(tmpk[y].dun==1){
tmpk[y].dun=0;
}else{
tmpk[y].defen-=tmpl[x].att;
}
}else{
tmpl[x].defen-=tmpk[y].att;
if(tmpk[y].dun==1){
tmpk[y].dun=0;
}else{
tmpk[y].defen-=tmpl[x].att;
}
}
ve.clear();
for(int i=1;i<=m;i++){
ve.push_back(tmpk[i]);
}
for(int i=1;i<=n;i++){
ve.push_back(tmpl[i]);
}
ll nums=dfs_xiedu();
// cout<<"nums"<<' '<<nums<<endl;
nums=nums*2;
ans=min(min(ans,nums),niule);
// return ans;
// ans=min(1+nums*2,niule);
}
void ip_attack_jq(int x1,int y1,int x2,int y2){
int exi_chaofeng=0;
for(int i=1;i<=m;i++){
tmpk[i].chaofeng=k[i].chaofeng;
tmpk[i].dun=k[i].dun;
tmpk[i].att=k[i].att;
tmpk[i].defen=k[i].defen;
if(tmpk[i].chaofeng==1){
exi_chaofeng=1;
}
}
for(int i=1;i<=n;i++){
tmpl[i].chaofeng=l[i].chaofeng;
tmpl[i].dun=l[i].dun;
tmpl[i].att=l[i].att;
tmpl[i].defen=l[i].defen;
}
if(exi_chaofeng==1&&tmpk[y1].chaofeng==0)return;
if(tmpl[x1].dun==1){
if(tmpk[y1].att!=0)tmpl[x1].dun=0;
if(tmpk[y1].dun==1){
tmpk[y1].dun=0;
}else{
tmpk[y1].defen-=tmpl[x1].att;
}
}else{
tmpl[x1].defen-=tmpk[y1].att;
if(tmpk[y1].dun==1){
tmpk[y1].dun=0;
}else{
tmpk[y1].defen-=tmpl[x1].att;
}
}
int exi_chaofeng2=0;
for(int i=1;i<=m;i++){
if(tmpk[i].chaofeng==1&&tmpk[i].defen>0){
exi_chaofeng2=1;
}
}
if(tmpk[y2].defen<0)return ;
if(exi_chaofeng2==1&&tmpk[y2].chaofeng==0)return;
////
if(tmpl[x2].dun==1){
if(tmpk[y2].att!=0)tmpl[x2].dun=0;
if(tmpk[y2].dun==1){
tmpk[y2].dun=0;
}else{
tmpk[y2].defen-=tmpl[x2].att;
}
}else{
tmpl[x2].defen-=tmpk[y2].att;
if(tmpk[y2].dun==1){
tmpk[y2].dun=0;
}else{
tmpk[y2].defen-=tmpl[x2].att;
}
}
ve.clear();
for(int i=1;i<=m;i++){
ve.push_back(tmpk[i]);
}
for(int i=1;i<=n;i++){
ve.push_back(tmpl[i]);
}
ll nums=dfs_xiedu();
// cout<<"nums"<<' '<<nums<<endl;
nums=nums*2;
ans=min(min(ans,nums),niule);
}
int main(){
int t;cin>>t;
while(t--){
memset(visk,0,sizeof(visk));
memset(visl,0,sizeof(visl));
cin>>m;
for(int i=1;i<=m;i++){
string tmp;cin>>tmp;
solve(tmp,i,1);
}
cin>>n;
for(int i=1;i<=n;i++){
string tmp;cin>>tmp;
solve(tmp,i,2);
}
// for(int i=1;i<=m;i++){
// cout<<k[i].dun<<' '<<k[i].chaofeng<<' '<<k[i].att<<' '<<k[i].defen<<endl;
// }
// for(int i=1;i<=n;i++){
// cout<<l[i].dun<<' '<<l[i].chaofeng<<' '<<l[i].att<<' '<<l[i].defen<<endl;
// }
ve.clear();
for(int i=1;i<=m;i++){
ve.push_back(k[i]);
}
for(int i=1;i<=n;i++){
ve.push_back(l[i]);
}
ll nums=dfs_xiedu();
// cout<<"nums "<<nums<<endl;
ans=min(nums*2,niule);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(l[i].att!=0){
l_attack_k(i,j);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int p=1;p<=n;p++){
for(int q=1;q<=m;q++){
if(l[i].att==0||l[p].att==0)continue;
if(i!=p){
ip_attack_jq(i,j,p,q);
}
}
}
}
}
cout<<ans<<endl;
}
}
// 2
// 2
// 2/9! (8/6)!
// 0
// 3
// 8/1 (1/6) (8/7)!
// 5
// (1/2)! (8/5)! (2/1) (3/4)! (9/9)