e:(,0N)!,!0 ch:{$[z~r:c@*y@x[1] c:x[0;z],z;0N;r]} / (lf;rg):ch[(^'[;?p]@=p;n)]@/:(<:;>:) btm:{*|(~^*:){x[y],y:*y}[x]/(y,0N)} / nxt:btm[lf]rg@ gt:{[p;n]{z,,/o[x;y]'@/1(\:*bal[x;i:*y]}[x](1_)/y]} reb:noreb / x:(d;p;n;h) y:item z:roots -> insertion index insi:{$[(l:y:) x:@[x;2;:;@[x 2;i;:;x[2]@|i:y,s:btm[lf]rg y]] x:@[x;0;:;@[@[x 0;x[1]y;,;y];x[1]s;^;s]] (del0;del1)[#x[0;s]][x;s]} del:{x:@[x;0;:;@[x 0;x[1]y;^;y]] x:(del0;del1;del2)[#x[0;y]][x;y] x:@[x;1+!3;:;(-+/d)_/:((x 1] @[x;0;:;(!/(\:*b:bal[x;y];:x;] (lf;rg):ch[x 0 2]@/:(<:;>:); $[~h=/1 0=00]y] (c;x):(is[1];rot0[x;is:{y x}\c,(lf;rg)@1~:\~h]);] $[~y;(x;y):(swp[x;y,c];c);] rot0[x;{y x}\y,ch[x 0 2]@/:(<:;>:)@1~:\h]} bal:{-/+(-1^x[3]@cd@!2;x[2]@y,*cd:x[0;y]^y)} / bal[bst;ix;] -> (heavy;side)