#include <cstdio>
#include <cstring>
#define N 105
#include <cstring>
#define N 105
using namespace std;
char map[N][N];
int vis[N][N];
int n;
int sx, sy, ex, ey;
int flag;//记录是否可达
int vis[N][N];
int n;
int sx, sy, ex, ey;
int flag;//记录是否可达
int dx[4] = { -1,0,0,1 };
int dy[4] = { 0,-1,1,0 };
int dy[4] = { 0,-1,1,0 };
void dfs(int xx, int yy)
{
if (xx == ex && yy == ey)//到达终点
{
flag = 1;
return;
}
for (int i = 0; i < 4; i++)
{
int tx = xx + dx[i], ty = yy + dy[i];
if (tx >= 0 && tx < n && ty >= 0 && ty < n && !vis[tx][ty] && map[tx][ty] != '#')
{
vis[tx][ty] = 1;
dfs(tx, ty);
//vis[tx][ty] = 0;
//问是否可达,dfs回溯时不需要记录数组归零。
//如果是求最短路径则需要归零。 回溯时是否归零看具体情况而定
}
}
}
{
if (xx == ex && yy == ey)//到达终点
{
flag = 1;
return;
}
for (int i = 0; i < 4; i++)
{
int tx = xx + dx[i], ty = yy + dy[i];
if (tx >= 0 && tx < n && ty >= 0 && ty < n && !vis[tx][ty] && map[tx][ty] != '#')
{
vis[tx][ty] = 1;
dfs(tx, ty);
//vis[tx][ty] = 0;
//问是否可达,dfs回溯时不需要记录数组归零。
//如果是求最短路径则需要归零。 回溯时是否归零看具体情况而定
}
}
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
flag = 0;
memset(vis, 0, sizeof(vis));
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%s", &map[i]);
scanf("%d%d%d%d", &sx, &sy, &ex, &ey);
if (map[sx][sy] == '#' || map[ex][ey] == '#')
{
printf("NO\n");
continue;
}
vis[sx][sy] = 1;
dfs(sx, sy);
if (flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
{
int T;
scanf("%d", &T);
while (T--)
{
flag = 0;
memset(vis, 0, sizeof(vis));
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%s", &map[i]);
scanf("%d%d%d%d", &sx, &sy, &ex, &ey);
if (map[sx][sy] == '#' || map[ex][ey] == '#')
{
printf("NO\n");
continue;
}
vis[sx][sy] = 1;
dfs(sx, sy);
if (flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}