#include <bits/stdc++.h>
#define int long long
using namespace std;
int T, n, m;
void solve() {
  cin >> n >> m;
  vector<vector<char>> v(n, vector<char>(m));
  for(auto &i : v) {
    for(auto &j : i) {
      cin >> j;
    }
  }
  vector<vector<int>> dist(n, vector<int>(m));
  for(auto &i : dist) {
    for(auto &j : i) {
      j = (int)1e18;
    }
  }
  dist[0][0] = 0;
  auto dir = [&](char from, int to) -> int {
    if(from == 'E') {
      array<int, 4> a = {0, 1, 2, 3};
      return a[to];
    } else if(from == 'S') {
      array<int, 4> a = {3, 0, 1, 2};
      return a[to];
    } else if(from == 'W') {
      array<int, 4> a = {2, 3, 0, 1};
      return a[to];
    } else {
      array<int, 4> a = {1, 2, 3, 0};
      return a[to];
    }
  };
  array<int, 4> dx = {0, 1, 0, -1};
  array<int, 4> dy = {1, 0, -1, 0};
  priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> q;
  q.push({0, {0, 0}});
  while(!q.empty()) {
    pair<int, pair<int, int>> t = q.top();
    q.pop();
    for(int i = 0; i < 4; i++) {
      int nx = t.second.first + dx[i];
      int ny = t.second.second + dy[i];
      auto [x, y] = t.second;
      if(v[x][y] == 'X') break;
      if(nx < 0 or nx > n-1 or ny < 0 or ny > m-1) continue;
      if(dist[nx][ny] > dist[x][y] + dir(v[x][y], i)) {
        dist[nx][ny] = dist[x][y] + dir(v[x][y], i);
        q.push({dist[nx][ny], {nx, ny}});
      }
    }
  }
  cout << (dist[n-1][m-1] == (int)1e18 ? -1 : dist[n-1][m-1]);
}
signed main() {
  cin.tie(0)->sync_with_stdio(0);
  T = 1;
  // cin >> T;
  while (T--) {
    solve();
  }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |