求调 QAQ
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,sx,sy,pd;
char a[5001][5001];
ll dx[4]={0,0,-1,1};
ll dy[4]={-1,1,0,0};
void dfs(ll x,ll y)
{
if(pd)return;
if(x==1||y==1)
{
pd=1;
return;
}
for(ll i=0;i<4;i++)
{
ll nx=x+dx[i],ny=y+dy[i];
if(nx>=1&&nx<=3*n&&ny>=1&&ny<=3*m&&a[nx][ny]!='#')
{
a[nx][ny]='#';
dfs(nx,ny);
if(pd)return;
a[nx][ny]='.';
}
}
}
int main()
{
while(scanf("%lld%lld",&n,&m)!=EOF)
{
pd=0;
for(ll i=1;i<=n;i++)
{
for(ll j=1;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]!='S')a[i+n][j]=a[i+n][j+m]=a[i][j+m]=a[i+2*n][j+2*m]=a[i+2*n][j]=a[i][j+2*m]=a[i+n][j+2*m]=a[i+2*n][j+m]=a[i][j];
else
{
a[i][j]='.';
a[i+n][j]=a[i+n][j+m]=a[i][j+m]=a[i+2*n][j+2*m]=a[i+2*n][j]=a[i][j+2*m]=a[i+n][j+2*m]=a[i+2*n][j+m]=a[i][j];
a[i+n][j+m]='S';
}
}
}
// for(ll i=1;i<=3*n;i++)
// {
// for(ll j=1;j<=3*m;j++)cout<<a[i][j];
// cout<<endl;
// }
for(ll i=n+1;i<=2*n;i++)
{
for(ll j=m+1;j<=2*m;j++)
{
if(a[i][j]=='S')
{
sx=i;
sy=j;
}
}
}
if(sx==1e9||sy==1e9)
{
cout<<"No\n";
continue;
}
dfs(sx,sy);
if(pd)cout<<"Yes";
else cout<<"No";
cout<<endl;
}
}
/*
5 4
##.#
##S#
#..#
#.##
#..#
##.###.###.#
##.###.###.#
#..##..##..#
#.###.###.##
#..##..##..#
##.###.###.#
##.###S###.#
#..##..##..#
#.###.###.##
#..##..##..#
##.###.###.#
##.###.###.#
#..##..##..#
#.###.###.##
#..##..##..#
Yes
5 4
##.#
##S#
#..#
..#.
#.##
##.###.###.#
##.###.###.#
#..##..##..#
..#...#...#.
#.###.###.##
##.###.###.#
##.###S###.#
#..##..##..#
..#...#...#.
#.###.###.##
##.###.###.#
##.###.###.#
#..##..##..#
..#...#...#.
#.###.###.##
No
5 4
#.##
#S##
####
....
.#..
#.###.###.##
#.###.###.##
############
............
.#...#...#..
#.###.###.##
#.###S###.##
############
............
.#...#...#..
#.###.###.##
#.###.###.##
############
............
.#...#...#..
No
5 4
##.#
.#..
.###
####
##.#
##.###.###.#
.#...#...#..
.###.###.###
############
##.###.###.#
##.###.###.#
.#...#...#..
.###.###.###
############
##.###.###.#
##.###.###.#
.#...#...#..
.###.###.###
############
##.###.###.#
No
*/