#include<bits/stdc++.h>
#define int long long
#define N 500005
#define lim 500000
using namespace std;
int t,n,L,sum,cnt,pre[N],dp[N],pos,tmp,zz,ans[N],wz[N],tot,op,top;
char s[N];
bool vis[N];
vector<int>e[N],p;
queue<int>q;
void dfs(int x){
if(!x){
return;
}
if(!vis[x]&&!(L%x)){
for(int i=zz;i<=zz+x-1;i++){
if(i!=zz+x-1)ans[wz[i]]=wz[i+1];
else ans[wz[i]]=wz[zz];
}
zz+=x;
return;
}
for(int y:e[x]){
dfs(y);
dfs(x-y);
return;
}
}
signed main(){
vis[0]=vis[1]=1;
for(int i=2;i<=lim;i++){
if(!vis[i]){
for(int j=i*2;j<=lim;j+=i){
vis[j]=1;
}
}
}
cin>>t;
while(t--){
op=top=tmp=tot=zz=pos=cnt=sum=0;
p.clear();
cin>>n>>L;
for(int i=1;i<=n;i++){
cin>>s[i];
ans[i]=wz[i]=dp[i]=0;
e[i].clear();
}
if(!L){
for(int i=1;i<n;i++){
cout<<i+1<<' ';
}
cout<<1<<'\n';
continue;
}
for(int i=1;i<=n;i++){
if(s[i]=='1'){
p.push_back(i);
sum++;
wz[tot++]=i;
}
if(!vis[i]&&!(L%i)){
pre[++cnt]=i;
dp[i]=1;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=cnt;j++){
if(i>=pre[j]){
if(dp[i-pre[j]])e[i].push_back(i-pre[j]);
dp[i]=max(dp[i],dp[i-pre[j]]);
}
}
}
for(int i=sum;i<n-1;i++){
if(dp[i])pos=i;
}
if(dp[n])pos=n;
if(!pos){
cout<<"-1\n";
continue;
}
tmp=sum;
for(int i=1;i<=n;i++){
if(s[i]=='0'&&tmp<pos){
tmp++;
p.push_back(i);
wz[tot++]=i;
}
}
sort(wz,wz+tot);
dfs(pos);
for(int i=1;i<=n;i++){
if(!ans[i]){
q.push(i);
}
}
if(!q.empty()){
op=q.front();
while(q.size()>1){
top=q.front();
q.pop();
ans[top]=q.front();
}
ans[q.front()]=op;
q.pop();
}
for(int i=1;i<=n;i++){
cout<<ans[i]<<' ';
}
cout<<'\n';
}
return 0;
}