/**/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <queue>
typedef long long LL;
using namespace std;
int n, m, flag;
int k, x1, x2, y1, y2;
char s[105][105];
int dist[4][2] = {1, 0, -1, 0, 0, -1, 0, 1};
struct node{
int x, y, w;
bool operator <(const node &a) const {
return w > a.w;
}
};
void bfs(){
int vis[105][105];
memset(vis, 0, sizeof(vis));
priority_queue<node> q;
q.push(node{x1, y1, -1});
while(q.size()){
node t = q.top();
q.pop();
//if(t.x == x2 && t.y == y2){
// if(t.w <= k){
// printf("yes\n");
// flag = 1;
//}
// return ;
//}
for (int i = 0; i < 4; i++){
int x = t.x + dist[i][0], y = t.y + dist[i][1];
while(!(x < 1 || x > n || y < 1 || y > m || s[x][y] == '*')){
if(!vis[x][y] || vis[x][y] > t.w + 1){
vis[x][y] = t.w + 1;
q.push(node{x, y, t.w + 1});
if(x == x2 && y == y2 && t.w + 1 <= k){
printf("yes\n");
flag = 1;
return ;
}
}
x += dist[i][0], y += dist[i][1];
}
}
}
}
int main(){
int t;
scanf("%d", &t);
while(t--){
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++){
scanf("%s", s[i] + 1);
}
scanf("%d %d %d %d %d",&k, &y1, &x1, &y2, &x2);
if(s[x2][y2] == '*'){
printf("no\n");
continue;
}
flag = 0;
bfs();
if(!flag){
printf("no\n");
}
}
return 0;
}
/**/
注意行和列反过来!!多坑啊