#include using namespace std; #define LL int //Query lazy Segment tree LL lgs(LL *st,LL l,LL r,LL ss,LL se,LL si,LL *lazy) { if(lazy[si]) { st[si]=(st[si]+(se-ss+1)*lazy[si]); if(ss!=se) { lazy[si*2+1]=(lazy[si*2+1]+lazy[si]); lazy[si*2+2]=(lazy[si*2+2]+lazy[si]); } lazy[si]=0; } if(ss>r||sese) return 0; if(l<=ss&&r>=se) { return st[si]; } LL mid=ss+(se-ss)/2; return max(lgs(st,l,r,ss,mid,si*2+1,lazy),lgs(st,l,r,mid+1,se,si*2+2,lazy)); } //Udate Lazy Segtree void lupdate(LL *st,LL ss,LL se,LL ql,LL qr,LL diff,LL si,LL *lazy) { if(lazy[si]) { st[si]+=lazy[si]; if(ss!=se) { lazy[si*2+1]=(lazy[si*2+1]+lazy[si]); lazy[si*2+2]=(lazy[si*2+2]+lazy[si]); } lazy[si]=0; } if(ss>se||qrse) return; if(ss>=ql&&se<=qr) { st[si]+=diff; if(ss!=se) { lazy[si*2+1]=(lazy[si*2+1]+diff); lazy[si*2+2]=(lazy[si*2+2]+diff); } return; } if(ss!=se) { LL mid=ss+(se-ss)/2; lupdate(st,ss,mid,ql,qr,diff,si*2+1,lazy); lupdate(st,mid+1,se,ql,qr,diff,si*2+2,lazy); } st[si]=max(st[2*si+1],st[2*si+2]); } int main() { int t,n,i,j,k,l,m,sr[100000],ds[100000],seg1[1000000],lz1[1000000],lz2[1000000],seg2[1000000]; char ch[100000]; cin>>t; while(t--) { multiset>t1[100001],t2[100001]; multiset>:: iterator itr; cin>>m>>n; fill(seg1,seg1+10*m,0); fill(seg2,seg2+10*m,0); fill(lz1,lz1+10*m,0); fill(lz2,lz2+10*m,0); for(i=0;i>ch[i]; for(i=0;i>sr[i]; for(i=0;i>ds[i]; for(i=0;ids[i]) continue; // cout< ans(dp,dp+m+1); vector::iterator vit; for(i=1;i<=n;i++) { vit=lower_bound(ans.begin(),ans.end(),i); if(vit==ans.end()) cout<<-1<<" "; else { j=vit-ans.begin(); cout<