#include <bits/stdc++.h>
using namespace std;
bool vis[ 101 ] [ 101 ] ;
vector< string> split_string( string) ;
bool safe( int x,int y,vector< string> & grid)
{
if ( x>= 0 && y>= 0 && x< grid.size ( ) && y< grid.size ( ) && vis[ x] [ y] == false && grid[ x] [ y] == '.' )
{
vis[ x] [ y] = true ;
return true ;
}
return false ;
}
int minimumMoves( vector< string> grid, int startX, int startY, int goalX, int goalY)
{
int i,j,k,ans,t,x,y,xx,yy;
int f= 0 ;
memset ( vis,false ,sizeof ( vis) ) ;
ans= 1 ;
queue< pair< int ,int >> q;
pair< int ,int > p;
if ( startX== goalX && startY== goalY || grid.size ( ) == 1 )
return 0 ;
q.push ( { startX,startY} ) ;
vis[ startX] [ startY] = true ;
while ( ! q.empty ( ) )
{
t= q.size ( ) ;
while ( t-- )
{
p= q.front ( ) ;
q.pop ( ) ;
x= p.first ;
y= p.second ;
xx= x;
yy= y;
while ( safe( xx+ 1 ,yy,grid) )
{
xx= xx+ 1 ;
q.push ( { xx,yy} ) ;
if ( xx== goalX && yy== goalY)
return ans;
}
xx= p.first ;
yy= p.second ;
while ( safe( xx- 1 ,yy,grid) )
{
xx= xx- 1 ;
q.push ( { xx,yy} ) ;
if ( xx== goalX && yy== goalY)
return ans;
}
xx= p.first ;
yy= p.second ;
while ( safe( xx,yy+ 1 ,grid) )
{
yy= yy+ 1 ;
q.push ( { xx,yy} ) ;
if ( xx== goalX && yy== goalY)
return ans;
}
xx= p.first ;
yy= p.second ;
while ( safe( xx,yy- 1 ,grid) )
{
yy= yy- 1 ;
q.push ( { xx,yy} ) ;
if ( xx== goalX && yy== goalY)
return ans;
}
}
ans+ = 1 ;
}
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmJvb2wgdmlzWzEwMV1bMTAxXTsKdmVjdG9yPHN0cmluZz4gc3BsaXRfc3RyaW5nKHN0cmluZyk7Cgpib29sIHNhZmUoaW50IHgsaW50IHksdmVjdG9yPHN0cmluZz4mZ3JpZCkKewogICAgaWYoeD49MCAmJiB5Pj0wICYmIHg8Z3JpZC5zaXplKCkgJiYgeTxncmlkLnNpemUoKSAmJiB2aXNbeF1beV09PWZhbHNlICYmIGdyaWRbeF1beV09PScuJykKICAgIHsKICAgICAgICB2aXNbeF1beV09dHJ1ZTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIAogICAgcmV0dXJuIGZhbHNlOwp9CgoKaW50IG1pbmltdW1Nb3Zlcyh2ZWN0b3I8c3RyaW5nPiBncmlkLCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZLCBpbnQgZ29hbFgsIGludCBnb2FsWSkgCnsKICAgIGludCBpLGosayxhbnMsdCx4LHkseHgseXk7CiAgICBpbnQgZj0wOwogICAgbWVtc2V0KHZpcyxmYWxzZSxzaXplb2YodmlzKSk7CiAgICBhbnM9MTsKICAgIHF1ZXVlPHBhaXI8aW50LGludD4+cTsKICAgIHBhaXI8aW50LGludD5wOwogCiAgICBpZihzdGFydFg9PWdvYWxYICYmIHN0YXJ0WT09Z29hbFkgfHwgZ3JpZC5zaXplKCk9PTEpCiAgICAgICAgcmV0dXJuIDA7CiAgICAKICAgICAgIAogICAgcS5wdXNoKHtzdGFydFgsc3RhcnRZfSk7CiAgICB2aXNbc3RhcnRYXVtzdGFydFldPXRydWU7CiAgICAKICAgIAp3aGlsZSghcS5lbXB0eSgpKQp7CiAgdD1xLnNpemUoKTsKICAgIAogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIHA9cS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgeD1wLmZpcnN0OwogICAgICAgIHk9cC5zZWNvbmQ7CiAgICAgICAgeHg9eDsKICAgICAgICB5eT15OwogICAgICAgIAogICAgICAgICAgICB3aGlsZShzYWZlKHh4KzEseXksZ3JpZCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHh4PXh4KzE7CiAgICAgICAgICAgICAgICAgcS5wdXNoKHt4eCx5eX0pOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZih4eD09Z29hbFggJiYgeXk9PWdvYWxZKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBhbnM7CiAgICAgICAgICAgIH0KICAgIAogICAgIAogICAgICAgIHh4PXAuZmlyc3Q7CiAgICAgICAgeXk9cC5zZWNvbmQ7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICB3aGlsZShzYWZlKHh4LTEseXksZ3JpZCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAKICAgICAgICAgICAgICAgIHh4PXh4LTE7CiAgICAgICAgICAgICAgICAgIHEucHVzaCh7eHgseXl9KTsKICAgICAgICAgICAgICAgICAgaWYoeHg9PWdvYWxYICYmIHl5PT1nb2FsWSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW5zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgCgogICAgICAgIHh4PXAuZmlyc3Q7CiAgICAgICAgeXk9cC5zZWNvbmQ7CiAgICAgICAgICAgIAogICAgICAgIHdoaWxlKHNhZmUoeHgseXkrMSxncmlkKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeXk9eXkrMTsKICAgICAgICAgICAgICAgIHEucHVzaCh7eHgseXl9KTsKICAgICAgICAgICAgICAgICAgaWYoeHg9PWdvYWxYICYmIHl5PT1nb2FsWSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW5zOwogICAgICAgICAgICB9CiAgICAgICAgIAogICAgIAogICAgICAgIHh4PXAuZmlyc3Q7CiAgICAgICAgeXk9cC5zZWNvbmQ7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIHdoaWxlKHNhZmUoeHgseXktMSxncmlkKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB5eT15eS0xOwogICAgICAgICAgICAgICAgcS5wdXNoKHt4eCx5eX0pOwogICAgICAgICAgICAgICAgICBpZih4eD09Z29hbFggJiYgeXk9PWdvYWxZKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBhbnM7CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgCiAgICB9CiAgICAgICAgYW5zKz0xOwogICAgICAgIAp9CiAgICAKICAgIHJldHVybiAwOwoKfQo=