#include <stdio.h>
#include <algorithm>
#include <assert.h>
#include <set>
#include <map>
#include <complex>
#include <iostream>
#include <time.h>
#include <math.h>
#include <stack>
#include <stdlib.h>
#include <memory.h>
#include <bitset>
#include <math.h>
#include <string>
#include <string.h>
#include <queue>
#include <vector>
using namespace std;
const int MaxN = 1e5 + 10;
const int INF = 1e9;
const int MOD = 1e9 + 7;
const int dx[] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dy[] = {-1, 0, 1, -1, 1, 0, -1, 1};
int main() {
// freopen("input.txt", "r", stdin);
ios::sync_with_stdio(false);
cin.tie(NULL);
int t;
cin >> t;
for (int ti = 0; ti < t; ++ti) {
int n, k;
cin >> n >> k;
vector < string > s(n);
for (int i = 0; i < n; ++i) {
cin >> s[i];
}
bool ok = false;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (s[i][j] == '.') {
for (int dir = 0; dir < 4; ++dir) {
int cnt = 0;
{
int x = i, y = j;
for (int l = 0; l < k - 1; ++l) {
x += dx[dir];
y += dy[dir];
if (x < 0 || x >= n || y < 0 || y >= n || s[x][y] != 'X') {
break;
}
cnt++;
}
}
{
int x = i, y = j;
for (int l = 0; l < k - 1; ++l) {
x += dx[dir + 4];
y += dy[dir + 4];
if (x < 0 || x >= n || y < 0 || y >= n || s[x][y] != 'X') {
break;
}
cnt++;
}
}
if (cnt >= k - 1) {
ok = true;
}
}
}
}
}
cout << (ok == true ? "YES" : "NO") << endl;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxhc3NlcnQuaD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGNvbXBsZXg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxtZW1vcnkuaD4KI2luY2x1ZGUgPGJpdHNldD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDx2ZWN0b3I+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApjb25zdCBpbnQgTWF4TiA9IDFlNSArIDEwOwpjb25zdCBpbnQgSU5GID0gMWU5Owpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKIApjb25zdCBpbnQgZHhbXSA9IHstMSwgLTEsIC0xLCAwLCAxLCAxLCAxLCAwfTsKY29uc3QgaW50IGR5W10gPSB7LTEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgMX07CiAKaW50IG1haW4oKSB7Ci8vIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICBjaW4udGllKE5VTEwpOwogIGludCB0OwogIGNpbiA+PiB0OwogIGZvciAoaW50IHRpID0gMDsgdGkgPCB0OyArK3RpKSB7CiAgICBpbnQgbiwgazsKICAgIGNpbiA+PiBuID4+IGs7CiAgICB2ZWN0b3IgPCBzdHJpbmcgPiBzKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgY2luID4+IHNbaV07CiAgICB9CiAgICBib29sIG9rID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICBmb3IgKGludCBqID0gMDsgaiA8IG47ICsraikgewogICAgICAgIGlmIChzW2ldW2pdID09ICcuJykgewogICAgICAgICAgZm9yIChpbnQgZGlyID0gMDsgZGlyIDwgNDsgKytkaXIpIHsKICAgICAgICAgICAgaW50IGNudCA9IDA7CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbnQgeCA9IGksIHkgPSBqOwogICAgICAgICAgICAgIGZvciAoaW50IGwgPSAwOyBsIDwgayAtIDE7ICsrbCkgewogICAgICAgICAgICAgICAgeCArPSBkeFtkaXJdOwogICAgICAgICAgICAgICAgeSArPSBkeVtkaXJdOwogICAgICAgICAgICAgICAgaWYgKHggPCAwIHx8IHggPj0gbiB8fCB5IDwgMCB8fCB5ID49IG4gfHwgc1t4XVt5XSAhPSAnWCcpIHsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgewogICAgICAgICAgICAgIGludCB4ID0gaSwgeSA9IGo7CiAgICAgICAgICAgICAgZm9yIChpbnQgbCA9IDA7IGwgPCBrIC0gMTsgKytsKSB7CiAgICAgICAgICAgICAgICB4ICs9IGR4W2RpciArIDRdOwogICAgICAgICAgICAgICAgeSArPSBkeVtkaXIgKyA0XTsKICAgICAgICAgICAgICAgIGlmICh4IDwgMCB8fCB4ID49IG4gfHwgeSA8IDAgfHwgeSA+PSBuIHx8IHNbeF1beV0gIT0gJ1gnKSB7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY250Kys7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjbnQgPj0gayAtIDEpIHsKICAgICAgICAgICAgICBvayA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgKG9rID09IHRydWUgPyAiWUVTIiA6ICJOTyIpIDw8IGVuZGw7CiAgfQogIHJldHVybiAwOwp9