#include<bits/stdc++.h>
using namespace std;
int n;
char s[210];
int ch[210];
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
char mp[210][210];
int vis[210][210][210]={};
int sx,sy;
struct pp{
	int x,y;
} a[10000010],b[10000010];
int ne[10000010]={},l[10000010]={};
int main()
{
	while(scanf("%d",&n)!=EOF)
	{
		memset(vis,0,sizeof(vis));
		scanf("%s",s);
		int p=strlen(s);
		for(int i=0;i<p;i++)
		{
			if(s[i]=='^') ch[i]=0;
			else if(s[i]=='v') ch[i]=1;
			else if(s[i]=='<') ch[i]=2;
			else ch[i]=3;
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				cin>>mp[i][j];
				if(mp[i][j]=='R')
				{
					sx=i;
					sy=j;
				}
			}
		}
		int tx,ty,num=0,z=-1,t=0;
		while(1)
		{
			t++;
			z=(z+1)%p;
			if(vis[sx][sy][z])
			{
				p=t-vis[sx][sy][z];
				break;
			}
			vis[sx][sy][z]=t;
			++num;
			a[num].x=sx;
			a[num].y=sy;
			tx=sx+dx[ch[z]];
			ty=sy+dy[ch[z]];
			if(mp[tx][ty]=='#') continue;
			sx=tx;sy=ty;
		}
		int tp=0;
		if(a[num-p+1].x!=a[num].x||a[num-p+1].y!=a[num].y)
			b[++tp]=a[num-p+1];
		for(int i=num-p+2;i<=num;i++)
		{
			if(a[i].x!=a[i-1].x||a[i].y!=a[i-1].y)
				b[++tp]=a[i];
		}
		if(tp==0)
		{
			printf("1\n");
			continue;
		}
		int j=0;
		for(int i=2;i<=tp;i++)
		{
			while(j&&(b[i].x!=b[j+1].x||b[i].y!=b[j+1].y)) j=ne[j];
			if(b[i].x==b[j+1].x&&b[i].y==b[j+1].y)
			{
				ne[i]=++j;
				if((i-j)*l[j]==j) l[i]=l[j]+1;
				else l[i]=1;
			}
			else
			{
				ne[i]=0;
				l[i]=1;
			}
		}
		printf("%d\n",tp/l[tp]);
	}
	return 0;
}
