#https://i...content-available-to-author-only...e.com/n7GgJb
#
#Hladanie najkratsej cesty medzi 2 polickami
#
#vstup:
#n m - rozmery, riadky a stlpce
#n riadkov obsahujucich mapu bludiska - '.' prazdne, '#' prekazka/stena
#sr ss - suradnice startovacieho policka
#cr cs - suradnice ciela
import queue
n,m = [int(_) for _ in input().split()]
print(n,m)
mapa = [[x for x in input()] for _ in range(n)]
for riadok in mapa:
print(*riadok) #vypis jedneho riadku
for riadok in mapa:
print("".join(riadok)) #vypise bez medzier
print(mapa[1][1])
print(mapa[2][4])
sr,ss = [int(_) for _ in input().split()]
cr,cs = [int(_) for _ in input().split()]
def da_sa(r, s):
if not (0 <= r < n): return False
if not (0 <= s < m): return False
return mapa[r][s] == '.'
policka = queue.Queue() #policka na spracovanie - usporiadane dvojice (riadok,stlpec)
mapa[sr][ss] = 0
policka.put( (sr, ss) ) #vlozime startovacie policko
while not policka.empty(): #pokial nie je prazny zoznam policok
r,s = policka.get() #vyberie policko
for smer in [(-1,0), (0,1), (1,0), (0,-1)]: #pre vsetky smery
nr, ns = r+smer[0], s+smer[1] #nove policko
if da_sa(nr, ns): #ak sa da vojst na dane policko, t.j. '.'
mapa[nr][ns] = 1+mapa[r][s] #o 1 krok viac ako aktualne policko
policka.put( (nr, ns) ) #pridame policko na spracovanie
for riadok in mapa:
print(*riadok) #vypis jedneho riadku
print(mapa[cr][cs])
I2h0dHBzOi8vaS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5jb20vbjdHZ0piCiMKI0hsYWRhbmllIG5hamtyYXRzZWogY2VzdHkgbWVkemkgMiBwb2xpY2thbWkKIwojdnN0dXA6CiNuIG0gLSByb3ptZXJ5LCByaWFka3kgYSBzdGxwY2UKI24gcmlhZGtvdiBvYnNhaHVqdWNpY2ggbWFwdSBibHVkaXNrYSAtICcuJyBwcmF6ZG5lLCAnIycgcHJla2F6a2Evc3RlbmEKI3NyIHNzIC0gc3VyYWRuaWNlIHN0YXJ0b3ZhY2llaG8gcG9saWNrYQojY3IgY3MgLSBzdXJhZG5pY2UgY2llbGEKaW1wb3J0IHF1ZXVlCgpuLG0gPSBbaW50KF8pIGZvciBfIGluIGlucHV0KCkuc3BsaXQoKV0KcHJpbnQobixtKQptYXBhID0gW1t4IGZvciB4IGluIGlucHV0KCldIGZvciBfIGluIHJhbmdlKG4pXQpmb3IgcmlhZG9rIGluIG1hcGE6CglwcmludCgqcmlhZG9rKSAjdnlwaXMgamVkbmVobyByaWFka3UKZm9yIHJpYWRvayBpbiBtYXBhOgoJcHJpbnQoIiIuam9pbihyaWFkb2spKSAjdnlwaXNlIGJleiBtZWR6aWVyCnByaW50KG1hcGFbMV1bMV0pCnByaW50KG1hcGFbMl1bNF0pCnNyLHNzID0gW2ludChfKSBmb3IgXyBpbiBpbnB1dCgpLnNwbGl0KCldCmNyLGNzID0gW2ludChfKSBmb3IgXyBpbiBpbnB1dCgpLnNwbGl0KCldCgpkZWYgZGFfc2Eociwgcyk6CglpZiBub3QgKDAgPD0gciA8IG4pOiByZXR1cm4gRmFsc2UKCWlmIG5vdCAoMCA8PSBzIDwgbSk6IHJldHVybiBGYWxzZQoJcmV0dXJuIG1hcGFbcl1bc10gPT0gJy4nCgpwb2xpY2thID0gcXVldWUuUXVldWUoKSAjcG9saWNrYSBuYSBzcHJhY292YW5pZSAtIHVzcG9yaWFkYW5lIGR2b2ppY2UgKHJpYWRvayxzdGxwZWMpCm1hcGFbc3JdW3NzXSA9IDAKcG9saWNrYS5wdXQoIChzciwgc3MpICkgI3Zsb3ppbWUgc3RhcnRvdmFjaWUgcG9saWNrbwp3aGlsZSBub3QgcG9saWNrYS5lbXB0eSgpOiAjcG9raWFsIG5pZSBqZSBwcmF6bnkgem96bmFtIHBvbGljb2sKCXIscyA9IHBvbGlja2EuZ2V0KCkgI3Z5YmVyaWUgcG9saWNrbwoJCglmb3Igc21lciBpbiBbKC0xLDApLCAoMCwxKSwgKDEsMCksICgwLC0xKV06ICNwcmUgdnNldGt5IHNtZXJ5CgkJbnIsIG5zID0gcitzbWVyWzBdLCBzK3NtZXJbMV0gI25vdmUgcG9saWNrbwoJCWlmIGRhX3NhKG5yLCBucyk6ICNhayBzYSBkYSB2b2pzdCBuYSBkYW5lIHBvbGlja28sIHQuai4gJy4nCgkJCW1hcGFbbnJdW25zXSA9IDErbWFwYVtyXVtzXSAjbyAxIGtyb2sgdmlhYyBha28gYWt0dWFsbmUgcG9saWNrbwoJCQlwb2xpY2thLnB1dCggKG5yLCBucykgKSAjcHJpZGFtZSBwb2xpY2tvIG5hIHNwcmFjb3ZhbmllCgkKZm9yIHJpYWRvayBpbiBtYXBhOgoJcHJpbnQoKnJpYWRvaykgI3Z5cGlzIGplZG5laG8gcmlhZGt1CnByaW50KG1hcGFbY3JdW2NzXSk=