#include <bits/stdc++.h>
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
#define int long long
#define ri register
#define mk make_pair
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define is insert
#define es erase
#define E (n+m)
using namespace std;
inline int read()
{
int s=0, w=1; ri char ch=getchar();
while(ch<'0'||ch>'9') { if(ch=='-') w=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48), ch=getchar();
return s*w;
}
int a[38],book[38],Ans,C[38][38];
string inp;
map<string,int> Q;
inline void String_Init()
{
for(ri int i=1;i<=9;i++)
{
string tt;
char cc=(char)(i+'0');
tt+=cc;
tt+='m';
Q[tt]=i;
}
for(ri int i=1;i<=9;i++)
{
string tt;
char cc=(char)(i+'0');
tt+=cc;
tt+='p';
Q[tt]=i+9;
}
for(ri int i=1;i<=9;i++)
{
string tt;
char cc=(char)(i+'0');
tt+=cc;
tt+='s';
Q[tt]=i+18;
}
Q["E"]=28, Q["S"]=29, Q["W"]=30, Q["N"]=31, Q["Z"]=32, Q["B"]=33, Q["F"]=34;
}
inline void Comb_Init()
{
C[0][0]=1;
for(ri int i=1;i<=35;i++)
{
C[i][0]=1;
for(ri int j=1;j<=i;j++) C[i][j]=C[i-1][j]+C[i-1][j-1];
}
}
inline int GSWS()
{
int ret=0;
if(book[1]&&book[9]&&book[10]&&book[18]&&book[19]&&book[27]&&book[28]
&&book[29]&&book[30]&&book[31]&&book[32]&&book[33]&&book[34])
{
int gv=0;
int arr[15];
arr[1]=1, arr[2]=9, arr[3]=10, arr[4]=18, arr[5]=19, arr[6]=27;
for(ri int i=7;i<=13;i++) arr[i]=i+21;
for(ri int i=1;i<=13;i++)
{
gv=C[a[arr[i]]][2]*book[arr[i]]*book[arr[i]];
for(ri int j=1;j<=13;j++)
{
if(i==j) continue;
gv*=a[arr[j]]*book[arr[j]];
}
ret=max(ret,gv);
}
}
return ret*13;
}
inline int SevenDZ()
{
int ret=1;
int arr[36];
memset(arr,0,sizeof(arr));
for(ri int i=1;i<=34;i++)
{
arr[i]=C[a[i]][2]*book[i]*book[i];
}
sort(arr+1,arr+1+34,greater<int>());
for(ri int i=1;i<=7;i++) ret*=arr[i];
return ret*7;
}
int F[34][5][2][5][5][5];
inline void gmax(int &x,int y)
{
x=(x>y)?x:y;
}
inline bool Same(int x,int y,int z)
{
if(x>=1&&x<=9&&y>=1&&y<=9&&z>=1&&z<=9) return 1;
if(x>=10&&x<=18&&y>=10&&y<=18&&z>=10&&z<=18) return 1;
if(x>=19&&x<=27&&y>=19&&y<=27&&z>=19&&z<=27) return 1;
return 0;
}
inline int DP()
{
//for(ri int i=1;i<=34;i++) printf("%lld : %lld %lld\n",i,a[i],book[i]);
memset(F,0,sizeof(F)), F[1][0][0][0][0][0]=1;
for(ri int i=1;i<=32;i++)
{
for(ri int j=0;j<=4;j++)
for(ri int k=0;k<=1;k++)
{
for(ri int x=0;x<=a[i];x++)
for(ri int y=0;y<=a[i+1];y++)
for(ri int z=0;z<=a[i+2];z++)
{
if(j)
{
if(x&&y&&z&&Same(i,i+1,i+2))
gmax(F[i][j][k][x][y][z],F[i][j-1][k][x-1][y-1][z-1]*book[i]*book[i+1]*book[i+2]*(a[i]-x+1)*(a[i+1]-y+1)*(a[i+2]-z+1));
if(x>2)
gmax(F[i][j][k][x][y][z],F[i][j-1][k][x-3][y][z]*book[i]*book[i]*book[i]*C[a[i]-x+3][3]);
if(y>2)
gmax(F[i][j][k][x][y][z],F[i][j-1][k][x][y-3][z]*book[i+1]*book[i+1]*book[i+1]*C[a[i+1]-y+3][3]);
if(z>2)
gmax(F[i][j][k][x][y][z],F[i][j-1][k][x][y][z-3]*book[i+2]*book[i+2]*book[i+2]*C[a[i+2]-z+3][3]);
}
if(k)
{
if(x>1) gmax(F[i][j][k][x][y][z],F[i][j][k-1][x-2][y][z]*book[i]*book[i]*C[a[i]-x+2][2]);
if(y>1) gmax(F[i][j][k][x][y][z],F[i][j][k-1][x][y-2][z]*book[i+1]*book[i+1]*C[a[i+1]-y+2][2]);
if(z>1) gmax(F[i][j][k][x][y][z],F[i][j][k-1][x][y][z-2]*book[i+2]*book[i+2]*C[a[i+2]-z+2][2]);
}
}
}
for(ri int j=0;j<=4;j++)
for(ri int k=0;k<=1;k++)
for(ri int y=0;y<=a[i+1];y++)
for(ri int z=0;z<=a[i+2];z++)
{
int mx=0;
for(ri int x=0;x<=a[i];x++)
mx=max(mx,F[i][j][k][x][y][z]);
F[i+1][j][k][y][z][0]=mx;
}
}
int ret=0;
for(ri int x=0;x<=a[32];x++)
for(ri int y=0;y<=a[33];y++)
for(ri int z=0;z<=a[34];z++)
ret=max(ret,F[32][4][1][x][y][z]);
/*for(ri int i=1;i<=32;i++)
for(ri int j=0;j<=4;j++)
for(ri int k=0;k<=1;k++)
for(ri int x=0;x<=a[i];x++)
for(ri int y=0;y<=a[i+1];y++)
for(ri int z=0;z<=a[i+2];z++)
printf("F[%lld][%lld][%lld][%lld][%lld][%lld] = %lld\n",i,j,k,x,y,z,F[i][j][k][x][y][z]);*/
return ret;
}
signed main()
{
freopen("test.in","r",stdin);
freopen("test1.out","w",stdout);
String_Init();
Comb_Init();
for(ri int T=read();T;T--)
{
for(ri int i=1;i<=34;i++) a[i]=4, book[i]=1;
while(1)
{
cin>>inp;
if(inp=="0") break;
a[Q[inp]]--;
}
while(1)
{
cin>>inp;
if(inp=="0") break;
book[Q[inp]]=2;
}
Ans=max(GSWS(),SevenDZ());
Ans=max(Ans,DP());
printf("%lld\n",Ans);
}
return 0;
}
/*
7m 4p 2s 7s 6p 8s 7p 5s 9s 9s 1p 5m 9m 5s 4p 5s E 1p 6s 5p B 4m 6m W 6p 6s E 9s 5p 2s 8s 8p 4m 3s 9m 5p 3s 2s 6s 8s 8p 6p 5m 4s 3m 4s 5s 4s 6m 9s 6p N 5m 7s 4m 2m 2s 6s 3m 7p B B N 1m 3m B 8p F 7p 0
W 4p N 3m 2m B 9m 3p 1p 6p S 4s 5p 8s 4m 5s 2s 3s 0
*/
直接过不了样例/cy