#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,T;
const int N = 55;
char g[N][N];
string s;
int start_x,start_y;
int end_x,end_y;
bool work(int i,int j,int k,int u)
{
int start_xx=start_x;
int start_yy=start_y;
int dx[4]={-1,0,1,0,},dy[4]={0,1,0,-1};
if(start_xx==end_x && start_yy==end_y)
{
return true;
}
for(auto x:s)
{
if(x=='0') start_xx+=dx[i],start_yy+=dy[i];
else if(x=='1') start_xx+=dx[j],start_yy+=dy[j];
else if(x=='2') start_xx+=dx[k],start_yy+=dy[k];
else start_xx+=dx[u],start_yy+=dy[u];
if(start_xx<0||start_xx>=n||start_yy<0||start_yy>=m) return false;
if(start_xx==end_x && start_yy==end_y)
{
return true;
}
if(g[start_xx][start_yy]=='#') return false;
}
return false;
}
// 3 1 0 2
bool check(int i,int j,int k,int u)
{
if(i!=j&&i!=k&&i!=u&&j!=k&&j!=u&&k!=u) return true;
else return false;
}
int main()
{
cin>>T;
while(T--)
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>g[i];
cin>>s;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(g[i][j]=='S') start_x=i,start_y=j;
if(g[i][j]=='E') end_x=i,end_y=j;
}
int cnt = 0;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
for(int u=0;u<4;u++)
if(check(i,j,k,u)&&work(i,j,k,u))
{
cnt++;
}
cout<<cnt<<endl;
}
}