#include<bits/stdc++.h>
using namespace std;
char s[55][55];
bool h=1;
bool vis[55][55][55][55][55];
int n,m;
void dfs(int x,int y,int zhi,int d1,int d2){
if(x==-1)x+=n;
if(y==-1)y+=m;
if(x==n)x-=n;
if(y==m)y-=m;
if(vis[x][y][zhi][d1][d2]==1)return;
vis[x][y][zhi][d1][d2]=1;
if(s[x][y]!='?'){
if(s[x][y]=='@'){
h=0;
return;
}
if(s[x][y]=='<')d1=0,d2=-1;
if(s[x][y]=='>')d1=0,d2=1;
if(s[x][y]=='^')d1=-1,d2=0;
if(s[x][y]=='v')d1=1,d2=0;
if(s[x][y]=='_'){
if(zhi==0)d1=0,d2=1;
else d1=0,d2=-1;
}
if(s[x][y]=='|'){
if(zhi==0)d1=1,d2=0;
else d1=-1,d2=0;
}
if(s[x][y]>='0' and s[x][y]<='9')zhi=s[x][y]-'0';
if(s[x][y]=='+')zhi+=1,zhi%=16;
if(s[x][y]=='-')zhi+=15,zhi%=16;
dfs(x+d1,y+d2,zhi,d1,d2);
}else{
dfs(x+1,y,zhi,1,0);
dfs(x-1,y,zhi,-1,0);
dfs(x,y+1,zhi,0,1);
dfs(x,y-1,zhi,0,-1);
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>s[i][j];
dfs(0,0,0,0,1);
if(h==0)
puts("YES");
else
puts("NO");
}