#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
char s[31][31];
int dis[31][31][5];
int sx,sy,fx,fy,fang;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int ans=INT_MAX;
void dfs(int row,int col,int f,int sum)
{
if(dis[row][col][f]<=sum||ans<=sum)
{
return;
}
dis[row][col][f]=sum;
if(s[row][col]=='F')
{
ans=min(ans,sum);
}
int flag=0;
if(s[row+dx[f]][col+dy[f]]!='.')
{
flag=1;
dfs(row+dx[f],col+dy[f],f,sum);
}
if(s[row+dx[(f+1)%4]][col+dy[(f+1)%4]]!='.')
{
flag=1;
dfs(row+dx[(f+1)%4],col+dy[(f+1)%4],(f+1)%4,sum+1);
}
if(s[row+dx[(f+3)%4]][col+dy[(f+3)%4]]!='.')
{
flag=1;
dfs(row+dx[(f+3)%4],col+dy[(f+3)%4],(f+3)%4,sum+5);
}
if(flag==0&&s[row+dx[(f+2)%4]][col+dy[(f+2)%4]]!='.')
{
flag=1;
dfs(row+dx[(f+2)%4],col+dy[(f+2)%4],(f+2)%4,sum+10);
}
return;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>s[i];
for(int j=1;j<=m;j++)
{
if(s[i][j]=='F')
{
fx=i; fy=j;
}
if(s[i][j]=='E')
{
sx=i; sy=j;
fang=4;
}
if(s[i][j]=='W')
{
sx=i; sy=j;
fang=2;
}
if(s[i][j]=='N')
{
sx=i; sy=j;
fang=1;
}
if(s[i][j]=='S')
{
sx=i; sy=j;
fang=3;
}
}
}
dfs(sx,sy,fang,0);
cout<<ans<<endl;
return 0;
}