\d d \l s disp:{[t]:[A~*t;tree . 1_ t;data t]} F_:(C;O;L;R;L_;R_;I;H;T) D_:(";";"cond";"{";"}";"{:";"}:";"::";"hd";"tl") data:{[t]:[(#F_)>i:F_?t;"",D_ i;"{"=*r:5:t;,"Z";r]} tree:{[b;c] if[vb:-3=4:b:disp b;b,:] if[vc:-3=4:c:disp c;c,:] sb:^b sc:^c r:*sb|sc b:take[r;sb]b c:take[r;sc]c apply[vb;vc;sb 1;1+sc 1;b]" ",'c} take:{[r;s;m]m,((r-*s),s 1)#""} apply:{[vb;vc;cb;cc;b;c] V:_ci 179 H:_ci 196 L:_ci 218 R:_ci 191 A:_ci 223 ib::[vb;_.5*cb;(A=*b)?1] ic::[vc;_.5*cc;(A=*c)?1] b:(,@[cb#"";ib;:;V]),b c:(,@[cc#"";ic;:;V]),c j:ib+!1+(cb+ic)-ib r:@[(cb+cc)#"";j;:;H] r[j[0],-1#j]:L,R r:@[r;j[0]+_.5*j[-1+#j]-*j;:;A] (,r),b,'c} rep:{[t]:[A~*t;arg . 1_ t;4:t;" ",data t;list t]} list:{[t]1!"][",1_,/";",'rep't} sqz:{_ssr/[x;("( ";" (";" )";") ");"(())"]} arg:{[l;r]:[I~l;rep r;sqz{x,:[A~*r;1!")(",;::]y}. rep'(l;r)]} \d ^ disp:`0:d.disp@ rep:d.rep