//第一次写题解,话不多说直接上代码!!!!
using namespace std;
const int N=510;
char a[N][N];
int x1,y1,x2,y2;//(x1,y1)为S的坐标;(x2,y2)为E的坐标
int n,m;
int flag=0;//一个标记
void dfs(int x,int y)
{
if(a[x][y]=='#'||x<1||y<1||x>n||y>m)return;
if(x==x2&&y==y2) { cout<<"Yes"<<endl;flag=1; }
a[x][y]='#';//走过就标记,防止重复;
dfs(x+1,y);//分四个方向递归,直到找到E点;
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
int main()
{
while(cin>>n>>m){
flag=0; //一定要重新赋值,不然下一组答有误
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]=='S')//边输入边查找S,E的坐标
{
x1=i;y1=j;
}
if(a[i][j]=='E')
{
x2=i;y2=j;
}
}
dfs(x1,y1);
if(flag!=1)cout<<"No"<<endl;
}
return 0;
}
//有不懂的可私信讨论哦,