#include <bits/stdc++.h>
using namespace std;
const int MAX = 55;
int X[] = {0, 0, 1, -1};
int Y[] = {1, -1, 0, 0};
string graff[MAX];
vector<pair<int, int> > graf[MAX * MAX];
const int INF = 1e9;
vector<int> koszt[2];
bitset<MAX * MAX> odw[2];
int sq(int a) { return a * a; }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  koszt[0].resize(MAX * MAX);
  koszt[1].resize(MAX * MAX);
  fill((koszt[0]).begin(), (koszt[0]).end(), INF);
  fill((koszt[1]).begin(), (koszt[1]).end(), INF);
  int curX, curY, celX, celY;
  int N;
  cin >> N;
  cin >> curY >> curX >> celY >> celX;
  for (int i = 1; i <= N; ++i) {
    graff[i] = '1';
    string temp;
    cin >> temp;
    graff[i] += temp;
  }
  for (int i = 1; i <= N; ++i) {
    for (int j = 1; j <= N; ++j) {
      if (graff[i][j] == '1') continue;
      for (int y = 1; y <= N; ++y) {
        for (int x = 1; x <= N; ++x) {
          if (graff[y][x] == '1') {
            continue;
          }
          int diff = abs(i - y) + abs(j - x);
          if (diff > 1) {
            graf[N * (i - 1) + j].push_back(
                {N * (y - 1) + x, sq(i - y) + sq(j - x)});
          } else
            graf[N * (i - 1) + j].push_back({N * (y - 1) + x, 0});
        }
      }
    }
  }
  int pocz = (curY - 1) * N + curX;
  koszt[0][pocz] = 0;
  priority_queue<pair<int, pair<int, int> > > kolejka;
  kolejka.push({0, {pocz, 0}});
  while (!kolejka.empty()) {
    int u = kolejka.top().second.first, k = -kolejka.top().first,
        czy = kolejka.top().second.second;
    kolejka.pop();
    if (odw[czy][u]) continue;
    odw[czy][u] = 1;
    for (auto &p : graf[u]) {
      if (czy) {
        if (koszt[czy][p.first] > k + p.second && !p.second) {
          koszt[czy][p.first] = k;
          kolejka.push({-k, {p.first, 1}});
        }
      } else {
        if (koszt[czy][p.first] > k + p.second && !p.second) {
          koszt[czy][p.first] = k;
          kolejka.push({-k, {p.first, 0}});
        } else if (koszt[1][p.first] > k + p.second && p.second) {
          koszt[1][p.first] = k + p.second;
          kolejka.push({-koszt[1][p.first], {p.first, 1}});
        }
      }
    }
  }
  int kon = (celY - 1) * N + celX;
  cout << min(koszt[0][kon], koszt[1][kon]) << "\n";
  return 0;
}
