#include<bits/stdc++.h>
using namespace std;
int N,M;
char s[1510][1510];
bool v[1510][1510];
int fx[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct node{
int x,y;
}p[1510][1510];
bool tf=false;
void dfs(int x,int y,int mx,int my)
{
if(tf) return ;
if(v[mx][my])
{
if(p[mx][my].x!=x&&p[mx][my].y!=y)
{
tf=true;
return;
} else return ;
}else{
v[mx][my]=true;
p[mx][my]={x,y};
}
for(int i=0;i<4;i++)
{
int tx,ty,mtx,mty;
tx=x+fx[i][0];
ty=y+fx[i][1];
mtx=(mx+fx[i][0])%N;
mty=(my+fx[i][1])%M;
if(s[mtx][mty]=='.')
{
dfs(tx,ty,mtx,mty);
}
}
}
int main(){
while(scanf("%d %d",&N,&M)!=EOF)
{
int x,y;
for(int i=0;i<N;i++)
{
scanf("%s",s[i]);
for(int j=0;j<M;j++)
{
if(s[i][j]=='S'){
x=i;
y=j;
s[i][j]='.';
}
}
}
memset(v,false,sizeof(v));
tf=false;
dfs(x,y,x,y);
if(tf) printf("Yes\n");
else printf("No\n");
}
return 0;
}
各位大佬帮忙改一下!