/*in the name of Allah the most beneficent the most merciful.*/
#include<bits/stdc++.h>
#define ll long long
#define D double
#define pb push_back
#define MAX 1e18
#define MIN -1e18
//#define mod2 20071027
// #define MOD 998244353
#define MOD 1000000007
#define base 139
// #define MOD 1000074259
#define base2 31
#define memz(a) memset(a, 0, sizeof(a))
#define memn(a) memset(a, -1, sizeof(a))
#define in1(a) scanf("%lld", &a)
#define in1i(a) scanf("%d", &a)
#define in2i(a, b) scanf("%d%d", &a, &b)
#define in2(a, b) scanf("%lld%lld", &a, &b)
#define TC(c) printf("Case #%lld: ", ++c)
#define out(x) cout << #x << " -> " << x << endl;
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL);
#define FILE   freopen("input.txt", "r", stdin);  freopen("out.txt", "w", stdout);
#define pii pair<ll, ll>
#define piii pair<ll, pair<ll, ll>>
#define PQ priority_queue
// cout<<setprecision(15)<<fixed<<ans<<endl;
using namespace std;
const ll N = 300010;
const double eps = 1e-6;
const double pi = 4 * atan(1);
ll t, n, m, nxt[N][3], bck[N][3];
string s[1010];
deque<ll>dq;
int solve() {
	FAST
	cin >> t;
	while (t--) {
		dq.clear();
		ll ok = 0, x, y;
		cin >> n >> m;
		for (int i = 0; i < n; i++) {
			cin >> s[i];
			nxt[i][0] = -1;
			nxt[i][1] = -1;
			bck[i][0] = -1;
			bck[i][1] = -1;
		}
		if (m % 2) {
			printf("YES\n");
			printf("1 ");
			for (int i = 0; i < m; i++) {
				if (i % 2) printf("1 ");
				else printf("2 ");
			}
			printf("\n");
			continue;
		}
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (i == j) continue;
				nxt[i][s[i][j] - 'a'] = j;
				bck[j][s[i][j] - 'a'] = i;
			}
		}

		bool f = 0;
		for (int i = 0; i < n && !f; i++) {
			for (int j = 0; j < n && !f; j++) {
				for (int k = 0; k < n && !f; k++) {
					if (j == k || j == i) continue;
					if (s[i][j] == s[j][k]) {
						f=1;
						dq.pb(j + 1);
						ll y = k, z = i;
						for (int ii = 0; ii < m / 2; ii++) {
							dq.push_back(y + 1);
							dq.push_front(z + 1);
							if (nxt[y][0]!=-1 && bck[z][0]!=-1) {
								z = bck[z][0];
								y = nxt[y][0];
							}
							else if (nxt[y][1]!=-1 && bck[z][1]!=-1) {
								z = bck[z][1];
								y = nxt[y][1];
							}
						}
						printf("YES\n");
						for(auto u:dq){
							printf("%lld ", u);
						}
						printf("\n");
					}
				}
			}

		}
		if(!f)
		printf("NO\n");
	}
	return 0;
}
int main()
{
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
	return solve();
}