#include <bits/stdc++.h>

typedef long double ld;
#define int long long

#define gcd            __gcd
//#define endl           "\n"
#define setbits(x)     __builtin_popcountll(x)
#define zrobits(x)     __builtin_ctzll(x)
#define mod            1000000007
#define mod2           998244353
#define maxe           *max_element
#define mine           *min_element
#define inf            1e18
#define pb             push_back
#define all(x)         x.begin(), x.end()
#define f              first
#define s              second
#define lb             lower_bound
#define ub             upper_bound
#define ins            insert
#define sz(x)          (int)(x).size()
#define mk             make_pair
#define deci(x, y)     fixed<<setprecision(y)<<x
#define w(t)           int t; cin>>t; while(t--)
#define nitin          ios_base::sync_with_stdio(false); cin.tie(nullptr)
#define PI             3.141592653589793238
#define mem0(x)        memset(x,0,sizeof x)
#define mem1(x)        memset(x,-1,sizeof x)
using namespace std;
template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.f << ", " << p.second << ')'; }
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 << '}'; }

void dbg_out() { cerr << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cerr << ' ' << H; dbg_out(T...); }

#ifdef NITIN
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

vector<int> cal(int s1,int s2,int m){
    int x=s1,y=s2;
    vector<int>ans;
    vector<int>ans2;
    int times=m/2;
    int s=s1;
    for(int i=0;i<times;i++){
        ans.pb((s+3)%3+1);
        s--;
        s%=3;
    }
    s=s2;
    for(int i=0;i<times;i++){
        ans2.pb(s%3+1);
        s++;
        s%=3;
    }
    reverse(all(ans));
    ans.pb(((3-x-y)%3+3)%3+1);
    for(auto c:ans2)
        ans.pb(c);
    return ans;
}
void solve() {
    int n ;
    cin>>n;
    int m;
    cin>>m;
    char c[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>c[i][j];
        }
    }
    if(n==2){
        if(c[0][1]==c[1][0] || m%2!=0){
            cout<<"YES"<<endl;
            bool flag=true;
            for(int i =0;i<=m;i++)
            {
                cout<<flag+1<<" ";
                flag=!flag;
            }
            cout<<endl;
        }else{
            cout<<"NO"<<endl;
        }
    }else if(m%2==0){
        cout<<"YES"<<endl;
        int s1=0,s2=0;
        if(c[0][1]==c[1][2] && c[1][2]==c[2][0]){
            int s=0;
            for(int j=0;j<=m;j++)
            {
                cout<<s+1<<" ";
                s++;
                s%=3;
            }
        }else {
            if(c[0][1]==c[1][2] && c[1][2]!=c[2][0]){
                s1=0;
                s2=2;
            }else if(c[1][2]==c[2][0] && c[2][0]!=c[0][1])
            {
                s1=1;
                s2=0;
            }else{
                s1=2;
                s2=1;
            }
            vector<int>ans=cal(s1,s2,m);
            for(auto c:ans)
                cout<<c<<" ";
            cout<<endl;
        }
    }else{
        cout<<"YES"<<endl;
        bool flag=true;
        for(int i =0;i<=m;i++)
        {
            cout<<flag+1<<" ";
            flag=!flag;
        }
        cout<<endl;
    }
}

int32_t main() {
    nitin;
w(t)
    solve();
}