#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
//英语 看博友分析 抄博友程序 POJac 百练ve bfs 巧妙 背
struct person{
int x,y;
string ans;
}P,Q;
struct status{
int p_x,p_y;
int b_x,b_y;
string res;
}p,q;//抄博友程序
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
char pd[6]="ewsn";
char bd[6]="EWSN";
char da[30][30];
int n,m;
int sx,sy,ex,ey,bx,by;
int p_vis[30][30];
int b_vis[30][30];
bool check(int x, int y)
{
if(x>=0 && x<n && y>=0 && y<m && da[x][y]!='#')
{
return true;
}else
{
return false;
}
}
int p_bfs(int s_x,int s_y, int e_x,int e_y)
{
//cout<<"p_bfs "<<s_x<<" "<<s_y<<" "<<e_x<<" "<<e_y<<endl;
memset(p_vis,0,sizeof(p_vis));
P.x=s_x;//抄博友程序
P.y=s_y;
//cout<<P.x<<"-----"<<P.y<<endl;
P.ans="";
p_vis[s_x][s_y]=1;//人的位置
//cout<<"box "<<p.b_x<<" "<<p.b_y<<endl;
p_vis[p.b_x][p.b_y]=1;//箱子的位置 全局变量
queue<person> que;
que.push(P);
while(que.empty()!=1)
{
P=que.front();//全局变量
que.pop();
//cout<<"P "<<P.x<<" "<<P.y<<endl;
if(P.x==e_x && P.y==e_y)//抄博友程序
{
return 1;
}
for(int i=0;i<4;i++)
{
int x=dx[i]+P.x;
int y=dy[i]+P.y;
if(check(x,y)&& p_vis[x][y]==0)
{
//cout<<x<<" "<<y<<endl;
p_vis[x][y]=1;
person t;
t.x=x;
t.y=y;
t.ans=P.ans+pd[i];
que.push(t);
}
}
}
return 0;
}
int b_bfs()
{
memset(b_vis,0,sizeof(b_vis));
queue<status> que;
p.b_x=bx;//抄博友程序
p.b_y=by;
p.p_x=sx;
p.p_y=sy;
p.res="";
que.push(p);
b_vis[bx][by]=1;
while(que.empty()!=1)
{
p=que.front();
que.pop();
for(int i=0;i<4;i++)
{
int bbx=p.b_x+dx[i];//题意
int bby=p.b_y+dy[i];
int ppx=p.b_x-dx[i];//巧妙
int ppy=p.b_y-dy[i];
if(check(bbx,bby) && check(ppx,ppy) && b_vis[bbx][bby]==0)//背
{
if(p_bfs(p.p_x,p.p_y,ppx,ppy))//背
{
b_vis[bbx][bby]=1;
q.b_x=bbx;
q.b_y=bby;
q.p_x=p.b_x;//题意 背
q.p_y=p.b_y;
q.res=p.res+P.ans+bd[i];//背 全局变量
if(bbx==ex&& bby==ey)
{
return 1;
}
que.push(q);
}
}
}
}
return 0;//抄博友程序
}
int main()
{
int tag=0;
while(1)
{
tag++;
cin>>n>>m;
memset(da,0,sizeof(da));
if(n==0 && m==0)
{
break;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>da[i][j];
if(da[i][j]=='S')
{
sx=i,sy=j;
}
if(da[i][j]=='T')
{
ex=i,ey=j;
}
if(da[i][j]=='B')
{
bx=i;
by=j;
}
}
}
/*
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<da[i][j];
}
cout<<endl;
}*/
cout<<"Maze #"<<tag<<endl;
if(b_bfs())
{
cout<<q.res<<endl;
}else
{
cout<<"Impossible."<<endl;
}
cout<<endl;
}
return 0;
}