#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 505;
const int inf = 1<<30;
int n,m,ans;
int xs[] = {0,-1,0,1}; //右上左下
int ys[] = {1,0,-1,0};
int sx,sy,ex,ey;
char map[maxn][maxn];
void DFS( int x,int y,int dir,int turn )
{
if( turn >= ans ) return;
if( x == ex && y == ey ){
ans = turn;
return;
}
for( int i = 0; i < 4; i ++ )
{
int xx = x + xs[i];
int yy = y + ys[i];
if( xx >= 0 && xx <= n+1 && yy >= 0 && yy <= m+1 )
{
if( xx == ex && yy == ey )
{
if( i == dir )
DFS(xx,yy,dir,turn);
else
DFS(xx,yy,i,turn+1);
}
else if( map[xx][yy] != 'X' )
{
map[xx][yy] = 'X';
if( i == dir )
DFS(xx,yy,dir,turn);
else
DFS(xx,yy,i,turn+1);
map[xx][yy] = ' ';
}
}
}
}
int main()
{
//freopen("data.txt","r",stdin);
char ch;
int cas = 1;
while( scanf("%d%d",&n,&m) == 2,(n||m) )
{
memset(map,' ',sizeof(map));
for( int i = 1; i <= m; i ++ ){
getchar();
for( int j = 1; j <= n; j ++ ){
scanf("%c",&map[j][i]);
}
}
int pair = 1;
if( cas != 1 )
puts("");
printf("Board #%d:\n",cas++);
while( scanf("%d%d%d%d",&sx,&sy,&ex,&ey) == 4,(sx||sy||ex||ey) )
{
ans = inf;
DFS(sx,sy,-1,0);
if( ans != inf )
printf("Pair %d: %d segments.\n",pair++,ans);
else
printf("Pair %d: impossible.\n",pair++);
}
}
return 0;
}