#include using namespace std; typedef long long ll; typedef __int128 i128; typedef array P3; struct Piece{ i128 a,b,s,c; }; struct Stop{ i128 z,o; int lab; }; struct Res{ bool ok=false; i128 time=0; int lab=0; }; struct Sys{ ll A[3],S,lo[3],hi[3]; i128 off[6],L; void init(const ll*AA,ll SS){ for(int i=0;i<3;i++)A[i]=AA[i]; S=SS; for(int k=0;k<3;k++){lo[k]=max(0LL,S-A[(k+1)%3]-A[(k+2)%3]);hi[k]=min(A[k],S);} i128 p=0; for(int k=0;k<3;k++)for(int j=0;j<2;j++){ if(hi[k]-lo[k]>0){off[k*2+j]=p;p+=hi[k]-lo[k];} else off[k*2+j]=-1;} L=p; } i128 pos(int k,int sg,i128 v){return off[k*2+(sg==1?0:1)]+(sg==1?v-lo[k]:hi[k]-v);} }; Res better(const Res&x,const Res&y){ if(!x.ok)return y; if(!y.ok)return x; if(x.time!=y.time)return x.time pc; vector st; ll S=sy.S; for(int k=0;k<3;k++)for(int j=0;j<2;j++){ int sg=j==0?1:-1; if(sy.off[k*2+j]<0)continue; i128 o=sy.off[k*2+j]; ll lo=sy.lo[k],hi=sy.hi[k]; i128 ln=hi-lo; ll t=S-sy.A[(k+2)%3], tc=min(max(t,lo),hi); int k1=(k+1)%3,k2=(k+2)%3; i128 ra0,ra1,rb0,rb1; ll vA,vB; if(sg==1){ra0=o;ra1=o+(tc-lo);rb0=ra1;rb1=o+ln;vA=lo;vB=tc;} else{rb0=o;rb1=o+(hi-tc);ra0=rb1;ra1=o+ln;vA=tc;vB=hi;} if(ra1>ra0)pc.push_back({ra0,ra1,sy.pos(k1,-sg,(i128)t-vA)-sy.pos(k,sg,vA),1}); if(rb1>rb0)pc.push_back({rb0,rb1,sy.pos(k2,-sg,(i128)S-vB)-sy.pos(k,sg,vB),1}); if(lo=0){st.push_back({sy.pos(tk,1,tv),0,-1});st.push_back({sy.pos(tk,-1,tv),0,-1});} for(auto&s:st)if(s.z==u&&s.lab>=0){Res r;r.ok=true;r.lab=s.lab;return r;} Res best; vector> dropped; bool haveP=false; i128 P=0; auto H=[&](i128 t,int lab){Res r;r.ok=true;r.time=t;r.lab=lab;best=better(best,r);}; i128 lam=sy.L; while(lam>0){ if(st.empty()&&(dropped.empty()||haveP))break; int ai=-1,bi=-1; for(int i=0;i<(int)pc.size();i++){if(pc[i].b==lam)ai=i;if(pc[i].b+pc[i].s==lam)bi=i;} i128 la=pc[ai].b-pc[ai].a, lb=pc[bi].b-pc[bi].a; if(ai==bi){ if(pc[ai].a<=u){haveP=true;P=pc[ai].c;break;} i128 a0=pc[ai].a; vector ns; for(auto&s:st)if(s.z ns; if(la>lb){ Piece al=pc[ai]; i128 aend=al.b+al.s,LR=0; for(auto&q:pc)if(q.a+q.s>=aend)LR+=q.b-q.a; i128 q=(la-1)/LR, ca=al.c; if(q>=1){ i128 nl=lam-q*LR, step=LR; auto push=[&](i128 z,i128&m){m=(z-nl)/step+1;return z-m*step;}; bool uc=u>=nl; i128 uf=0,mu=0; if(uc)uf=push(u,mu); for(auto&s:st){ if(s.z>=nl){ i128 mz,zf=push(s.z,mz); if(uc&&((u-s.z)%step+step)%step==0){ if(s.z=aend){p.s-=q*LR;p.c+=q*ca;} lam=nl; } else { i128 nl=lam-lb, sa=al.s; bool uc=u>=nl; i128 uf=u+sa; for(auto&s:st){ if(s.z>=nl){ i128 zf=s.z+sa; if(!uc&&zf==u){dropped.push_back({tau-(s.o+ca),s.lab});continue;} ns.push_back({zf,s.o+ca,s.lab}); } else { if(uc&&s.z==uf){H(tau+ca-s.o,s.lab);continue;} ns.push_back(s); } } if(uc){u=uf;tau+=ca;} pc[ai].b=nl; pc[bi].s+=sa; pc[bi].c+=ca; lam=nl; } } else { i128 bend=pc[bi].b,LD=0; vector D; for(int i=0;i<(int)pc.size();i++)if(pc[i].a>=bend){D.push_back(i);LD+=pc[i].b-pc[i].a;} i128 q=la=1){ i128 nl=lam-q*LD, cb=pc[bi].c; auto push=[&](i128 z,i128&cost){ i128 m=z>=lam-LD?0:(lam-LD-z+LD-1)/LD, x=z+m*LD; for(int i:D)if(pc[i].a<=x&&x=nl; i128 uf=0,cu=0; if(uc)uf=push(u,cu); for(auto&s:st){ if(s.z>=nl){ i128 cz,zf=push(s.z,cz); if(uc&&zf==uf){ if(s.z>u)H(tau+cu-(s.o+cz),s.lab); else dropped.push_back({tau+cu-(s.o+cz),s.lab}); continue;} if(!uc&&zf==u){dropped.push_back({tau-(s.o+cz),s.lab});continue;} ns.push_back({zf,s.o+cz,s.lab}); } else { if(uc&&s.z==uf){H(tau+cu-s.o,s.lab);continue;} ns.push_back(s); } } if(uc){u=uf;tau+=cu;} pc[bi].b-=q*LD; for(int i:D){pc[i].a-=q*LD;pc[i].b-=q*LD;pc[i].s+=q*LD;pc[i].c+=q*cb;} lam=nl; } else { Piece al=pc[ai]; i128 nl=lam-la, sa=al.s, ca=al.c; bool uc=u>=nl; i128 uf=u+sa; for(auto&s:st){ if(s.z>=nl){ i128 zf=s.z+sa; if(!uc&&zf==u){dropped.push_back({tau-(s.o+ca),s.lab});continue;} ns.push_back({zf,s.o+ca,s.lab}); } else { if(uc&&s.z==uf){H(tau+ca-s.o,s.lab);continue;} ns.push_back(s); } } if(uc){u=uf;tau+=ca;} if(la==lb){pc[bi].s+=sa;pc[bi].c+=ca;pc.erase(pc.begin()+ai);} else{ Piece b2{pc[bi].b-la,pc[bi].b,pc[bi].s+sa,pc[bi].c+ca}; pc[bi].b-=la; pc.erase(pc.begin()+ai); pc.push_back(b2); } lam=nl; } } st=ns; } if(haveP)for(auto&d:dropped)H(P+d.first,d.second); return best; } P3 perm(const P3&x){return {x[0],x[2],x[1]};} int nextra(const P3&A,const P3&p){int c=0;for(int i=0;i<3;i++)if(p[i]==0||p[i]==A[i])c++;return c;} pair fstate(const P3&A,const P3&p){ for(int t=0;t<3;t++){ if(p[t]==0){int k=(t+1)%3;return {k,p[k]};} if(p[t]==A[t]){int k=(t+2)%3;return {k,p[k]};} } return {-1,0}; } ll solve(P3 A,P3 B,P3 C){ if(B==C)return 0; int ex=nextra(A,C); if(ex==0)return -1; ll S=B[0]+B[1]+B[2]; map dist; deque dq; dist[B]=0; dq.push_back(B); while(!dq.empty()){ P3 p=dq.front();dq.pop_front(); int d=dist[p]; if(d>=7)continue; for(int i=0;i<3;i++)for(int j=0;j<3;j++)if(i!=j){ ll m=min(p[i],A[j]-p[j]); if(m<=0)continue; P3 q=p; q[i]-=m; q[j]+=m; if(!dist.count(q)){dist[q]=d+1;dq.push_back(q);} } } const i128 INF=(i128)1<<120; i128 best=INF; if(dist.count(C))best=dist[C]; if(ex>=2)return best==INF?-1:(ll)best; P3 Ap=perm(A); Sys sy,sr; sy.init(A.data(),S); sr.init(Ap.data(),S); auto sC=fstate(A,C); auto sCr=fstate(Ap,perm(C)); for(int r=0;r<2;r++){ Sys&y=r?sr:sy; auto s=r?sCr:sC; const P3&AA=r?Ap:A; Res res=run(y,s.first,s.second,-1,0); if(res.ok&&res.lab>=0){ int k=res.lab; P3 V; V[k]=S-AA[(k+2)%3]; V[(k+2)%3]=AA[(k+2)%3]; V[(k+1)%3]=0; if(r)V=perm(V); if(dist.count(V))best=min(best,(i128)dist[V]+res.time+1); } } int exB=nextra(A,B); if(exB==1){ auto sB=fstate(A,B); Res r1=run(sy,sB.first,sB.second,sC.first,sC.second); if(r1.ok&&r1.lab==-1)best=min(best,r1.time); auto sBr=fstate(Ap,perm(B)); Res r2=run(sr,sBr.first,sBr.second,sCr.first,sCr.second); if(r2.ok&&r2.lab==-1)best=min(best,r2.time); } else if(exB==0){ for(int k=0;k<3;k++){ if(!(k==sC.first&&B[k]==sC.second)){ Res r1=run(sy,k,B[k],sC.first,sC.second); if(r1.ok&&r1.lab==-1)best=min(best,r1.time); } ll w=S-B[k]; P3 Pp; Pp[k]=B[k]; Pp[(k+1)%3]=min(A[(k+1)%3],w); Pp[(k+2)%3]=w-Pp[(k+1)%3]; if(Pp==C)best=min(best,(i128)1); else if(nextra(A,Pp)==1){ auto sp=fstate(Ap,perm(Pp)); Res r2=run(sr,sp.first,sp.second,sCr.first,sCr.second); if(r2.ok&&r2.lab==-1)best=min(best,1+r2.time); } } } return best==INF?-1:(ll)best; } int main(){ int T; if(scanf("%d",&T)!=1)return 0; string out; while(T--){ P3 A,B,C; for(auto&x:A)if(scanf("%lld",&x)!=1)return 0; for(auto&x:B)if(scanf("%lld",&x)!=1)return 0; for(auto&x:C)if(scanf("%lld",&x)!=1)return 0; out+=to_string(solve(A,B,C)); out+='\n'; } fputs(out.c_str(),stdout); }