#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
//#pragma GCC optimize("Ofast")
//#pragma GCC target("avx,avx2,fma")
#include <bits/stdc++.h>
using namespace std;
void solve(); void subcases(); void precompute(); bool CONTINUE = true; // for when input would be terminated by solve
int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout<<setprecision(17); subcases(); }
template<typename T_container,typename T = typename enable_if<!is_same<T_container,string>::value, typename T_container::value_type>::type>
ostream& operator<<(ostream& os,const T_container& v){ os << '{'; string sep; for (const T& x: v) os<< sep << x, sep = ", "; return os << '}'; }
template<class A,class B>ostream& operator<<(ostream& os,const pair<A,B>& p){ return os << "{" << p.first << ", " << p.second << "}"; }
string _slow_strip(const string& s){ return regex_replace(s, regex("^ *([^ ]*) *"), "$1"); }
template<class L> void DBG_(const char* str, L& last) { cout << _slow_strip(str) << " = " << last << endl; }
template<class H, class ...T> void DBG_(const char* str, H& val, T&... tail) {
    const char* comma = strchr(str, ',');
    cout << _slow_strip(string(str, comma)) << " = " << val << ", ";
    DBG_(comma+1, tail...);
}
#define rep(i,a,b) for (int i = (a); i < (b); i++)
#define repr(i,a,b) for (int i = (b)-1; i >= a; i--)
#define dbg(...) DBG_(#__VA_ARGS__, __VA_ARGS__)
#define int int_fast64_t
using db = double;
template<class T, size_t N> using ar = array<T, N>;
#define all(x) (x).begin(), (x).end()
template<class T>inline int sz(const T& x){return x.size();}
#define pb push_back
using vi = vector<int>;
using pii = pair<int,int>;

const string NOYES[2] = {"NO","YES"};
const string NoYes[2] = {"No","Yes"};
const int INF = numeric_limits<int>::max();

// UTILITY PASTE

// END UTIL

void subcases() {
    precompute();
    int T; cin >> T; while (T--)
        solve();
}

void precompute() {

}

const int N = 1005;
int n,m,ab[N][2];
string s[N];

void solve() {
    cin >> n >> m;
    rep(i,0,n) cin >> s[i];
    if (m % 2) {
        cout << "YES\n";
        rep(i,0,m+1) cout << (i % 2 + 1) << " ";
        cout << "\n";
        return;
    }
    rep(i,0,n) rep(j,i+1,n) if (s[i][j] == s[j][i]) {
        cout << "YES\n";
        rep(k,0,m+1) cout << (k % 2 ? i+1 : j+1) << " ";
        cout << "\n";
        return;
    }

    rep(i,0,n) ab[i][0] = ab[i][1] = 0;

    rep(i,0,n) rep(j,0,n) if (i != j) {
        if (s[i][j] == 'a') {
            ab[i][0] = j+1;
        } else {
            ab[i][1] = j+1;
        }
    }

    rep(i,0,n) rep(j,0,n) if (i != j) {
        int k;
        if (s[i][j] == 'a' && ab[j][0]) {
            k = ab[j][0] - 1;
        } else if (s[i][j] == 'b' && ab[j][1]) {
            k = ab[j][1] - 1;
        } else continue;
        i++;j++;k++;
        cout << "YES\n";
        int rest = (m - 2) / 2;
        rep(b,0,rest) cout << ((b+rest) % 2 ? j : i) << " ";
        cout << i << " " << j << " " << k << " ";
        rep(b,0,rest) cout << (b % 2 ? k : j) << " ";
        cout << "\n";
        return;
    }
    cout << "NO\n";
}
