// Longest path on a grid
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
int n, m ;
bool visited[10][10] ;
int ff(int x1, int y1, int x2, int y2){
/*if(x1 or x2 is out of bounds or visited before)
return -INF (inf can be 100 as the grid is low in area)*/
if(x1 >= n || y1 >= m || x1 < 0 || y1 < 0 || visited[x1][y1])
return -100 ;
if(x1 == x2 && y1 == y2)
return 0 ;
visited[x1][y1] = 1 ;
int v1 = 1 + ff(x1 + 1, y1, x2, y2) ;
int v2 = 1 + ff(x1, y1 + 1, x2, y2) ;
int v3 = 1 + ff(x1 - 1, y1, x2, y2) ;
int v4 = 1 + ff(x1, y1 - 1, x2, y2) ;
visited[x1][y1] = 0 ;
return max( max(v1, v2) , max(v3, v4) ) ;
}
// also print the path? can be multiple paths though
void solve(){
for(int i = 0 ; i < 10 ; i++)
for(int j = 0 ; j < 10 ; j++)
visited[i][j] = 0 ;
cin >> n >> m ;
int x1, y1, x2, y2 ; cin >> x1 >> y1 >> x2 >> y2 ;
string mat[n] ;
for(int i = 0 ; i < n ; i++) cin >> mat[i] ;
for(int i = 0 ; i < n ; i++)
for(int j = 0 ; j < m ; j++)
if(mat[i][j] == '#')
visited[i][j] = 1 ;
int ans = ff(x1, y1, x2, y2) ;
if(ans < 0)
cout << "-1\n" ;
else
cout << ans << "\n" ;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("sample input.txt", "r", stdin) ;
freopen("output.txt", "w", stdout) ;
#endif
ios::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0) ;
int t ; cin >> t ;
while(t--) solve() ;
return 0 ;
}
Ly8gTG9uZ2VzdCBwYXRoIG9uIGEgZ3JpZAoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQgOwp0eXBlZGVmIGxvbmcgbG9uZyBsbCA7CgppbnQgbiwgbSA7CmJvb2wgdmlzaXRlZFsxMF1bMTBdIDsKCmludCBmZihpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpewoKCS8qaWYoeDEgb3IgeDIgaXMgb3V0IG9mIGJvdW5kcyBvciB2aXNpdGVkIGJlZm9yZSkKCQlyZXR1cm4gLUlORiAoaW5mIGNhbiBiZSAxMDAgYXMgdGhlIGdyaWQgaXMgbG93IGluIGFyZWEpKi8KCWlmKHgxID49IG4gfHwgeTEgPj0gbSB8fCB4MSA8IDAgfHwgeTEgPCAwIHx8IHZpc2l0ZWRbeDFdW3kxXSkKCQlyZXR1cm4gLTEwMCA7CgoJaWYoeDEgPT0geDIgJiYgeTEgPT0geTIpCgkJcmV0dXJuIDAgOwoKCXZpc2l0ZWRbeDFdW3kxXSA9IDEgOwoKCWludCB2MSA9IDEgKyBmZih4MSArIDEsIHkxLCB4MiwgeTIpIDsKCWludCB2MiA9IDEgKyBmZih4MSwgeTEgKyAxLCB4MiwgeTIpIDsKCWludCB2MyA9IDEgKyBmZih4MSAtIDEsIHkxLCB4MiwgeTIpIDsKCWludCB2NCA9IDEgKyBmZih4MSwgeTEgLSAxLCB4MiwgeTIpIDsKCgl2aXNpdGVkW3gxXVt5MV0gPSAwIDsKCglyZXR1cm4gbWF4KCBtYXgodjEsIHYyKSAsIG1heCh2MywgdjQpICkgOwoKfQoKLy8gYWxzbyBwcmludCB0aGUgcGF0aD8gY2FuIGJlIG11bHRpcGxlIHBhdGhzIHRob3VnaAp2b2lkIHNvbHZlKCl7CgogICAgZm9yKGludCBpID0gMCA7IGkgPCAxMCA7IGkrKykKICAgICAgICBmb3IoaW50IGogPSAwIDsgaiA8IDEwIDsgaisrKQogICAgICAgICAgICB2aXNpdGVkW2ldW2pdID0gMCA7CgoJY2luID4+IG4gPj4gbSA7CglpbnQgeDEsIHkxLCB4MiwgeTIgOyBjaW4gPj4geDEgPj4geTEgPj4geDIgPj4geTIgOwoKCXN0cmluZyBtYXRbbl0gOwoJZm9yKGludCBpID0gMCA7IGkgPCBuIDsgaSsrKSBjaW4gPj4gbWF0W2ldIDsKCWZvcihpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKykKICAgICAgICBmb3IoaW50IGogPSAwIDsgaiA8IG0gOyBqKyspCiAgICAgICAgICAgIGlmKG1hdFtpXVtqXSA9PSAnIycpCiAgICAgICAgICAgICAgICB2aXNpdGVkW2ldW2pdID0gMSA7CgoJaW50IGFucyA9IGZmKHgxLCB5MSwgeDIsIHkyKSA7CgoJaWYoYW5zIDwgMCkKICAgICAgICBjb3V0IDw8ICItMVxuIiA7CiAgICBlbHNlCiAgICAgICAgY291dCA8PCBhbnMgPDwgIlxuIiA7Cgp9CgppbnQgbWFpbigpewoKCSNpZm5kZWYgT05MSU5FX0pVREdFCglmcmVvcGVuKCJzYW1wbGUgaW5wdXQudHh0IiwgInIiLCBzdGRpbikgOwoJZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KSA7CgkjZW5kaWYKCglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKSA7IGNpbi50aWUoMCkgOyBjb3V0LnRpZSgwKSA7CgoJaW50IHQgOyBjaW4gPj4gdCA7Cgl3aGlsZSh0LS0pIHNvbHZlKCkgOwoKCXJldHVybiAwIDsKfQo=