# coding: utf-8
require 'pp'

###################

# inputType = :singleLine
# inputType = :2Lines
# inputType = :nLines
  
inputType = :nLines
  
def main(query)
  l1 = query.shift
  l2 = query.shift
  l3 = query.shift
  sizeh,sizew = tois(l1.split(" "))
  ch, cw = tois(l2.split(" "))
  ch = ch - 1
  cw = cw - 1
  dh, dw = tois(l3.split(" "))
  dh = dh - 1
  dw = dw - 1

  m = query.map { | l |
    l.split("")
  }

  q = []
  q.push([ch,cw,0])

  def pq(m)
    puts "---"
    m.each { | l |
      puts l.join("")
    }
  end
  
  while q.size > 0
  #  pq(m)
  #  ppp("Q1=",q)
    h,w,wa = q.shift
  #  ppp("Q2=",q)
    if (h == dh && w == dw) then
      return [wa]
    end
    if m[h][w] == "." then
      m[h][w] = "*"
      [[-1,0],[1,0],[0,-1],[0,1]].each { | hh,ww |
        if (h+hh >= 0 && h+hh < sizeh && w+ww >= 0 && w+ww < sizew) then
          x = [h + hh, w+ww,wa]
          if (! q.include?(x)) then
            q.unshift x
          end
        end
      }
      [[-2,-2],[-2,-1],[-2,0],[-2,1],[-2,2],
       [-1,-2],[-1,-1],[-1,1],[-1,2],
       [0,-2],[0,2],
       [1,-2],[1,-1],[1,1],[1,2],
       [2,-2],[2,-1],[2,0],[2,1],[2,2]].each { | hh,ww |
        if (h+hh >= 0 && h+hh < sizeh && w+ww >= 0 && w+ww < sizew) then
          x = [h + hh, w+ww,wa+1]
          if (! q.include?(x)) then
            q.push x
          end
          
        end
      }
    end
  end
  
  return [-1]
end

###################

TEST=false

def tois(l)
  l.map { | x | x.to_i}
end

def ppp(msg, val)
  if (TEST) then
    print msg
    pp val
  end
end

target = nil
if (ARGV.size == 0) then
  f = STDIN
end
if (ARGV.size > 0) then
  f = open(ARGV[0])
end
if (ARGV.size > 1) then
  target = ARGV[1].to_i
end

t = 1
ng = []
while true
  query = []
  if (inputType == :singleLine) then
    a = f.gets
    if ! a then
      exit
    end
    a.chomp!
    query.push a
  elsif (inputType == :l2Lines) then
    a = f.gets
    if ! a then
      exit
    end
    a.chomp!
    query.push a
    b = f.gets.chomp
    query.push b
  elsif (inputType == :l3Lines) then
    a = f.gets
    if ! a then
      exit
    end
    a.chomp!
    query.push a
    b = f.gets.chomp
    query.push b
    c = f.gets.chomp
    query.push c
  elsif (inputType == :nLines) then
    a = f.gets
    if ! a then
      exit
    end
    a.chomp!
    query.push a    

    n = a.split(" ")[0].to_i + 2

    n.times { | i |
      query.push f.gets.chomp
    }    
  end
  
  aa = f.gets
  if ! aa then
    r = main(query) 
    r.each { | x | puts x }
    exit
  elsif ( aa.chomp == "---") then
    oks = []
    while true
      s = f.gets.chomp
      if (s == "===") then
        break
      end
      oks.push s
    end

    if (target == nil || t == target) then
      if target then
        TEST = true
      end

      puts "--- " + t.to_s + " ---"
      r = main(query)    

      if r.join('\n') == oks.join('\n') then
        puts "RESULT:"
        r.each { | x | puts x }
        puts "OK"
      else
        puts "RESULT:NG"
        r.each { | x | puts x }
        puts "NG!!!!!!!!!"
        ng.push t
      end
    end
  end
  t = t + 1
end
puts "---"
puts "NG targes = " + ng.to_s
