#include <bits/stdc++.h>
int n,m,x,y,iq[4]={1,-1,0,0},aq[4]={0,0,1,-1};
char Map[1500][1500];
bool ans,vis[1500][1500];
void dfs(int x,int y){
if((x==0 && Map[n][y]=='.')||(x==n-1 && Map[0][y]=='.')||(y==0 && Map[x][n]=='.')||(y==m-1 && Map[x][0]=='.')){
ans=true;
return ;
}
for(int i=0;i<4;i++){
int xx=x+iq[i],yy=y+aq[i];
if(Map[xx][yy]=='#' || !vis[xx][yy] || xx==n || yy==m) continue;
vis[xx][yy]=false;
dfs(xx,yy);
vis[xx][yy]=true;
}
return ;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
ans=false;
for(int i=0;i<n;i++) for(int j=0;j<m;j++) vis[i][j]=true;
for(int i=0;i<n;i++) scanf("%s",Map[i]);
for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(Map[i][j]=='S'){
x=i;
y=j;
i=n;
j=m;
}
vis[x][y]=false;
dfs(x,y);
if(ans) puts("Yes");
else puts("No");
}
return 0;
}
1个WA,8个TLE