#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>//队列头文件
using namespace std;
typedef pair<int,int> PII;
#define x first
#define y second
const int N=210;
char st[N][N];
int dis[N][N];//判重并记录距离
int r,c;
int bfs(PII start,PII end)
{
queue<PII> q;
q.push(start);
memset(dis,-1,sizeof dis);//将判重数组初始化为-1
dis[start.x][start.y]=0;
int d[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
while(q.size())
{
PII t=q.front();
q.pop();//弹出对头元素
for(int i=0;i<4;i++)
{
int x=t.x+d[i][0],y=t.y+d[i][1];//循环扩展元素
if(x<0||x>=r||y<0||y>=c) continue;//判断是否出界
if(st[x][y]=='#') continue;//判断是否为障碍物
if(dis[x][y]!=-1) continue;//判重
dis[x][y]=dis[t.x][t.y]+1;//若以上三种情况皆不是,则距离加一
if(end==make_pair(x,y)) return dis[x][y];//判断是否为终点
q.push({x,y});//从队尾插入新节点
}
}
return -1;
}
int main()
{
int T;
scanf("%d",&T);
PII start,end;
while(T--)
{
scanf("%d%d",&r,&c);
for(int i=0;i<r;i++)
scanf("%s",st[i]);
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
if(st[i][j]=='S')
start={i,j};
else if(st[i][j]=='E')
end={i,j};
}
int distance=bfs(start,end);
if(distance==-1) printf("oop!\n");
else printf("%d\n",distance);
}
return 0;
}