#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define forq(i , a , b) for (int i = (a); i <= (b); ++i)
#define forr(i , b) forq( i , 0 , b - 1 )
#define F first
#define S second
#define IF ->first
#define IS ->second
#define endl '\n'
#define qqmemset(array , val) memset (array , val , sizeof(array))
#define ALLV(vect) vect.begin() , vect.end()
#define mid (st + en) / 2
#define mid1 (2 * st + en) / 3
#define mid2 (2 * en + st) / 3
#define lef 2 * Node
#define rig lef + 1
mt19937 rng( chrono::steady_clock::now().time_since_epoch().count() );
#define Ran(a, b) rng() % ( (b) - (a) + 1 ) + (a)

ll R = 19491001 , NUMTESTCASE ;
const ll NN = 10 + 1e6 ;
const double pi = acos(-1.0) ;
int di [8] = {1 , 0 , -1 , 0  , 1 , -1 , 1  , -1 } , dj [8] = {0 , 1 , 0  , -1 , 1 , -1 , -1 , 1  } ;
int   n , k  ;
char Buff [NN] ;
string Read () {
    scanf("%s" , Buff) ;
    return Buff ;
}

string s ;
ll Power2 [NN] , Arr [NN] , Pref [NN];
void TestCase () {
    scanf("%d%d" , &n , &k) ;
    s = Read() ;
    forq (i , 1 , n) Arr [i] = 1 ^ (s [i - 1] - '0')  ;
    forq (i , 1 , n) Pref [i] = Pref [i - 1] + Arr [i] ;
    map <ll,bool> Hash ;
    ll Temp = 0 ;
    for (int i = 1 ; i <= k ; i ++)
        (Temp += Power2 [k - 1] * Arr [i] % R * Power2 [k - i + 1] % R) %= R ;
    Hash [Temp] = true ;
    for (int i = k + 1 ; i <= n ; i ++) {
        (Temp -= Power2 [k - 1] * Arr [i - k] % R * Power2 [k] % R ) %= R ;
        if (Temp < 0) Temp += R ;
        (Temp *= 236ll ) %= R ;
        (Temp += 236ll * Power2 [k - 1] * Arr [i] % R) %= R ;
        Hash [Temp] = true ;
    }
    ll Ans ;
    for (Ans = 0 ; Ans < (1 << min(k , 23)) ; Ans ++) {
        Temp = 0 ;
        ll TempAns = Ans ;
        for (int j = 0 ; TempAns ; j ++) {
            (Temp += Power2 [k - 1] * (ll) (TempAns & 1) % R * Power2 [j + 1] % R) %= R ;
            TempAns >>= 1 ;
        }
        if (!Hash [Temp]) break ;
    }
    if (Ans == (1 << min(k , 23))) return void (puts("NO")) ;
    string Res = "" ;
    while (Ans) {
        Res += '0' + (Ans & 1) ;
        Ans >>= 1 ;
    }
    while (Res.size () != k) Res += "0" ;
    reverse(ALLV(Res)) ;
    printf("YES\n%s\n" , Res.c_str()) ;
}
int main()
{
    Power2 [0] = 1 ;
    forq (i , 1 , NN - 1) Power2 [i] = 236 * Power2 [i - 1] % R ;
    //ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL) ;
    for (cin >> NUMTESTCASE ; NUMTESTCASE ; NUMTESTCASE --)
        TestCase() ;
    return 0;
}
