#include <bits/stdc++.h>
using namespace std;
int n, t;
const int gug = 1211;
char f[gug][gug];
bool vis[gug][gug][4] = {};
int ans[gug][gug][4] = {};
int q[gug * gug * 4][3] = {};
int x, y, xx, yy;
int m;
int tou, wei;
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) cin >> f[i][j];
  cin >> x >> y >> xx >> yy;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      for (int k = 0; k < 4; k++) ans[i][j][k] = 99999999;
  ans[x][y][0] = 0;
  tou = 0, wei = 0;
  q[0][0] = x, q[0][1] = y, q[0][2] = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) switch (f[i][j]) {
        case '+':
          break;
        case '-':
          vis[i][j][0] = vis[i][j][2] = 1;
          break;
        case '|':
          vis[i][j][1] = vis[i][j][3] = 1;
          break;
        case '^':
          vis[i][j][1] = vis[i][j][2] = vis[i][j][3] = 1;
          break;
        case '>':
          vis[i][j][0] = vis[i][j][2] = vis[i][j][3] = 1;
          break;
        case '<':
          vis[i][j][0] = vis[i][j][1] = vis[i][j][2] = 1;
          break;
        case 'v':
          vis[i][j][0] = vis[i][j][1] = vis[i][j][3] = 1;
          break;
        case 'L':
          vis[i][j][3] = 1;
          break;
        case 'R':
          vis[i][j][1] = 1;
          break;
        case 'U':
          vis[i][j][0] = 1;
          break;
        case 'D':
          vis[i][j][2] = 1;
          break;
        case '*':
          vis[i][j][0] = vis[i][j][1] = vis[i][j][2] = vis[i][j][3] = 1;
      }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      for (int k = 0; k < 4; k++) vis[i][j][k] ^= 1;
  while (tou <= wei) {
    int xxx = q[tou][0], yyy = q[tou][1], z = q[tou][2];
    if (ans[xxx][yyy][z + 1 & 3] > ans[xxx][yyy][z] + 1)
      ans[xxx][yyy][z + 1 & 3] = ans[xxx][yyy][z] + 1, q[++wei][0] = xxx,
                            q[wei][1] = yyy, q[wei][2] = z + 1 & 3;
    if (ans[xxx + 1][yyy][z] > ans[xxx][yyy][z] + 1 &&
        vis[xxx][yyy][6 - z & 3] && vis[xxx + 1][yyy][4 - z & 3])
      ans[xxx + 1][yyy][z] = ans[xxx][yyy][z] + 1, q[++wei][0] = xxx + 1,
                q[wei][1] = yyy, q[wei][2] = z;
    if (ans[xxx - 1][yyy][z] > ans[xxx][yyy][z] + 1 &&
        vis[xxx][yyy][4 - z & 3] && vis[xxx - 1][yyy][6 - z & 3])
      ans[xxx - 1][yyy][z] = ans[xxx][yyy][z] + 1, q[++wei][0] = xxx - 1,
                q[wei][1] = yyy, q[wei][2] = z;
    if (ans[xxx][yyy - 1][z] > ans[xxx][yyy][z] + 1 &&
        vis[xxx][yyy][7 - z & 3] && vis[xxx][yyy - 1][5 - z & 3])
      ans[xxx][yyy - 1][z] = ans[xxx][yyy][z] + 1, q[++wei][0] = xxx,
                     q[wei][1] = yyy - 1, q[wei][2] = z;
    if (ans[xxx][yyy + 1][z] > ans[xxx][yyy][z] + 1 &&
        vis[xxx][yyy][5 - z & 3] && vis[xxx][yyy + 1][7 - z & 3])
      ans[xxx][yyy + 1][z] = ans[xxx][yyy][z] + 1, q[++wei][0] = xxx,
                     q[wei][1] = yyy + 1, q[wei][2] = z;
    tou++;
  }
  if (x == xx && y == yy) {
    cout << 0 << endl;
    return 0;
  }
  int maxx = 2000000000;
  for (int i = 0; i < 4; i++)
    if (ans[xx][yy][i] < maxx) maxx = ans[xx][yy][i];
  if (maxx == 99999999) maxx = -1;
  cout << maxx << endl;
  return 0;
}
