#include using namespace std; using ll=long long; #include #include int op(int x,int y){ return x+y; } int e(){ return 0; } array solve(int n,ll k,vector a){ k--; if(n<61&&(1ll<<(n-1))<=k)return{"-1","-1","-1"}; vector> graph(2*n-1,{-1,-1}); { atcoder::dsu uf(2*n-1); atcoder::segtree seg(n); for(int i=0;i p(2*n-1); iota(p.begin(),p.end(),0); for(int i=0;iint{ return x<=a[i]; }; int l=seg.max_right(0,f); a[i]++; int r=seg.max_right(0,f); //cout< arr,string& ans)->int{ if(v>=n-1){ ll mcur=cur>>cnt; if(mcur>=arr[0]+arr[1]){ cur-=(arr[0]+arr[1])<=arr[0]){ cur-=arr[0]< narr; cnt--; narr[0]=min(k+1,arr[0]+arr[2]); narr[1]=min(k+1,arr[1]+arr[0]); narr[2]=min(k+1,arr[2]+arr[1]); int c=rec(rec,graph[v][0],narr,ans); if(c==0){ narr={0,arr[0],arr[2]}; }else if(c==1){ narr={arr[0],0,arr[1]}; }else{ narr={arr[2],arr[1],0}; } int d=rec(rec,graph[v][1],narr,ans); return (4-c-d)%3; }; array res{"","",""}; rec(rec,0,{0,1,0},res[0]); cur=k;cnt=n-1; rec(rec,0,{1,0,0},res[1]); cur=k;cnt=n-1; rec(rec,0,{0,0,1},res[2]); return res; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int ttt; cin>>ttt; while(ttt--){ int n; ll k; cin>>n>>k; vector a(n-1); for(int i=0;i>a[i],a[i]--; auto[s1,s2,s3]=solve(n,k,a); cout<