data-structure-typed 1.47.9 → 1.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +33 -32
  3. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +6 -0
  4. package/dist/cjs/data-structures/binary-tree/avl-tree.js +8 -0
  5. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  6. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +14 -0
  7. package/dist/cjs/data-structures/binary-tree/binary-tree.js +52 -28
  8. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  9. package/dist/cjs/data-structures/binary-tree/bst.d.ts +13 -0
  10. package/dist/cjs/data-structures/binary-tree/bst.js +41 -21
  11. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  12. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +16 -0
  13. package/dist/cjs/data-structures/binary-tree/rb-tree.js +54 -31
  14. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  15. package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +16 -0
  16. package/dist/cjs/data-structures/binary-tree/tree-multimap.js +44 -21
  17. package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
  18. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +6 -0
  19. package/dist/mjs/data-structures/binary-tree/avl-tree.js +8 -0
  20. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +14 -0
  21. package/dist/mjs/data-structures/binary-tree/binary-tree.js +52 -28
  22. package/dist/mjs/data-structures/binary-tree/bst.d.ts +13 -0
  23. package/dist/mjs/data-structures/binary-tree/bst.js +41 -21
  24. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +16 -0
  25. package/dist/mjs/data-structures/binary-tree/rb-tree.js +54 -31
  26. package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +16 -0
  27. package/dist/mjs/data-structures/binary-tree/tree-multimap.js +44 -21
  28. package/dist/umd/data-structure-typed.js +186 -89
  29. package/dist/umd/data-structure-typed.min.js +2 -2
  30. package/dist/umd/data-structure-typed.min.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/data-structures/binary-tree/avl-tree.ts +9 -0
  33. package/src/data-structures/binary-tree/binary-tree.ts +47 -23
  34. package/src/data-structures/binary-tree/bst.ts +38 -19
  35. package/src/data-structures/binary-tree/rb-tree.ts +55 -31
  36. package/src/data-structures/binary-tree/tree-multimap.ts +42 -17
@@ -1,7 +1,7 @@
1
- "use strict";var dataStructureTyped=(()=>{var se=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames,Qe=Object.getOwnPropertySymbols;var Xe=Object.prototype.hasOwnProperty,$e=Object.prototype.propertyIsEnumerable;var Ne=(l,t)=>{if(t=Symbol[l])return t;throw Error("Symbol."+l+" is not defined")};var Te=(l,t,e)=>t in l?se(l,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):l[t]=e,C=(l,t)=>{for(var e in t||(t={}))Xe.call(t,e)&&Te(l,e,t[e]);if(Qe)for(var e of Qe(t))$e.call(t,e)&&Te(l,e,t[e]);return l};var et=(l,t)=>{for(var e in t)se(l,e,{get:t[e],enumerable:!0})},tt=(l,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ze(t))!Xe.call(l,i)&&i!==e&&se(l,i,{get:()=>t[i],enumerable:!(r=Je(t,i))||r.enumerable});return l};var rt=l=>tt(se({},"__esModule",{value:!0}),l);var d=(l,t,e)=>(Te(l,typeof t!="symbol"?t+"":t,e),e);var Ye=(l,t,e)=>new Promise((r,i)=>{var n=a=>{try{o(e.next(a))}catch(h){i(h)}},s=a=>{try{o(e.throw(a))}catch(h){i(h)}},o=a=>a.done?r(a.value):Promise.resolve(a.value).then(n,s);o((e=e.apply(l,t)).next())}),it=function(l,t){this[0]=l,this[1]=t};var q=l=>{var t=l[Ne("asyncIterator")],e=!1,r,i={};return t==null?(t=l[Ne("iterator")](),r=n=>i[n]=s=>t[n](s)):(t=t.call(l),r=n=>i[n]=s=>{if(e){if(e=!1,n==="throw")throw s;return s}return e=!0,{done:!1,value:new it(new Promise(o=>{var a=t[n](s);if(!(a instanceof Object))throw TypeError("Object expected");o(a)}),1)}}),i[Ne("iterator")]=()=>i,r("next"),"throw"in t?r("throw"):i.throw=n=>{throw n},"return"in t&&r("return"),i};var ot={};et(ot,{AVLTree:()=>te,AVLTreeNode:()=>P,AbstractEdge:()=>D,AbstractGraph:()=>F,AbstractVertex:()=>B,BST:()=>H,BSTNode:()=>z,BinaryIndexedTree:()=>Fe,BinaryTree:()=>ee,BinaryTreeNode:()=>k,CP:()=>De,Character:()=>pe,Deque:()=>ve,DirectedEdge:()=>j,DirectedGraph:()=>Z,DirectedVertex:()=>A,DoublyLinkedList:()=>Ve,DoublyLinkedListNode:()=>K,FamilyPosition:()=>ce,FibonacciHeap:()=>we,FibonacciHeapNode:()=>he,HashMap:()=>xe,HashTable:()=>me,HashTableNode:()=>Q,Heap:()=>L,IterationType:()=>$,LinkedListQueue:()=>Oe,MapEdge:()=>fe,MapGraph:()=>Ie,MapVertex:()=>ue,Matrix2D:()=>Ue,MatrixNTI2D:()=>je,MaxHeap:()=>Ke,MaxPriorityQueue:()=>Me,MinHeap:()=>Re,MinPriorityQueue:()=>Se,Navigator:()=>Ge,ObjectDeque:()=>Ce,PriorityQueue:()=>I,Queue:()=>O,RBTNColor:()=>ze,RedBlackTree:()=>He,RedBlackTreeNode:()=>G,SegmentTree:()=>Ae,SegmentTreeNode:()=>U,SinglyLinkedList:()=>Y,SinglyLinkedListNode:()=>w,SkipList:()=>Be,SkipListNode:()=>J,Stack:()=>ke,THUNK_SYMBOL:()=>ye,TreeMultimap:()=>Pe,TreeMultimapNode:()=>re,TreeNode:()=>qe,Trie:()=>We,TrieNode:()=>ie,UndirectedEdge:()=>de,UndirectedGraph:()=>Le,UndirectedVertex:()=>le,Vector2D:()=>W,arrayRemove:()=>S,calcMinUnitsRequired:()=>ae,getMSB:()=>Ee,isThunk:()=>be,isWeakKey:()=>X,rangeCheck:()=>M,throwRangeError:()=>st,toThunk:()=>_e,trampoline:()=>oe,trampolineAsync:()=>nt,uuidV4:()=>ge});var Q=class{constructor(t,e){d(this,"key");d(this,"value");d(this,"next");this.key=t,this.value=e,this.next=void 0}},R=class R{constructor(t=R.DEFAULT_CAPACITY,e){d(this,"_capacity");d(this,"_size");d(this,"_buckets");d(this,"_hashFn");this._hashFn=e||this._defaultHashFn,this._capacity=Math.max(t,R.DEFAULT_CAPACITY),this._size=0,this._buckets=new Array(this._capacity).fill(void 0)}get capacity(){return this._capacity}get size(){return this._size}get buckets(){return this._buckets}get hashFn(){return this._hashFn}set(t,e){let r=this._hash(t),i=new Q(t,e);if(!this._buckets[r])this._buckets[r]=i;else{let n=this._buckets[r];for(;n;){if(n.key===t){n.value=e;return}if(!n.next)break;n=n.next}n.next=i}this._size++,this._size/this._capacity>=R.LOAD_FACTOR&&this._expand()}get(t){let e=this._hash(t),r=this._buckets[e];for(;r;){if(r.key===t)return r.value;r=r.next}}delete(t){let e=this._hash(t),r=this._buckets[e],i;for(;r;){if(r.key===t){i?i.next=r.next:this._buckets[e]=r.next,this._size--,r.next=void 0;return}i=r,r=r.next}}*[Symbol.iterator](){for(let t of this._buckets){let e=t;for(;e;)yield[e.key,e.value],e=e.next}}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new R,r=0;for(let[i,n]of this)t([i,n],r,this)&&e.set(i,n),r++;return e}map(t){let e=new R,r=0;for(let[i,n]of this)e.set(i,t([i,n],r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}_defaultHashFn(t){return(typeof t=="string"?this._murmurStringHashFn(t):this._objectHash(t))%this._capacity}_multiplicativeStringHashFn(t){let e=String(t),r=0;for(let i=0;i<e.length;i++){let n=e.charCodeAt(i),s=.618033988749895,o=1<<30;r=(r*s+n)%o}return Math.abs(r)}_murmurStringHashFn(t){let e=String(t),i=0;for(let n=0;n<e.length;n++){let s=e.charCodeAt(n);i=(i^s)*1540483477,i=(i^i>>>15)*668265261,i=i^i>>>15}return Math.abs(i)}_hash(t){return this.hashFn(t)}_stringHash(t){let e=0;for(let r=0;r<t.length;r++)e=e*31+t.charCodeAt(r)&4294967295;return e}_objectHash(t){return this._stringHash(JSON.stringify(t))}_expand(){let t=this._capacity*2,e=new Array(t).fill(void 0);for(let r of this._buckets){let i=r;for(;i;){let n=this._hash(i.key),s=new Q(i.key,i.value);if(!e[n])e[n]=s;else{let o=e[n];for(;o.next;)o=o.next;o.next=s}i=i.next}}this._buckets=e,this._capacity=t}};d(R,"DEFAULT_CAPACITY",16),d(R,"LOAD_FACTOR",.75);var me=R;var ge=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(l){let t=Math.random()*16|0;return(l=="x"?t:t&3|8).toString(16)})},S=function(l,t){let e=-1,r=l?l.length:0,i=[];for(;++e<r;){let n=l[e];t(n,e,l)&&(i.push(n),Array.prototype.splice.call(l,e--,1),r--)}return i},ye=Symbol("thunk"),be=l=>typeof l=="function"&&l.__THUNK__===ye,_e=l=>{let t=()=>l();return t.__THUNK__=ye,t},oe=l=>Object.assign((...e)=>{let r=l(...e);for(;be(r)&&typeof r=="function";)r=r();return r},{cont:(...e)=>_e(()=>l(...e))}),nt=l=>Object.assign((...e)=>Ye(void 0,null,function*(){let r=yield l(...e);for(;be(r)&&typeof r=="function";)r=yield r();return r}),{cont:(...e)=>_e(()=>l(...e))}),Ee=l=>l<=0?0:1<<31-Math.clz32(l),M=(l,t,e,r="Index out of bounds.")=>{if(l<t||l>e)throw new RangeError(r)},st=(l="The value is off-limits.")=>{throw new RangeError(l)},X=l=>{let t=typeof l;return t==="object"&&l!==null||t==="function"},ae=(l,t)=>Math.floor((l+t-1)/t);var xe=class l{constructor(t,e={hashFn:r=>String(r),objHashFn:r=>r}){d(this,"_noObjMap",{});d(this,"_objMap",new WeakMap);d(this,"_head");d(this,"_tail");d(this,"_sentinel");d(this,"_hashFn");d(this,"_objHashFn");d(this,"_size",0);this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel;let{hashFn:r,objHashFn:i}=e;if(this._hashFn=r,this._objHashFn=i,t)for(let n of t)this.set(n[0],n[1])}get size(){return this._size}get first(){if(this._size!==0)return[this._head.key,this._head.value]}get last(){if(this._size!==0)return[this._tail.key,this._tail.value]}*begin(){let t=this._head;for(;t!==this._sentinel;)yield[t.key,t.value],t=t.next}*reverseBegin(){let t=this._tail;for(;t!==this._sentinel;)yield[t.key,t.value],t=t.prev}set(t,e){let r;if(X(t)){let i=this._objHashFn(t);r=this._objMap.get(i),r?r.value=e:(r={key:i,value:e,prev:this._tail,next:this._sentinel},this._objMap.set(i,r))}else{let i=this._hashFn(t);r=this._noObjMap[i],r?r.value=e:this._noObjMap[i]=r={key:t,value:e,prev:this._tail,next:this._sentinel}}return this._size===0?(this._head=r,this._sentinel.next=r):this._tail.next=r,this._tail=r,this._sentinel.prev=r,this._size++,this._size}get(t){if(X(t)){let e=this._objHashFn(t),r=this._objMap.get(e);return r?r.value:void 0}else{let e=this._hashFn(t),r=this._noObjMap[e];return r?r.value:void 0}}getAt(t){M(t,0,this._size-1);let e=this._head;for(;t--;)e=e.next;return[e.key,e.value]}delete(t){let e;if(X(t)){let r=this._objHashFn(t);if(e=this._objMap.get(r),!e)return!1;this._objMap.delete(r)}else{let r=this._hashFn(t);if(e=this._noObjMap[r],!e)return!1;delete this._noObjMap[r]}return this._deleteNode(e),!0}deleteAt(t){M(t,0,this._size-1);let e=this._head;for(;t--;)e=e.next;return this._deleteNode(e),this._size}isEmpty(){return this._size===0}clear(){this._noObjMap={},this._size=0,this._head=this._tail=this._sentinel.prev=this._sentinel.next=this._sentinel}forEach(t){let e=0,r=this._head;for(;r!==this._sentinel;)t([r.key,r.value],e++,this),r=r.next}filter(t){let e=new l,r=0;for(let[i,n]of this)t([i,n],r,this)&&e.set(i,n),r++;return e}map(t){let e=new l,r=0;for(let[i,n]of this){let s=t([i,n],r,this);e.set(i,s),r++}return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}*[Symbol.iterator](){let t=this._head;for(;t!==this._sentinel;)yield[t.key,t.value],t=t.next}print(){console.log([...this])}_deleteNode(t){let{prev:e,next:r}=t;e.next=r,r.prev=e,t===this._head&&(this._head=r),t===this._tail&&(this._tail=e),this._size-=1}};var w=class{constructor(t){d(this,"value");d(this,"next");this.value=t,this.next=void 0}},Y=class l{constructor(t){d(this,"_head");d(this,"_tail");d(this,"_length");if(this._head=void 0,this._tail=void 0,this._length=0,t)for(let e of t)this.push(e)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}static fromArray(t){let e=new l;for(let r of t)e.push(r);return e}push(t){let e=new w(t);this.head?(this.tail.next=e,this._tail=e):(this._head=e,this._tail=e),this._length++}addLast(t){this.push(t)}pop(){if(!this.head)return;if(this.head===this.tail){let r=this.head.value;return this._head=void 0,this._tail=void 0,this._length--,r}let t=this.head;for(;t.next!==this.tail;)t=t.next;let e=this.tail.value;return t.next=void 0,this._tail=t,this._length--,e}popLast(){return this.pop()}shift(){if(!this.head)return;let t=this.head;return this._head=this.head.next,this._length--,t.value}popFirst(){return this.shift()}unshift(t){let e=new w(t);this.head?(e.next=this.head,this._head=e):(this._head=e,this._tail=e),this._length++}addFirst(t){this.unshift(t)}getAt(t){if(t<0||t>=this.length)return;let e=this.head;for(let r=0;r<t;r++)e=e.next;return e.value}getNodeAt(t){let e=this.head;for(let r=0;r<t;r++)e=e.next;return e}deleteAt(t){if(t<0||t>=this.length)return;if(t===0)return this.shift();if(t===this.length-1)return this.pop();let e=this.getNodeAt(t-1),r=e.next;return e.next=r.next,this._length--,r.value}delete(t){if(!t)return!1;let e;t instanceof w?e=t.value:e=t;let r=this.head,i;for(;r;){if(r.value===e)return i===void 0?(this._head=r.next,r===this.tail&&(this._tail=void 0)):(i.next=r.next,r===this.tail&&(this._tail=i)),this._length--,!0;i=r,r=r.next}return!1}insertAt(t,e){if(t<0||t>this.length)return!1;if(t===0)return this.unshift(e),!0;if(t===this.length)return this.push(e),!0;let r=new w(e),i=this.getNodeAt(t-1);return r.next=i.next,i.next=r,this._length++,!0}isEmpty(){return this.length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}toArray(){let t=[],e=this.head;for(;e;)t.push(e.value),e=e.next;return t}reverse(){if(!this.head||this.head===this.tail)return;let t,e=this.head,r;for(;e;)r=e.next,e.next=t,t=e,e=r;[this._head,this._tail]=[this.tail,this.head]}find(t){let e=this.head;for(;e;){if(t(e.value))return e.value;e=e.next}}indexOf(t){let e=0,r=this.head;for(;r;){if(r.value===t)return e;e++,r=r.next}return-1}getNode(t){let e=this.head;for(;e;){if(e.value===t)return e;e=e.next}}insertBefore(t,e){if(!this.head)return!1;let r;if(t instanceof w?r=t.value:r=t,this.head.value===r)return this.unshift(e),!0;let i=this.head;for(;i.next;){if(i.next.value===r){let n=new w(e);return n.next=i.next,i.next=n,this._length++,!0}i=i.next}return!1}insertAfter(t,e){let r;if(t instanceof w?r=t:r=this.getNode(t),r){let i=new w(e);return i.next=r.next,r.next=i,r===this.tail&&(this._tail=i),this._length++,!0}return!1}countOccurrences(t){let e=0,r=this.head;for(;r;)r.value===t&&e++,r=r.next;return e}*[Symbol.iterator](){let t=this.head;for(;t;)yield t.value,t=t.next}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new l,r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new l,r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}};var K=class{constructor(t){d(this,"value");d(this,"next");d(this,"prev");this.value=t,this.next=void 0,this.prev=void 0}},Ve=class l{constructor(t){d(this,"_head");d(this,"_tail");d(this,"_length");if(this._head=void 0,this._tail=void 0,this._length=0,t)for(let e of t)this.push(e)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}get size(){return this.length}static fromArray(t){let e=new l;for(let r of t)e.push(r);return e}push(t){let e=new K(t);this.head?(e.prev=this.tail,this.tail.next=e,this._tail=e):(this._head=e,this._tail=e),this._length++}addLast(t){this.push(t)}pop(){if(!this.tail)return;let t=this.tail;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._tail=t.prev,this.tail.next=void 0),this._length--,t.value}popLast(){return this.pop()}shift(){if(!this.head)return;let t=this.head;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._head=t.next,this.head.prev=void 0),this._length--,t.value}popFirst(){return this.shift()}unshift(t){let e=new K(t);this.head?(e.next=this.head,this.head.prev=e,this._head=e):(this._head=e,this._tail=e),this._length++}addFirst(t){this.unshift(t)}getFirst(){var t;return(t=this.head)==null?void 0:t.value}getLast(){var t;return(t=this.tail)==null?void 0:t.value}getAt(t){if(t<0||t>=this.length)return;let e=this.head;for(let r=0;r<t;r++)e=e.next;return e.value}getNodeAt(t){if(t<0||t>=this.length)return;let e=this.head;for(let r=0;r<t;r++)e=e.next;return e}getNode(t){let e=this.head;for(;e;){if(e.value===t)return e;e=e.next}}insertAt(t,e){if(t<0||t>this.length)return!1;if(t===0)return this.unshift(e),!0;if(t===this.length)return this.push(e),!0;let r=new K(e),i=this.getNodeAt(t-1),n=i.next;return r.prev=i,r.next=n,i.next=r,n.prev=r,this._length++,!0}insertBefore(t,e){let r;if(t instanceof K?r=t:r=this.getNode(t),r){let i=new K(e);return i.prev=r.prev,r.prev&&(r.prev.next=i),i.next=r,r.prev=i,r===this.head&&(this._head=i),this._length++,!0}return!1}insertAfter(t,e){let r;if(t instanceof K?r=t:r=this.getNode(t),r){let i=new K(e);return i.next=r.next,r.next&&(r.next.prev=i),i.prev=r,r.next=i,r===this.tail&&(this._tail=i),this._length++,!0}return!1}deleteAt(t){if(t<0||t>=this.length)return;if(t===0)return this.shift();if(t===this.length-1)return this.pop();let e=this.getNodeAt(t),r=e.prev,i=e.next;return r.next=i,i.prev=r,this._length--,e.value}delete(t){let e;if(t instanceof K?e=t:e=this.getNode(t),e){if(e===this.head)this.shift();else if(e===this.tail)this.pop();else{let r=e.prev,i=e.next;r.next=i,i.prev=r,this._length--}return!0}return!1}isEmpty(){return this.length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}find(t){let e=this.head;for(;e;){if(t(e.value))return e.value;e=e.next}}indexOf(t){let e=0,r=this.head;for(;r;){if(r.value===t)return e;e++,r=r.next}return-1}findBackward(t){let e=this.tail;for(;e;){if(t(e.value))return e.value;e=e.prev}}reverse(){let t=this.head;for([this._head,this._tail]=[this.tail,this.head];t;){let e=t.next;[t.prev,t.next]=[t.next,t.prev],t=e}}toArray(){let t=[],e=this.head;for(;e;)t.push(e.value),e=e.next;return t}toReversedArray(){let t=[],e=this.tail;for(;e;)t.push(e.value),e=e.prev;return t}*[Symbol.iterator](){let t=this.head;for(;t;)yield t.value,t=t.next}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new l,r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new l,r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}};var J=class{constructor(t,e,r){d(this,"key");d(this,"value");d(this,"forward");this.key=t,this.value=e,this.forward=new Array(r)}},Be=class{constructor(t=16,e=.5){d(this,"_head");d(this,"_level");d(this,"_maxLevel");d(this,"_probability");this._head=new J(void 0,void 0,t),this._level=0,this._maxLevel=t,this._probability=e}get head(){return this._head}get level(){return this._level}get maxLevel(){return this._maxLevel}get probability(){return this._probability}add(t,e){let r=new J(t,e,this._randomLevel()),i=new Array(this.maxLevel).fill(this.head),n=this.head;for(let s=this.level-1;s>=0;s--){for(;n.forward[s]&&n.forward[s].key<t;)n=n.forward[s];i[s]=n}for(let s=0;s<r.forward.length;s++)r.forward[s]=i[s].forward[s],i[s].forward[s]=r;r.forward[0]||(this._level=Math.max(this.level,r.forward.length))}get(t){let e=this.head;for(let r=this.level-1;r>=0;r--)for(;e.forward[r]&&e.forward[r].key<t;)e=e.forward[r];if(e=e.forward[0],e&&e.key===t)return e.value}has(t){return this.get(t)!==void 0}delete(t){let e=new Array(this.maxLevel).fill(this.head),r=this.head;for(let i=this.level-1;i>=0;i--){for(;r.forward[i]&&r.forward[i].key<t;)r=r.forward[i];e[i]=r}if(r=r.forward[0],r&&r.key===t){for(let i=0;i<this.level&&e[i].forward[i]===r;i++)e[i].forward[i]=r.forward[i];for(;this.level>0&&!this.head.forward[this.level-1];)this._level--;return!0}return!1}getFirst(){let t=this.head.forward[0];return t?t.value:void 0}getLast(){let t=this.head;for(let e=this.level-1;e>=0;e--)for(;t.forward[e];)t=t.forward[e];return t.value}higher(t){let e=this.head;for(let i=this.level-1;i>=0;i--)for(;e.forward[i]&&e.forward[i].key<=t;)e=e.forward[i];let r=e.forward[0];return r?r.value:void 0}lower(t){let e=this.head,r;for(let i=this.level-1;i>=0;i--){for(;e.forward[i]&&e.forward[i].key<t;)e=e.forward[i];e.key<t&&(r=e)}return r?r.value:void 0}_randomLevel(){let t=1;for(;Math.random()<this.probability&&t<this.maxLevel;)t++;return t}};var ke=class l{constructor(t){d(this,"_elements");if(this._elements=[],t)for(let e of t)this.push(e)}get elements(){return this._elements}get size(){return this.elements.length}static fromArray(t){return new l(t)}isEmpty(){return this.elements.length===0}peek(){if(!this.isEmpty())return this.elements[this.elements.length-1]}push(t){return this.elements.push(t),this}pop(){if(!this.isEmpty())return this.elements.pop()||void 0}toArray(){return this.elements.slice()}clear(){this._elements=[]}clone(){return new l(this.elements.slice())}*[Symbol.iterator](){for(let t=0;t<this.elements.length;t++)yield this.elements[t]}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new l,r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new l,r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}};var Oe=class extends Y{enqueue(t){this.push(t)}dequeue(){return this.shift()}getFirst(){var t;return(t=this.head)==null?void 0:t.value}peek(){return this.getFirst()}},O=class l{constructor(t){d(this,"_nodes");d(this,"_offset");this._nodes=t||[],this._offset=0}get nodes(){return this._nodes}get offset(){return this._offset}get size(){return this.nodes.length-this.offset}static fromArray(t){return new l(t)}push(t){return this.nodes.push(t),this}shift(){if(this.size===0)return;let t=this.getFirst();return this._offset+=1,this.offset*2<this.nodes.length||(this._nodes=this.nodes.slice(this.offset),this._offset=0),t}getFirst(){return this.size>0?this.nodes[this.offset]:void 0}peek(){return this.getFirst()}getLast(){return this.size>0?this.nodes[this.nodes.length-1]:void 0}peekLast(){return this.getLast()}enqueue(t){this.push(t)}dequeue(){return this.shift()}getAt(t){return this.nodes[t]}isEmpty(){return this.size===0}toArray(){return this.nodes.slice(this.offset)}clear(){this._nodes=[],this._offset=0}clone(){return new l(this.nodes.slice(this.offset))}print(){console.log([...this])}*[Symbol.iterator](){for(let t of this.nodes)yield t}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new l([]),r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new l([]),r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}};var ve=class l{constructor(t=[],e=4096){d(this,"_bucketFirst",0);d(this,"_firstInBucket",0);d(this,"_bucketLast",0);d(this,"_lastInBucket",0);d(this,"_bucketCount",0);d(this,"_bucketSize");d(this,"_buckets",[]);d(this,"_size",0);let r;"length"in t?t.length instanceof Function?r=t.length():r=t.length:t.size instanceof Function?r=t.size():r=t.size,this._bucketSize=e,this._bucketCount=ae(r,this._bucketSize)||1;for(let n=0;n<this._bucketCount;++n)this._buckets.push(new Array(this._bucketSize));let i=ae(r,this._bucketSize);this._bucketFirst=this._bucketLast=(this._bucketCount>>1)-(i>>1),this._firstInBucket=this._lastInBucket=this._bucketSize-r%this._bucketSize>>1;for(let n of t)this.push(n)}get buckets(){return this._buckets}get size(){return this._size}get first(){if(this.size!==0)return this._buckets[this._bucketFirst][this._firstInBucket]}get last(){if(this.size!==0)return this._buckets[this._bucketLast][this._lastInBucket]}isEmpty(){return this.size===0}addLast(t){this.push(t)}popLast(){return this.pop()}addFirst(t){this.unshift(t)}popFirst(){return this.shift()}clear(){this._buckets=[new Array(this._bucketSize)],this._bucketCount=1,this._bucketFirst=this._bucketLast=this._size=0,this._firstInBucket=this._lastInBucket=this._bucketSize>>1}*begin(){let t=0;for(;t<this.size;)yield this.getAt(t),t++}*reverseBegin(){let t=this.size-1;for(;t>=0;)yield this.getAt(t),t--}push(t){return this.size&&(this._lastInBucket<this._bucketSize-1?this._lastInBucket+=1:this._bucketLast<this._bucketCount-1?(this._bucketLast+=1,this._lastInBucket=0):(this._bucketLast=0,this._lastInBucket=0),this._bucketLast===this._bucketFirst&&this._lastInBucket===this._firstInBucket&&this._reallocate()),this._size+=1,this._buckets[this._bucketLast][this._lastInBucket]=t,this.size}pop(){if(this.size===0)return;let t=this._buckets[this._bucketLast][this._lastInBucket];return this.size!==1&&(this._lastInBucket>0?this._lastInBucket-=1:this._bucketLast>0?(this._bucketLast-=1,this._lastInBucket=this._bucketSize-1):(this._bucketLast=this._bucketCount-1,this._lastInBucket=this._bucketSize-1)),this._size-=1,t}unshift(t){return this.size&&(this._firstInBucket>0?this._firstInBucket-=1:this._bucketFirst>0?(this._bucketFirst-=1,this._firstInBucket=this._bucketSize-1):(this._bucketFirst=this._bucketCount-1,this._firstInBucket=this._bucketSize-1),this._bucketFirst===this._bucketLast&&this._firstInBucket===this._lastInBucket&&this._reallocate()),this._size+=1,this._buckets[this._bucketFirst][this._firstInBucket]=t,this.size}shift(){if(this.size===0)return;let t=this._buckets[this._bucketFirst][this._firstInBucket];return this.size!==1&&(this._firstInBucket<this._bucketSize-1?this._firstInBucket+=1:this._bucketFirst<this._bucketCount-1?(this._bucketFirst+=1,this._firstInBucket=0):(this._bucketFirst=0,this._firstInBucket=0)),this._size-=1,t}getAt(t){M(t,0,this.size-1);let{bucketIndex:e,indexInBucket:r}=this._getBucketAndPosition(t);return this._buckets[e][r]}setAt(t,e){M(t,0,this.size-1);let{bucketIndex:r,indexInBucket:i}=this._getBucketAndPosition(t);this._buckets[r][i]=e}insertAt(t,e,r=1){let i=this.size;if(M(t,0,i),t===0)for(;r--;)this.unshift(e);else if(t===this.size)for(;r--;)this.push(e);else{let n=[];for(let s=t;s<this.size;++s)n.push(this.getAt(s));this.cut(t-1);for(let s=0;s<r;++s)this.push(e);for(let s=0;s<n.length;++s)this.push(n[s])}return this.size}cut(t){if(t<0)return this.clear(),0;let{bucketIndex:e,indexInBucket:r}=this._getBucketAndPosition(t);return this._bucketLast=e,this._lastInBucket=r,this._size=t+1,this.size}deleteAt(t){if(M(t,0,this.size-1),t===0)this.shift();else if(t===this.size-1)this.pop();else{let e=this.size-1,{bucketIndex:r,indexInBucket:i}=this._getBucketAndPosition(t);for(let n=t;n<e;++n){let{bucketIndex:s,indexInBucket:o}=this._getBucketAndPosition(t+1);this._buckets[r][i]=this._buckets[s][o],r=s,i=o}this.pop()}return this.size}delete(t){let e=this.size;if(e===0)return 0;let r=0,i=0;for(;r<e;){let n=this.getAt(r);n!==t&&(this.setAt(i,n),i+=1),r+=1}return this.cut(i-1),this.size}reverse(){this._buckets.reverse().forEach(function(n){n.reverse()});let{_bucketFirst:t,_bucketLast:e,_firstInBucket:r,_lastInBucket:i}=this;return this._bucketFirst=this._bucketCount-e-1,this._bucketLast=this._bucketCount-t-1,this._firstInBucket=this._bucketSize-i-1,this._lastInBucket=this._bucketSize-r-1,this}unique(){if(this.size<=1)return this.size;let t=1,e=this.getAt(0);for(let r=1;r<this.size;++r){let i=this.getAt(r);i!==e&&(e=i,this.setAt(t++,i))}return this.cut(t-1),this.size}sort(t){let e=[];for(let r=0;r<this.size;++r)e.push(this.getAt(r));e.sort(t);for(let r=0;r<this.size;++r)this.setAt(r,e[r]);return this}shrinkToFit(){if(this.size===0)return;let t=[];if(this._bucketFirst!==this._bucketLast){if(this._bucketFirst<this._bucketLast)for(let e=this._bucketFirst;e<=this._bucketLast;++e)t.push(this._buckets[e]);else{for(let e=this._bucketFirst;e<this._bucketCount;++e)t.push(this._buckets[e]);for(let e=0;e<=this._bucketLast;++e)t.push(this._buckets[e])}this._bucketFirst=0,this._bucketLast=t.length-1,this._buckets=t}}find(t){for(let e=0;e<this.size;++e){let r=this.getAt(e);if(t(r,e,this))return r}}indexOf(t){for(let e=0;e<this.size;++e)if(this.getAt(e)===t)return e;return-1}toArray(){let t=[];for(let e=0;e<this.size;++e)t.push(this.getAt(e));return t}*[Symbol.iterator](){for(let t=0;t<this.size;++t)yield this.getAt(t)}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new l([],this._bucketSize),r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new l([],this._bucketSize),r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}_reallocate(t){let e=[],r=t||this._bucketCount>>1||1;for(let i=0;i<r;++i)e[i]=new Array(this._bucketSize);for(let i=this._bucketFirst;i<this._bucketCount;++i)e[e.length]=this._buckets[i];for(let i=0;i<this._bucketLast;++i)e[e.length]=this._buckets[i];e[e.length]=[...this._buckets[this._bucketLast]],this._bucketFirst=r,this._bucketLast=e.length-1;for(let i=0;i<r;++i)e[e.length]=new Array(this._bucketSize);this._buckets=e,this._bucketCount=e.length}_getBucketAndPosition(t){let e,r,i=this._firstInBucket+t;return e=this._bucketFirst+Math.floor(i/this._bucketSize),e>=this._bucketCount&&(e-=this._bucketCount),r=(i+1)%this._bucketSize-1,r<0&&(r=this._bucketSize-1),{bucketIndex:e,indexInBucket:r}}},Ce=class{constructor(t){d(this,"_nodes",{});d(this,"_capacity",Number.MAX_SAFE_INTEGER);d(this,"_first",-1);d(this,"_last",-1);d(this,"_size",0);t!==void 0&&(this._capacity=t)}get nodes(){return this._nodes}get capacity(){return this._capacity}get first(){return this._first}get last(){return this._last}get size(){return this._size}addFirst(t){if(this.size===0){let e=Math.floor(this.capacity/2);this._first=e,this._last=e}else this._first--;this.nodes[this.first]=t,this._size++}addLast(t){if(this.size===0){let e=Math.floor(this.capacity/2);this._first=e,this._last=e}else this._last++;this.nodes[this.last]=t,this._size++}popFirst(){if(!this.size)return;let t=this.getFirst();return delete this.nodes[this.first],this._first++,this._size--,t}getFirst(){if(this.size)return this.nodes[this.first]}popLast(){if(!this.size)return;let t=this.getLast();return delete this.nodes[this.last],this._last--,this._size--,t}getLast(){if(this.size)return this.nodes[this.last]}get(t){return this.nodes[this.first+t]||void 0}isEmpty(){return this.size<=0}};var L=class l{constructor(t,e){d(this,"options");d(this,"_elements",[]);let r=(i,n)=>{if(typeof i=="number"&&typeof n=="number")return i-n;throw new Error("The a, b params of compare function must be number")};if(e?this.options=e:this.options={comparator:r},t)for(let i of t)this.push(i)}get elements(){return this._elements}get size(){return this.elements.length}get leaf(){var t;return(t=this.elements[this.size-1])!=null?t:void 0}static heapify(t,e){return new l(t,e)}add(t){return this.push(t)}push(t){return this._elements.push(t),this._bubbleUp(this.elements.length-1),this}poll(){if(this.elements.length===0)return;let t=this.elements[0],e=this.elements.pop();return this.elements.length&&(this.elements[0]=e,this._sinkDown(0,this.elements.length>>1)),t}pop(){return this.poll()}peek(){return this.elements[0]}isEmpty(){return this.size===0}clear(){this._elements=[]}refill(t){this._elements=t,this.fix()}has(t){return this.elements.includes(t)}delete(t){let e=this.elements.indexOf(t);return e<0?!1:(e===0?this.pop():e===this.elements.length-1?this.elements.pop():(this.elements.splice(e,1,this.elements.pop()),this._bubbleUp(e),this._sinkDown(e,this.elements.length>>1)),!0)}dfs(t="pre"){let e=[],r=i=>{let n=2*i+1,s=n+1;i<this.size&&(t==="in"?(r(n),e.push(this.elements[i]),r(s)):t==="pre"?(e.push(this.elements[i]),r(n),r(s)):t==="post"&&(r(n),r(s),e.push(this.elements[i])))};return r(0),e}toArray(){return[...this.elements]}clone(){let t=new l([],this.options);return t._elements=[...this.elements],t}sort(){let t=[],e=this.clone();for(;e.size!==0;){let r=e.poll();r&&t.push(r)}return t}fix(){for(let t=Math.floor(this.size/2);t>=0;t--)this._sinkDown(t,this.elements.length>>1)}*[Symbol.iterator](){for(let t of this.elements)yield t}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new l([],this.options),r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t,e){let r=new l([],{comparator:e}),i=0;for(let n of this)r.add(t(n,i,this)),i++;return r}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}_bubbleUp(t){let e=this.elements[t];for(;t>0;){let r=t-1>>1,i=this.elements[r];if(this.options.comparator(i,e)<=0)break;this.elements[t]=i,t=r}this.elements[t]=e}_sinkDown(t,e){let r=this.elements[t];for(;t<e;){let i=t<<1|1,n=i+1,s=this.elements[i];if(n<this.elements.length&&this.options.comparator(s,this.elements[n])>0&&(i=n,s=this.elements[n]),this.options.comparator(s,r)>=0)break;this.elements[t]=s,t=i}this.elements[t]=r}},he=class{constructor(t,e=0){d(this,"element");d(this,"degree");d(this,"left");d(this,"right");d(this,"child");d(this,"parent");d(this,"marked");this.element=t,this.degree=e,this.marked=!1}},we=class{constructor(t){d(this,"_root");d(this,"_size",0);d(this,"_min");d(this,"_comparator");if(this.clear(),this._comparator=t||this._defaultComparator,typeof this.comparator!="function")throw new Error("FibonacciHeap constructor: given comparator should be a function.")}get root(){return this._root}get size(){return this._size}get min(){return this._min}get comparator(){return this._comparator}clear(){this._root=void 0,this._min=void 0,this._size=0}add(t){return this.push(t)}push(t){let e=this.createNode(t);return e.left=e,e.right=e,this.mergeWithRoot(e),(!this.min||this.comparator(e.element,this.min.element)<=0)&&(this._min=e),this._size++,this}peek(){return this.min?this.min.element:void 0}consumeLinkedList(t){let e=[];if(!t)return e;let r=t,i=!1;for(;!(r===t&&i);)r===t&&(i=!0),r&&(e.push(r),r=r.right);return e}mergeWithChild(t,e){t.child?(e.right=t.child.right,e.left=t.child,t.child.right.left=e,t.child.right=e):t.child=e}poll(){return this.pop()}pop(){if(this.size===0)return;let t=this.min;if(t.child){let e=this.consumeLinkedList(t.child);for(let r of e)this.mergeWithRoot(r),r.parent=void 0}return this.removeFromRoot(t),t===t.right?(this._min=void 0,this._root=void 0):(this._min=t.right,this._consolidate()),this._size--,t.element}merge(t){if(t.size!==0){if(this.root&&t.root){let e=this.root,r=t.root,i=e.right,n=r.left;e.right=r,r.left=e,i.left=n,n.right=i}(!this.min||t.min&&this.comparator(t.min.element,this.min.element)<0)&&(this._min=t.min),this._size+=t.size,t.clear()}}createNode(t){return new he(t)}_defaultComparator(t,e){return t<e?-1:t>e?1:0}mergeWithRoot(t){this.root?(t.right=this.root.right,t.left=this.root,this.root.right.left=t,this.root.right=t):this._root=t}removeFromRoot(t){this.root===t&&(this._root=t.right),t.left&&(t.left.right=t.right),t.right&&(t.right.left=t.left)}_link(t,e){this.removeFromRoot(t),t.left=t,t.right=t,this.mergeWithChild(e,t),e.degree++,t.parent=e}_consolidate(){let t=new Array(this.size),e=this.consumeLinkedList(this.root),r,i,n,s;for(let o of e){for(r=o,n=r.degree;t[n];)i=t[n],this.comparator(r.element,i.element)>0&&(s=r,r=i,i=s),this._link(i,r),t[n]=void 0,n++;t[n]=r}for(let o=0;o<this.size;o++)t[o]&&this.comparator(t[o].element,this.min.element)<=0&&(this._min=t[o])}};var Ke=class extends L{constructor(t,e={comparator:(r,i)=>{if(typeof r=="number"&&typeof i=="number")return i-r;throw new Error("The a, b params of compare function must be number")}}){super(t,e)}};var Re=class extends L{constructor(t,e={comparator:(r,i)=>{if(typeof r=="number"&&typeof i=="number")return r-i;throw new Error("The a, b params of compare function must be number")}}){super(t,e)}};var I=class extends L{constructor(t,e){super(t,e)}};var Se=class extends I{constructor(t,e={comparator:(r,i)=>{if(typeof r=="number"&&typeof i=="number")return r-i;throw new Error("The a, b params of compare function must be number")}}){super(t,e)}};var Me=class extends I{constructor(t,e={comparator:(r,i)=>{if(typeof r=="number"&&typeof i=="number")return i-r;throw new Error("The a, b params of compare function must be number")}}){super(t,e)}};var B=class{constructor(t,e){d(this,"key");d(this,"value");this.key=t,this.value=e}},D=class{constructor(t,e){d(this,"value");d(this,"weight");d(this,"_hashCode");this.weight=t!==void 0?t:1,this.value=e,this._hashCode=ge()}get hashCode(){return this._hashCode}},F=class{constructor(){d(this,"_vertices",new Map)}get vertices(){return this._vertices}getVertex(t){return this._vertices.get(t)||void 0}hasVertex(t){return this._vertices.has(this._getVertexKey(t))}addVertex(t,e){if(t instanceof B)return this._addVertexOnly(t);{let r=this.createVertex(t,e);return this._addVertexOnly(r)}}deleteVertex(t){let e=this._getVertexKey(t);return this._vertices.delete(e)}removeManyVertices(t){let e=[];for(let r of t)e.push(this.deleteVertex(r));return e.length>0}hasEdge(t,e){return!!this.getEdge(t,e)}addEdge(t,e,r,i){if(t instanceof D)return this._addEdgeOnly(t);if(e instanceof B||typeof e=="string"||typeof e=="number"){if(!(this.hasVertex(t)&&this.hasVertex(e)))return!1;t instanceof B&&(t=t.key),e instanceof B&&(e=e.key);let n=this.createEdge(t,e,r,i);return this._addEdgeOnly(n)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(t,e,r){let i=this.getEdge(t,e);return i?(i.weight=r,!0):!1}getAllPathsBetween(t,e,r=1e3){let i=[],n=this._getVertex(t),s=this._getVertex(e);if(!(n&&s))return[];let o=[];for(o.push({vertex:n,path:[n]});o.length>0;){let{vertex:a,path:h}=o.pop();if(a===s&&(i.push(h),i.length>=r))return i;let u=this.getNeighbors(a);for(let f of u)if(!h.includes(f)){let N=[...h,f];o.push({vertex:f,path:N})}}return i}getPathSumWeight(t){var r;let e=0;for(let i=0;i<t.length;i++)e+=((r=this.getEdge(t[i],t[i+1]))==null?void 0:r.weight)||0;return e}getMinCostBetween(t,e,r){if(r===void 0&&(r=!1),r){let i=this.getAllPathsBetween(t,e),n=1/0;for(let s of i)n=Math.min(this.getPathSumWeight(s),n);return n}else{let i=this._getVertex(e),n=this._getVertex(t);if(!(n&&i))return;let s=new Map,o=new O([n]);s.set(n,!0);let a=0;for(;o.size>0;){for(let h=0;h<o.size;h++){let u=o.shift();if(u===i)return a;if(u!==void 0){let f=this.getNeighbors(u);for(let N of f)s.has(N)||(s.set(N,!0),o.push(N))}}a++}return}}getMinPathBetween(t,e,r,i=!1){var n,s;if(r===void 0&&(r=!1),r)if(i){let o=this.getAllPathsBetween(t,e,1e4),a=1/0,h=-1,u=0;for(let f of o){let N=this.getPathSumWeight(f);N<a&&(a=N,h=u),u++}return o[h]||void 0}else return(s=(n=this.dijkstra(t,e,!0,!0))==null?void 0:n.minPath)!=null?s:[];else{let o=[],a=this._getVertex(t),h=this._getVertex(e);if(!(a&&h))return[];let u=(f,N,y,g)=>{if(y.add(f),f===N){o=[a,...g];return}let x=this.getNeighbors(f);for(let V of x)y.has(V)||(g.push(V),u(V,N,y,g),g.pop());y.delete(f)};return u(a,h,new Set,[]),o}}dijkstraWithoutHeap(t,e,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1),e===void 0&&(e=void 0);let n=1/0,s,o=[],a=[],h=this._vertices,u=new Map,f=new Set,N=new Map,y=this._getVertex(t),g=e?this._getVertex(e):void 0;if(!y)return;for(let p of h){let c=p[1];c instanceof B&&u.set(c,1/0)}u.set(y,0),N.set(y,void 0);let x=()=>{let p=1/0,c;for(let[T,m]of u)f.has(T)||m<p&&(p=m,c=T);return c},V=p=>{for(let c of h){let T=c[1];if(T instanceof B){let m=[T],b=N.get(T);for(;b;)m.push(b),b=N.get(b);let _=m.reverse();c[1]===p&&(o=_),a.push(_)}}};for(let p=1;p<h.size;p++){let c=x();if(c){if(f.add(c),g&&g===c)return r&&(n=u.get(g)||1/0),i&&V(g),{distMap:u,preMap:N,seen:f,paths:a,minDist:n,minPath:o};let T=this.getNeighbors(c);for(let m of T)if(!f.has(m)){let b=this.getEdge(c,m);if(b){let _=u.get(c),E=u.get(m);_!==void 0&&E!==void 0&&b.weight+_<E&&(u.set(m,b.weight+_),N.set(m,c))}}}}return r&&u.forEach((p,c)=>{c!==y&&p<n&&(n=p,i&&(s=c))}),i&&V(s),{distMap:u,preMap:N,seen:f,paths:a,minDist:n,minPath:o}}dijkstra(t,e,r,i){var p;r===void 0&&(r=!1),i===void 0&&(i=!1),e===void 0&&(e=void 0);let n=1/0,s,o=[],a=[],h=this._vertices,u=new Map,f=new Set,N=new Map,y=this._getVertex(t),g=e?this._getVertex(e):void 0;if(!y)return;for(let c of h){let T=c[1];T instanceof B&&u.set(T,1/0)}let x=new I([],{comparator:(c,T)=>c.key-T.key});x.add({key:0,value:y}),u.set(y,0),N.set(y,void 0);let V=c=>{for(let T of h){let m=T[1];if(m instanceof B){let b=[m],_=N.get(m);for(;_;)b.push(_),_=N.get(_);let E=b.reverse();T[1]===c&&(o=E),a.push(E)}}};for(;x.size>0;){let c=x.poll(),T=c==null?void 0:c.key,m=c==null?void 0:c.value;if(T!==void 0&&m){if(f.add(m),g&&g===m)return r&&(n=u.get(g)||1/0),i&&V(g),{distMap:u,preMap:N,seen:f,paths:a,minDist:n,minPath:o};let b=this.getNeighbors(m);for(let _ of b)if(!f.has(_)){let E=(p=this.getEdge(m,_))==null?void 0:p.weight;if(typeof E=="number"){let v=u.get(_);v&&T+E<v&&(x.add({key:T+E,value:_}),N.set(_,m),u.set(_,T+E))}}}}return r&&u.forEach((c,T)=>{T!==y&&c<n&&(n=c,i&&(s=T))}),i&&V(s),{distMap:u,preMap:N,seen:f,paths:a,minDist:n,minPath:o}}bellmanFord(t,e,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1);let n=this._getVertex(t),s=[],o=new Map,a=new Map,h=1/0,u=[],f;if(e&&(f=!1),!n)return{hasNegativeCycle:f,distMap:o,preMap:a,paths:s,min:h,minPath:u};let N=this._vertices,y=N.size,g=this.edgeSet(),x=g.length;this._vertices.forEach(p=>{o.set(p,1/0)}),o.set(n,0);for(let p=1;p<y;++p)for(let c=0;c<x;++c){let T=this.getEndsOfEdge(g[c]);if(T){let[m,b]=T,_=g[c].weight,E=o.get(m),v=o.get(b);E!==void 0&&v!==void 0&&o.get(m)!==1/0&&E+_<v&&(o.set(b,E+_),i&&a.set(b,m))}}let V;if(r&&o.forEach((p,c)=>{c!==n&&p<h&&(h=p,i&&(V=c))}),i)for(let p of N){let c=p[1];if(c instanceof B){let T=[c],m=a.get(c);for(;m!==void 0;)T.push(m),m=a.get(m);let b=T.reverse();p[1]===V&&(u=b),s.push(b)}}for(let p=0;p<x;++p){let c=this.getEndsOfEdge(g[p]);if(c){let[T]=c,m=g[p].weight,b=o.get(T);b&&b!==1/0&&b+m<b&&(f=!0)}}return{hasNegativeCycle:f,distMap:o,preMap:a,paths:s,min:h,minPath:u}}floydWarshall(){var n;let t=[...this._vertices],e=t.length,r=[],i=[];for(let s=0;s<e;s++){r[s]=[],i[s]=[];for(let o=0;o<e;o++)i[s][o]=void 0}for(let s=0;s<e;s++)for(let o=0;o<e;o++)r[s][o]=((n=this.getEdge(t[s][1],t[o][1]))==null?void 0:n.weight)||1/0;for(let s=0;s<e;s++)for(let o=0;o<e;o++)for(let a=0;a<e;a++)r[o][a]>r[o][s]+r[s][a]&&(r[o][a]=r[o][s]+r[s][a],i[o][a]=t[s][1]);return{costs:r,predecessor:i}}tarjan(t=!1,e=!1,r=!0,i=!1){t===void 0&&(t=!1),e===void 0&&(e=!1),r===void 0&&(r=!1),i===void 0&&(i=!1);let s=new Map,o=new Map,a=this._vertices;a.forEach(p=>{s.set(p,-1),o.set(p,1/0)});let[h]=a.values(),u=[],f=[],N=0,y=(p,c)=>{N++,s.set(p,N),o.set(p,N);let T=this.getNeighbors(p),m=0;for(let b of T)if(b!==c){s.get(b)===-1&&(m++,y(b,p));let _=o.get(b),E=o.get(p);E!==void 0&&_!==void 0&&o.set(p,Math.min(E,_));let v=s.get(p);if(_!==void 0&&v!==void 0&&(t&&(p===h&&m>=2||p!==h&&_>=v)&&u.push(p),e&&_>v)){let ne=this.getEdge(p,b);ne&&f.push(ne)}}};y(h,void 0);let g=new Map,x=()=>{let p=new Map;return o.forEach((c,T)=>{var m;p.has(c)?(m=p.get(c))==null||m.push(T):p.set(c,[T])}),p};r&&(g=x());let V=new Map;if(i){let p=new Map;p.size<1&&(p=x()),p.forEach((c,T)=>{c.length>1&&V.set(T,c)})}return{dfnMap:s,lowMap:o,bridges:f,cutVertexes:u,SCCs:g,cycles:V}}getDFNMap(){return this.tarjan(!1,!1,!1,!1).dfnMap}getLowMap(){return this.tarjan(!1,!1,!1,!1).lowMap}getCycles(){return this.tarjan(!1,!1,!1,!0).cycles}getCutVertexes(){return this.tarjan(!0,!1,!1,!1).cutVertexes}getSCCs(){return this.tarjan(!1,!1,!0,!1).SCCs}getBridges(){return this.tarjan(!1,!0,!1,!1).bridges}*[Symbol.iterator](){for(let t of this._vertices.values())yield[t.key,t.value]}forEach(t){let e=0;for(let r of this)t(r,e,this._vertices),e++}filter(t){let e=[],r=0;for(let i of this)t(i,r,this._vertices)&&e.push(i),r++;return e}map(t){let e=[],r=0;for(let i of this)e.push(t(i,r,this._vertices)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this._vertices),i++;return r}_addVertexOnly(t){return this.hasVertex(t)?!1:(this._vertices.set(t.key,t),!0)}_getVertex(t){let e=this._getVertexKey(t);return this._vertices.get(e)||void 0}_getVertexKey(t){return t instanceof B?t.key:t}};var A=class extends B{constructor(t,e){super(t,e)}},j=class extends D{constructor(e,r,i,n){super(i,n);d(this,"src");d(this,"dest");this.src=e,this.dest=r}},Z=class extends F{constructor(){super();d(this,"_outEdgeMap",new Map);d(this,"_inEdgeMap",new Map)}get outEdgeMap(){return this._outEdgeMap}get inEdgeMap(){return this._inEdgeMap}createVertex(e,r){return new A(e,r)}createEdge(e,r,i,n){return new j(e,r,i!=null?i:1,n)}getEdge(e,r){let i=[];if(e!==void 0&&r!==void 0){let n=this._getVertex(e),s=this._getVertex(r);if(n&&s){let o=this._outEdgeMap.get(n);o&&(i=o.filter(a=>a.dest===s.key))}}return i[0]||void 0}deleteEdgeSrcToDest(e,r){let i=this._getVertex(e),n=this._getVertex(r),s;if(!i||!n)return;let o=this._outEdgeMap.get(i);o&&S(o,h=>h.dest===n.key);let a=this._inEdgeMap.get(n);return a&&(s=S(a,h=>h.src===i.key)[0]||void 0),s}deleteEdge(e){let r,i=this._getVertex(e.src),n=this._getVertex(e.dest);if(i&&n){let s=this._outEdgeMap.get(i);s&&s.length>0&&S(s,a=>a.src===i.key);let o=this._inEdgeMap.get(n);o&&o.length>0&&(r=S(o,a=>a.dest===n.key)[0])}return r}deleteEdgesBetween(e,r){let i=[];if(e&&r){let n=this.deleteEdgeSrcToDest(e,r),s=this.deleteEdgeSrcToDest(r,e);n&&i.push(n),s&&i.push(s)}return i}incomingEdgesOf(e){let r=this._getVertex(e);return r?this.inEdgeMap.get(r)||[]:[]}outgoingEdgesOf(e){let r=this._getVertex(e);return r?this._outEdgeMap.get(r)||[]:[]}degreeOf(e){return this.outDegreeOf(e)+this.inDegreeOf(e)}inDegreeOf(e){return this.incomingEdgesOf(e).length}outDegreeOf(e){return this.outgoingEdgesOf(e).length}edgesOf(e){return[...this.outgoingEdgesOf(e),...this.incomingEdgesOf(e)]}getEdgeSrc(e){return this._getVertex(e.src)}getEdgeDest(e){return this._getVertex(e.dest)}getDestinations(e){if(e===void 0)return[];let r=[],i=this.outgoingEdgesOf(e);for(let n of i){let s=this.getEdgeDest(n);s&&r.push(s)}return r}topologicalSort(e){e=e!=null?e:"key";let r=new Map;for(let o of this.vertices)r.set(o[1],0);let i=[],n=!1,s=o=>{r.set(o,1);let a=this.getDestinations(o);for(let h of a){let u=r.get(h);u===0?s(h):u===1&&(n=!0)}r.set(o,2),i.push(o)};for(let o of this.vertices)r.get(o[1])===0&&s(o[1]);if(!n)return e==="key"&&(i=i.map(o=>o instanceof A?o.key:o)),i.reverse()}edgeSet(){let e=[];return this._outEdgeMap.forEach(r=>{e=[...e,...r]}),e}getNeighbors(e){let r=[],i=this._getVertex(e);if(i){let n=this.outgoingEdgesOf(i);for(let s of n){let o=this._getVertex(s.dest);o&&r.push(o)}}return r}getEndsOfEdge(e){if(!this.hasEdge(e.src,e.dest))return;let r=this._getVertex(e.src),i=this._getVertex(e.dest);if(r&&i)return[r,i]}_addEdgeOnly(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let r=this._getVertex(e.src),i=this._getVertex(e.dest);if(r&&i){let n=this._outEdgeMap.get(r);n?n.push(e):this._outEdgeMap.set(r,[e]);let s=this._inEdgeMap.get(i);return s?s.push(e):this._inEdgeMap.set(i,[e]),!0}else return!1}};var le=class extends B{constructor(t,e){super(t,e)}},de=class extends D{constructor(e,r,i,n){super(i,n);d(this,"vertices");this.vertices=[e,r]}},Le=class extends F{constructor(){super();d(this,"_edges");this._edges=new Map}get edges(){return this._edges}createVertex(e,r){return new le(e,r!=null?r:e)}createEdge(e,r,i,n){return new de(e,r,i!=null?i:1,n)}getEdge(e,r){var n;let i=[];if(e!==void 0&&r!==void 0){let s=this._getVertex(e),o=this._getVertex(r);s&&o&&(i=(n=this._edges.get(s))==null?void 0:n.filter(a=>a.vertices.includes(o.key)))}return i&&i[0]||void 0}deleteEdgeBetween(e,r){let i=this._getVertex(e),n=this._getVertex(r);if(!i||!n)return;let s=this._edges.get(i),o;s&&(o=S(s,h=>h.vertices.includes(n.key))[0]||void 0);let a=this._edges.get(n);return a&&S(a,h=>h.vertices.includes(i.key)),o}deleteEdge(e){return this.deleteEdgeBetween(e.vertices[0],e.vertices[1])}degreeOf(e){var i;let r=this._getVertex(e);return r&&((i=this._edges.get(r))==null?void 0:i.length)||0}edgesOf(e){let r=this._getVertex(e);return r?this._edges.get(r)||[]:[]}edgeSet(){let e=new Set;return this._edges.forEach(r=>{r.forEach(i=>{e.add(i)})}),[...e]}getNeighbors(e){let r=[],i=this._getVertex(e);if(i){let n=this.edgesOf(i);for(let s of n){let o=this._getVertex(s.vertices.filter(a=>a!==i.key)[0]);o&&r.push(o)}}return r}getEndsOfEdge(e){if(!this.hasEdge(e.vertices[0],e.vertices[1]))return;let r=this._getVertex(e.vertices[0]),i=this._getVertex(e.vertices[1]);if(r&&i)return[r,i]}_addEdgeOnly(e){for(let r of e.vertices){let i=this._getVertex(r);if(i===void 0)return!1;if(i){let n=this._edges.get(i);n?n.push(e):this._edges.set(i,[e])}}return!0}};var ue=class extends A{constructor(e,r,i,n){super(e,r);d(this,"lat");d(this,"long");this.lat=i,this.long=n}},fe=class extends j{constructor(t,e,r,i){super(t,e,r,i)}},Ie=class extends Z{constructor(e,r){super();d(this,"_origin",[0,0]);d(this,"_bottomRight");this._origin=e,this._bottomRight=r}get origin(){return this._origin}get bottomRight(){return this._bottomRight}createVertex(e,r,i=this.origin[0],n=this.origin[1]){return new ue(e,r,i,n)}createEdge(e,r,i,n){return new fe(e,r,i,n)}};var $=(e=>(e.ITERATIVE="ITERATIVE",e.RECURSIVE="RECURSIVE",e))($||{}),ce=(o=>(o.ROOT="ROOT",o.LEFT="LEFT",o.RIGHT="RIGHT",o.ROOT_LEFT="ROOT_LEFT",o.ROOT_RIGHT="ROOT_RIGHT",o.ISOLATED="ISOLATED",o.MAL_NODE="MAL_NODE",o))(ce||{});var ze=(e=>(e[e.RED=1]="RED",e[e.BLACK=0]="BLACK",e))(ze||{});var De=(r=>(r.lt="lt",r.eq="eq",r.gt="gt",r))(De||{});var k=class{constructor(t,e){d(this,"key");d(this,"value");d(this,"parent");d(this,"_left");d(this,"_right");this.key=t,this.value=e}get left(){return this._left}set left(t){t&&(t.parent=this),this._left=t}get right(){return this._right}set right(t){t&&(t.parent=this),this._right=t}get familyPosition(){let t=this;return this.parent?this.parent.left===t?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===t?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},ee=class l{constructor(t,e){d(this,"iterationType","ITERATIVE");d(this,"_root");d(this,"_size");d(this,"_defaultOneParamCallback",t=>t.key);if(e){let{iterationType:r}=e;r&&(this.iterationType=r)}this._size=0,t&&this.addMany(t)}get root(){return this._root}get size(){return this._size}createNode(t,e){return new k(t,e)}createTree(t){return new l([],C({iterationType:this.iterationType},t))}isEntry(t){return Array.isArray(t)&&t.length===2}add(t){let e,r,i=(n,s)=>{let o=new O([n]);for(;o.size>0;){let a=o.shift();if(s&&a.key===s.key)return this._replaceNode(a,s),s;let h=this._addTo(s,a);if(h!==void 0)return h;a.left&&o.push(a.left),a.right&&o.push(a.right)}};if(t===null)r=null;else if(this.isNodeKey(t))r=this.createNode(t);else if(t instanceof k)r=t;else if(this.isEntry(t)){let[n,s]=t;if(n===void 0)return;n===null?r=null:r=this.createNode(n,s)}else return;return this.root?e=i(this.root,r):(this._setRoot(r),r?this._size=1:this._size=0,e=this.root),e}addMany(t){let e=[];for(let r of t)e.push(this.add(r));return e}refill(t){this.clear(),this.addMany(t)}delete(t,e=this._defaultOneParamCallback){let r=[];if(!this.root)return r;(!e||e===this._defaultOneParamCallback)&&t instanceof k&&(e=a=>a);let i=this.getNode(t,e);if(!i)return r;let n=i!=null&&i.parent?i.parent:null,s,o=i;if(i.left){if(i.left){let a=this.getRightMost(i.left);if(a){let h=a.parent;o=this._swapProperties(i,a),h&&(h.right===a?h.right=a.left:h.left=a.left,s=h)}}}else if(!n)this._setRoot(null);else{let{familyPosition:a}=i;a==="LEFT"||a==="ROOT_LEFT"?n.left=i.right:(a==="RIGHT"||a==="ROOT_RIGHT")&&(n.right=i.right),s=n}return this._size=this.size-1,r.push({deleted:o,needBalanced:s}),r}getDepth(t,e=this.root){t=this.ensureNode(t),e=this.ensureNode(e);let r=0;for(;t!=null&&t.parent;){if(t===e)return r;r++,t=t.parent}return r}getHeight(t=this.root,e=this.iterationType){if(t=this.ensureNode(t),!t)return-1;if(e==="RECURSIVE"){let r=i=>{if(!i)return-1;let n=r(i.left),s=r(i.right);return Math.max(n,s)+1};return r(t)}else{let r=[{node:t,depth:0}],i=0;for(;r.length>0;){let{node:n,depth:s}=r.pop();n.left&&r.push({node:n.left,depth:s+1}),n.right&&r.push({node:n.right,depth:s+1}),i=Math.max(i,s)}return i}}getMinHeight(t=this.root,e=this.iterationType){var r,i,n;if(t=this.ensureNode(t),!t)return-1;if(e==="RECURSIVE"){let s=o=>{if(!o||!o.left&&!o.right)return 0;let a=s(o.left),h=s(o.right);return Math.min(a,h)+1};return s(t)}else{let s=[],o=t,a=null,h=new Map;for(;s.length>0||o;)if(o)s.push(o),o=o.left;else if(o=s[s.length-1],!o.right||a===o.right){if(o=s.pop(),o){let u=o.left&&(r=h.get(o.left))!=null?r:-1,f=o.right&&(i=h.get(o.right))!=null?i:-1;h.set(o,1+Math.min(u,f)),a=o,o=null}}else o=o.right;return(n=h.get(t))!=null?n:-1}}isPerfectlyBalanced(t=this.root){return this.getMinHeight(t)+1>=this.getHeight(t)}getNodes(t,e=this._defaultOneParamCallback,r=!1,i=this.root,n=this.iterationType){if((!e||e===this._defaultOneParamCallback)&&t instanceof k&&(e=o=>o),i=this.ensureNode(i),!i)return[];let s=[];if(n==="RECURSIVE"){let o=a=>{e(a)===t&&(s.push(a),r)||!a.left&&!a.right||(a.left&&o(a.left),a.right&&o(a.right))};o(i)}else{let o=new O([i]);for(;o.size>0;){let a=o.shift();if(a){if(e(a)===t&&(s.push(a),r))return s;a.left&&o.push(a.left),a.right&&o.push(a.right)}}}return s}has(t,e=this._defaultOneParamCallback,r=this.root,i=this.iterationType){return(!e||e===this._defaultOneParamCallback)&&t instanceof k&&(e=n=>n),this.getNodes(t,e,!0,r,i).length>0}getNode(t,e=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var n;return(!e||e===this._defaultOneParamCallback)&&t instanceof k&&(e=s=>s),(n=this.getNodes(t,e,!0,r,i)[0])!=null?n:null}getNodeByKey(t,e="ITERATIVE"){if(this.root)if(e==="RECURSIVE"){let r=i=>{if(i.key===t)return i;if(!(!i.left&&!i.right)){if(i.left)return r(i.left);if(i.right)return r(i.right)}};return r(this.root)}else{let r=new O([this.root]);for(;r.size>0;){let i=r.shift();if(i){if(i.key===t)return i;i.left&&r.push(i.left),i.right&&r.push(i.right)}}}}ensureNode(t,e="ITERATIVE"){return this.isNodeKey(t)?this.getNodeByKey(t,e):t}get(t,e=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var n,s;return(!e||e===this._defaultOneParamCallback)&&t instanceof k&&(e=o=>o),(s=(n=this.getNode(t,e,r,i))==null?void 0:n.value)!=null?s:void 0}clear(){this._setRoot(void 0),this._size=0}isEmpty(){return this.size===0}getPathToRoot(t,e=!0){let r=[];if(t=this.ensureNode(t),!t)return r;for(;t.parent;)r.push(t),t=t.parent;return r.push(t),e?r.reverse():r}getLeftMost(t=this.root,e=this.iterationType){if(t=this.ensureNode(t),!t)return t;if(e==="RECURSIVE"){let r=i=>this.isRealNode(i.left)?r(i.left):i;return r(t)}else{let r=oe(i=>this.isRealNode(i.left)?r.cont(i.left):i);return r(t)}}getRightMost(t=this.root,e=this.iterationType){if(t=this.ensureNode(t),!t)return t;if(e==="RECURSIVE"){let r=i=>this.isRealNode(i.right)?r(i.right):i;return r(t)}else{let r=oe(i=>this.isRealNode(i.right)?r.cont(i.right):i);return r(t)}}isSubtreeBST(t,e=this.iterationType){if(t=this.ensureNode(t),!t)return!0;if(e==="RECURSIVE"){let r=(i,n,s)=>i?i.key<=n||i.key>=s?!1:r(i.left,n,i.key)&&r(i.right,i.key,s):!0;return r(t,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER)}else{let r=[],i=Number.MIN_SAFE_INTEGER,n=t;for(;n||r.length>0;){for(;n;)r.push(n),n=n.left;if(n=r.pop(),!n||i>=n.key)return!1;i=n.key,n=n.right}return!0}}isBST(t=this.iterationType){return this.root===null?!0:this.isSubtreeBST(this.root,t)}subTreeTraverse(t=this._defaultOneParamCallback,e=this.root,r=this.iterationType,i=!1){e=this.ensureNode(e);let n=[];if(!e)return n;if(r==="RECURSIVE"){let s=o=>{o!==void 0&&(n.push(t(o)),i?(o&&this.isNodeOrNull(o.left)&&s(o.left),o&&this.isNodeOrNull(o.right)&&s(o.right)):(o&&o.left&&s(o.left),o&&o.right&&s(o.right)))};s(e)}else{let s=[e];for(;s.length>0;){let o=s.pop();o!==void 0&&(n.push(t(o)),i?(o&&this.isNodeOrNull(o.right)&&s.push(o.right),o&&this.isNodeOrNull(o.left)&&s.push(o.left)):(o&&o.right&&s.push(o.right),o&&o.left&&s.push(o.left)))}}return n}isRealNode(t){return t instanceof k&&t.key.toString()!=="NaN"}isNIL(t){return t instanceof k&&t.key.toString()==="NaN"}isNodeOrNull(t){return this.isRealNode(t)||t===null}isNodeKey(t){return typeof t=="number"}dfs(t=this._defaultOneParamCallback,e="in",r=this.root,i="ITERATIVE",n=!1){if(r=this.ensureNode(r),!r)return[];let s=[];if(i==="RECURSIVE"){let o=a=>{switch(e){case"in":n?(a&&this.isNodeOrNull(a.left)&&o(a.left),this.isNodeOrNull(a)&&s.push(t(a)),a&&this.isNodeOrNull(a.right)&&o(a.right)):(a&&a.left&&o(a.left),this.isRealNode(a)&&s.push(t(a)),a&&a.right&&o(a.right));break;case"pre":n?(this.isNodeOrNull(a)&&s.push(t(a)),a&&this.isNodeOrNull(a.left)&&o(a.left),a&&this.isNodeOrNull(a.right)&&o(a.right)):(this.isRealNode(a)&&s.push(t(a)),a&&a.left&&o(a.left),a&&a.right&&o(a.right));break;case"post":n?(a&&this.isNodeOrNull(a.left)&&o(a.left),a&&this.isNodeOrNull(a.right)&&o(a.right),this.isNodeOrNull(a)&&s.push(t(a))):(a&&a.left&&o(a.left),a&&a.right&&o(a.right),this.isRealNode(a)&&s.push(t(a)));break}};o(r)}else{let o=[{opt:0,node:r}];for(;o.length>0;){let a=o.pop();if(!(a===void 0||this.isNIL(a.node))){if(n){if(a.node===void 0)continue}else if(a.node===null||a.node===void 0)continue;if(a.opt===1)s.push(t(a.node));else switch(e){case"in":a.node&&o.push({opt:0,node:a.node.right}),o.push({opt:1,node:a.node}),a.node&&o.push({opt:0,node:a.node.left});break;case"pre":a.node&&o.push({opt:0,node:a.node.right}),a.node&&o.push({opt:0,node:a.node.left}),o.push({opt:1,node:a.node});break;case"post":o.push({opt:1,node:a.node}),a.node&&o.push({opt:0,node:a.node.right}),a.node&&o.push({opt:0,node:a.node.left});break;default:a.node&&o.push({opt:0,node:a.node.right}),o.push({opt:1,node:a.node}),a.node&&o.push({opt:0,node:a.node.left});break}}}}return s}bfs(t=this._defaultOneParamCallback,e=this.root,r=this.iterationType,i=!1){if(e=this.ensureNode(e),!e)return[];let n=[];if(r==="RECURSIVE"){let s=new O([e]),o=a=>{if(s.size===0)return;let h=s.shift();n.push(t(h)),i?(h&&this.isNodeOrNull(h.left)&&s.push(h.left),h&&this.isNodeOrNull(h.right)&&s.push(h.right)):(h.left&&s.push(h.left),h.right&&s.push(h.right)),o(a+1)};o(0)}else{let s=new O([e]);for(;s.size>0;){let o=s.size;for(let a=0;a<o;a++){let h=s.shift();n.push(t(h)),i?(h&&this.isNodeOrNull(h.left)&&s.push(h.left),h&&this.isNodeOrNull(h.right)&&s.push(h.right)):(h.left&&s.push(h.left),h.right&&s.push(h.right))}}}return n}listLevels(t=this._defaultOneParamCallback,e=this.root,r=this.iterationType,i=!1){e=this.ensureNode(e);let n=[];if(!e)return n;if(r==="RECURSIVE"){let s=(o,a)=>{n[a]||(n[a]=[]),n[a].push(t(o)),i?(o&&this.isNodeOrNull(o.left)&&s(o.left,a+1),o&&this.isNodeOrNull(o.right)&&s(o.right,a+1)):(o&&o.left&&s(o.left,a+1),o&&o.right&&s(o.right,a+1))};s(e,0)}else{let s=[[e,0]];for(;s.length>0;){let o=s.pop(),[a,h]=o;n[h]||(n[h]=[]),n[h].push(t(a)),i?(a&&this.isNodeOrNull(a.right)&&s.push([a.right,h+1]),a&&this.isNodeOrNull(a.left)&&s.push([a.left,h+1])):(a&&a.right&&s.push([a.right,h+1]),a&&a.left&&s.push([a.left,h+1]))}}return n}getPredecessor(t){if(t=this.ensureNode(t),!!this.isRealNode(t))if(t.left){let e=t.left;for(;!this.isRealNode(e)||this.isRealNode(e.right)&&e.right!==t;)e&&(e=e.right);return e}else return t}getSuccessor(t){if(t=this.ensureNode(t),!t)return;if(t.right)return this.getLeftMost(t.right);let e=t.parent;for(;e&&e&&t===e.right;)t=e,e=e.parent;return e}morris(t=this._defaultOneParamCallback,e="in",r=this.root){if(r=this.ensureNode(r),r===null)return[];let i=[],n=r,s=a=>{let h=null,u=null;for(;a;)u=a.right,a.right=h,h=a,a=u;return h},o=a=>{let h=s(a),u=h;for(;u;)i.push(t(u)),u=u.right;s(h)};switch(e){case"in":for(;n;){if(n.left){let a=this.getPredecessor(n);if(a.right)a.right=null;else{a.right=n,n=n.left;continue}}i.push(t(n)),n=n.right}break;case"pre":for(;n;){if(n.left){let a=this.getPredecessor(n);if(a.right)a.right=null;else{a.right=n,i.push(t(n)),n=n.left;continue}}else i.push(t(n));n=n.right}break;case"post":for(;n;){if(n.left){let a=this.getPredecessor(n);if(a.right===null){a.right=n,n=n.left;continue}else a.right=null,o(n.left)}n=n.right}o(r);break}return i}forEach(t){for(let e of this)t(e,this)}filter(t){let e=this.createTree();for(let[r,i]of this)t([r,i],this)&&e.add([r,i]);return e}map(t){let e=this.createTree();for(let[r,i]of this)e.add([r,t([r,i],this)]);return e}reduce(t,e){let r=e;for(let[i,n]of this)r=t(r,[i,n],this);return r}*[Symbol.iterator](t=this.root){if(t)if(this.iterationType==="ITERATIVE"){let e=[],r=t;for(;r||e.length>0;){for(;r&&!isNaN(r.key);)e.push(r),r=r.left;r=e.pop(),r&&!isNaN(r.key)&&(yield[r.key,r.value],r=r.right)}}else t.left&&!isNaN(t.key)&&(yield*q(this[Symbol.iterator](t.left))),yield[t.key,t.value],t.right&&!isNaN(t.key)&&(yield*q(this[Symbol.iterator](t.right)))}print(t=this.root,e){let r=C({isShowUndefined:!1,isShowNull:!1,isShowRedBlackNIL:!1},e);if(t=this.ensureNode(t),!t)return;r.isShowUndefined&&console.log(`U for undefined
1
+ "use strict";var dataStructureTyped=(()=>{var se=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames,Qe=Object.getOwnPropertySymbols;var Xe=Object.prototype.hasOwnProperty,$e=Object.prototype.propertyIsEnumerable;var Ne=(h,t)=>{if(t=Symbol[h])return t;throw Error("Symbol."+h+" is not defined")};var Te=(h,t,e)=>t in h?se(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,w=(h,t)=>{for(var e in t||(t={}))Xe.call(t,e)&&Te(h,e,t[e]);if(Qe)for(var e of Qe(t))$e.call(t,e)&&Te(h,e,t[e]);return h};var et=(h,t)=>{for(var e in t)se(h,e,{get:t[e],enumerable:!0})},tt=(h,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ze(t))!Xe.call(h,i)&&i!==e&&se(h,i,{get:()=>t[i],enumerable:!(r=Je(t,i))||r.enumerable});return h};var rt=h=>tt(se({},"__esModule",{value:!0}),h);var l=(h,t,e)=>(Te(h,typeof t!="symbol"?t+"":t,e),e);var Ye=(h,t,e)=>new Promise((r,i)=>{var n=a=>{try{o(e.next(a))}catch(d){i(d)}},s=a=>{try{o(e.throw(a))}catch(d){i(d)}},o=a=>a.done?r(a.value):Promise.resolve(a.value).then(n,s);o((e=e.apply(h,t)).next())}),it=function(h,t){this[0]=h,this[1]=t};var q=h=>{var t=h[Ne("asyncIterator")],e=!1,r,i={};return t==null?(t=h[Ne("iterator")](),r=n=>i[n]=s=>t[n](s)):(t=t.call(h),r=n=>i[n]=s=>{if(e){if(e=!1,n==="throw")throw s;return s}return e=!0,{done:!1,value:new it(new Promise(o=>{var a=t[n](s);if(!(a instanceof Object))throw TypeError("Object expected");o(a)}),1)}}),i[Ne("iterator")]=()=>i,r("next"),"throw"in t?r("throw"):i.throw=n=>{throw n},"return"in t&&r("return"),i};var ot={};et(ot,{AVLTree:()=>te,AVLTreeNode:()=>F,AbstractEdge:()=>D,AbstractGraph:()=>A,AbstractVertex:()=>k,BST:()=>P,BSTNode:()=>z,BinaryIndexedTree:()=>Fe,BinaryTree:()=>ee,BinaryTreeNode:()=>B,CP:()=>De,Character:()=>pe,Deque:()=>ve,DirectedEdge:()=>j,DirectedGraph:()=>Z,DirectedVertex:()=>H,DoublyLinkedList:()=>Ve,DoublyLinkedListNode:()=>K,FamilyPosition:()=>ce,FibonacciHeap:()=>Ce,FibonacciHeapNode:()=>de,HashMap:()=>xe,HashTable:()=>me,HashTableNode:()=>Q,Heap:()=>L,IterationType:()=>$,LinkedListQueue:()=>Oe,MapEdge:()=>fe,MapGraph:()=>Ie,MapVertex:()=>ue,Matrix2D:()=>Ue,MatrixNTI2D:()=>je,MaxHeap:()=>Ke,MaxPriorityQueue:()=>Me,MinHeap:()=>Re,MinPriorityQueue:()=>Se,Navigator:()=>Ge,ObjectDeque:()=>we,PriorityQueue:()=>I,Queue:()=>O,RBTNColor:()=>ze,RedBlackTree:()=>He,RedBlackTreeNode:()=>G,SegmentTree:()=>Ae,SegmentTreeNode:()=>U,SinglyLinkedList:()=>Y,SinglyLinkedListNode:()=>C,SkipList:()=>ke,SkipListNode:()=>J,Stack:()=>Be,THUNK_SYMBOL:()=>ye,TreeMultimap:()=>Pe,TreeMultimapNode:()=>re,TreeNode:()=>qe,Trie:()=>We,TrieNode:()=>ie,UndirectedEdge:()=>le,UndirectedGraph:()=>Le,UndirectedVertex:()=>he,Vector2D:()=>W,arrayRemove:()=>S,calcMinUnitsRequired:()=>ae,getMSB:()=>Ee,isThunk:()=>be,isWeakKey:()=>X,rangeCheck:()=>M,throwRangeError:()=>st,toThunk:()=>_e,trampoline:()=>oe,trampolineAsync:()=>nt,uuidV4:()=>ge});var Q=class{constructor(t,e){l(this,"key");l(this,"value");l(this,"next");this.key=t,this.value=e,this.next=void 0}},R=class R{constructor(t=R.DEFAULT_CAPACITY,e){l(this,"_capacity");l(this,"_size");l(this,"_buckets");l(this,"_hashFn");this._hashFn=e||this._defaultHashFn,this._capacity=Math.max(t,R.DEFAULT_CAPACITY),this._size=0,this._buckets=new Array(this._capacity).fill(void 0)}get capacity(){return this._capacity}get size(){return this._size}get buckets(){return this._buckets}get hashFn(){return this._hashFn}set(t,e){let r=this._hash(t),i=new Q(t,e);if(!this._buckets[r])this._buckets[r]=i;else{let n=this._buckets[r];for(;n;){if(n.key===t){n.value=e;return}if(!n.next)break;n=n.next}n.next=i}this._size++,this._size/this._capacity>=R.LOAD_FACTOR&&this._expand()}get(t){let e=this._hash(t),r=this._buckets[e];for(;r;){if(r.key===t)return r.value;r=r.next}}delete(t){let e=this._hash(t),r=this._buckets[e],i;for(;r;){if(r.key===t){i?i.next=r.next:this._buckets[e]=r.next,this._size--,r.next=void 0;return}i=r,r=r.next}}*[Symbol.iterator](){for(let t of this._buckets){let e=t;for(;e;)yield[e.key,e.value],e=e.next}}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new R,r=0;for(let[i,n]of this)t([i,n],r,this)&&e.set(i,n),r++;return e}map(t){let e=new R,r=0;for(let[i,n]of this)e.set(i,t([i,n],r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}_defaultHashFn(t){return(typeof t=="string"?this._murmurStringHashFn(t):this._objectHash(t))%this._capacity}_multiplicativeStringHashFn(t){let e=String(t),r=0;for(let i=0;i<e.length;i++){let n=e.charCodeAt(i),s=.618033988749895,o=1<<30;r=(r*s+n)%o}return Math.abs(r)}_murmurStringHashFn(t){let e=String(t),i=0;for(let n=0;n<e.length;n++){let s=e.charCodeAt(n);i=(i^s)*1540483477,i=(i^i>>>15)*668265261,i=i^i>>>15}return Math.abs(i)}_hash(t){return this.hashFn(t)}_stringHash(t){let e=0;for(let r=0;r<t.length;r++)e=e*31+t.charCodeAt(r)&4294967295;return e}_objectHash(t){return this._stringHash(JSON.stringify(t))}_expand(){let t=this._capacity*2,e=new Array(t).fill(void 0);for(let r of this._buckets){let i=r;for(;i;){let n=this._hash(i.key),s=new Q(i.key,i.value);if(!e[n])e[n]=s;else{let o=e[n];for(;o.next;)o=o.next;o.next=s}i=i.next}}this._buckets=e,this._capacity=t}};l(R,"DEFAULT_CAPACITY",16),l(R,"LOAD_FACTOR",.75);var me=R;var ge=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(h){let t=Math.random()*16|0;return(h=="x"?t:t&3|8).toString(16)})},S=function(h,t){let e=-1,r=h?h.length:0,i=[];for(;++e<r;){let n=h[e];t(n,e,h)&&(i.push(n),Array.prototype.splice.call(h,e--,1),r--)}return i},ye=Symbol("thunk"),be=h=>typeof h=="function"&&h.__THUNK__===ye,_e=h=>{let t=()=>h();return t.__THUNK__=ye,t},oe=h=>Object.assign((...e)=>{let r=h(...e);for(;be(r)&&typeof r=="function";)r=r();return r},{cont:(...e)=>_e(()=>h(...e))}),nt=h=>Object.assign((...e)=>Ye(void 0,null,function*(){let r=yield h(...e);for(;be(r)&&typeof r=="function";)r=yield r();return r}),{cont:(...e)=>_e(()=>h(...e))}),Ee=h=>h<=0?0:1<<31-Math.clz32(h),M=(h,t,e,r="Index out of bounds.")=>{if(h<t||h>e)throw new RangeError(r)},st=(h="The value is off-limits.")=>{throw new RangeError(h)},X=h=>{let t=typeof h;return t==="object"&&h!==null||t==="function"},ae=(h,t)=>Math.floor((h+t-1)/t);var xe=class h{constructor(t,e={hashFn:r=>String(r),objHashFn:r=>r}){l(this,"_noObjMap",{});l(this,"_objMap",new WeakMap);l(this,"_head");l(this,"_tail");l(this,"_sentinel");l(this,"_hashFn");l(this,"_objHashFn");l(this,"_size",0);this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel;let{hashFn:r,objHashFn:i}=e;if(this._hashFn=r,this._objHashFn=i,t)for(let n of t)this.set(n[0],n[1])}get size(){return this._size}get first(){if(this._size!==0)return[this._head.key,this._head.value]}get last(){if(this._size!==0)return[this._tail.key,this._tail.value]}*begin(){let t=this._head;for(;t!==this._sentinel;)yield[t.key,t.value],t=t.next}*reverseBegin(){let t=this._tail;for(;t!==this._sentinel;)yield[t.key,t.value],t=t.prev}set(t,e){let r;if(X(t)){let i=this._objHashFn(t);r=this._objMap.get(i),r?r.value=e:(r={key:i,value:e,prev:this._tail,next:this._sentinel},this._objMap.set(i,r))}else{let i=this._hashFn(t);r=this._noObjMap[i],r?r.value=e:this._noObjMap[i]=r={key:t,value:e,prev:this._tail,next:this._sentinel}}return this._size===0?(this._head=r,this._sentinel.next=r):this._tail.next=r,this._tail=r,this._sentinel.prev=r,this._size++,this._size}get(t){if(X(t)){let e=this._objHashFn(t),r=this._objMap.get(e);return r?r.value:void 0}else{let e=this._hashFn(t),r=this._noObjMap[e];return r?r.value:void 0}}getAt(t){M(t,0,this._size-1);let e=this._head;for(;t--;)e=e.next;return[e.key,e.value]}delete(t){let e;if(X(t)){let r=this._objHashFn(t);if(e=this._objMap.get(r),!e)return!1;this._objMap.delete(r)}else{let r=this._hashFn(t);if(e=this._noObjMap[r],!e)return!1;delete this._noObjMap[r]}return this._deleteNode(e),!0}deleteAt(t){M(t,0,this._size-1);let e=this._head;for(;t--;)e=e.next;return this._deleteNode(e),this._size}isEmpty(){return this._size===0}clear(){this._noObjMap={},this._size=0,this._head=this._tail=this._sentinel.prev=this._sentinel.next=this._sentinel}forEach(t){let e=0,r=this._head;for(;r!==this._sentinel;)t([r.key,r.value],e++,this),r=r.next}filter(t){let e=new h,r=0;for(let[i,n]of this)t([i,n],r,this)&&e.set(i,n),r++;return e}map(t){let e=new h,r=0;for(let[i,n]of this){let s=t([i,n],r,this);e.set(i,s),r++}return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}*[Symbol.iterator](){let t=this._head;for(;t!==this._sentinel;)yield[t.key,t.value],t=t.next}print(){console.log([...this])}_deleteNode(t){let{prev:e,next:r}=t;e.next=r,r.prev=e,t===this._head&&(this._head=r),t===this._tail&&(this._tail=e),this._size-=1}};var C=class{constructor(t){l(this,"value");l(this,"next");this.value=t,this.next=void 0}},Y=class h{constructor(t){l(this,"_head");l(this,"_tail");l(this,"_length");if(this._head=void 0,this._tail=void 0,this._length=0,t)for(let e of t)this.push(e)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}static fromArray(t){let e=new h;for(let r of t)e.push(r);return e}push(t){let e=new C(t);this.head?(this.tail.next=e,this._tail=e):(this._head=e,this._tail=e),this._length++}addLast(t){this.push(t)}pop(){if(!this.head)return;if(this.head===this.tail){let r=this.head.value;return this._head=void 0,this._tail=void 0,this._length--,r}let t=this.head;for(;t.next!==this.tail;)t=t.next;let e=this.tail.value;return t.next=void 0,this._tail=t,this._length--,e}popLast(){return this.pop()}shift(){if(!this.head)return;let t=this.head;return this._head=this.head.next,this._length--,t.value}popFirst(){return this.shift()}unshift(t){let e=new C(t);this.head?(e.next=this.head,this._head=e):(this._head=e,this._tail=e),this._length++}addFirst(t){this.unshift(t)}getAt(t){if(t<0||t>=this.length)return;let e=this.head;for(let r=0;r<t;r++)e=e.next;return e.value}getNodeAt(t){let e=this.head;for(let r=0;r<t;r++)e=e.next;return e}deleteAt(t){if(t<0||t>=this.length)return;if(t===0)return this.shift();if(t===this.length-1)return this.pop();let e=this.getNodeAt(t-1),r=e.next;return e.next=r.next,this._length--,r.value}delete(t){if(!t)return!1;let e;t instanceof C?e=t.value:e=t;let r=this.head,i;for(;r;){if(r.value===e)return i===void 0?(this._head=r.next,r===this.tail&&(this._tail=void 0)):(i.next=r.next,r===this.tail&&(this._tail=i)),this._length--,!0;i=r,r=r.next}return!1}insertAt(t,e){if(t<0||t>this.length)return!1;if(t===0)return this.unshift(e),!0;if(t===this.length)return this.push(e),!0;let r=new C(e),i=this.getNodeAt(t-1);return r.next=i.next,i.next=r,this._length++,!0}isEmpty(){return this.length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}toArray(){let t=[],e=this.head;for(;e;)t.push(e.value),e=e.next;return t}reverse(){if(!this.head||this.head===this.tail)return;let t,e=this.head,r;for(;e;)r=e.next,e.next=t,t=e,e=r;[this._head,this._tail]=[this.tail,this.head]}find(t){let e=this.head;for(;e;){if(t(e.value))return e.value;e=e.next}}indexOf(t){let e=0,r=this.head;for(;r;){if(r.value===t)return e;e++,r=r.next}return-1}getNode(t){let e=this.head;for(;e;){if(e.value===t)return e;e=e.next}}insertBefore(t,e){if(!this.head)return!1;let r;if(t instanceof C?r=t.value:r=t,this.head.value===r)return this.unshift(e),!0;let i=this.head;for(;i.next;){if(i.next.value===r){let n=new C(e);return n.next=i.next,i.next=n,this._length++,!0}i=i.next}return!1}insertAfter(t,e){let r;if(t instanceof C?r=t:r=this.getNode(t),r){let i=new C(e);return i.next=r.next,r.next=i,r===this.tail&&(this._tail=i),this._length++,!0}return!1}countOccurrences(t){let e=0,r=this.head;for(;r;)r.value===t&&e++,r=r.next;return e}*[Symbol.iterator](){let t=this.head;for(;t;)yield t.value,t=t.next}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new h,r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new h,r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}};var K=class{constructor(t){l(this,"value");l(this,"next");l(this,"prev");this.value=t,this.next=void 0,this.prev=void 0}},Ve=class h{constructor(t){l(this,"_head");l(this,"_tail");l(this,"_length");if(this._head=void 0,this._tail=void 0,this._length=0,t)for(let e of t)this.push(e)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}get size(){return this.length}static fromArray(t){let e=new h;for(let r of t)e.push(r);return e}push(t){let e=new K(t);this.head?(e.prev=this.tail,this.tail.next=e,this._tail=e):(this._head=e,this._tail=e),this._length++}addLast(t){this.push(t)}pop(){if(!this.tail)return;let t=this.tail;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._tail=t.prev,this.tail.next=void 0),this._length--,t.value}popLast(){return this.pop()}shift(){if(!this.head)return;let t=this.head;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._head=t.next,this.head.prev=void 0),this._length--,t.value}popFirst(){return this.shift()}unshift(t){let e=new K(t);this.head?(e.next=this.head,this.head.prev=e,this._head=e):(this._head=e,this._tail=e),this._length++}addFirst(t){this.unshift(t)}getFirst(){var t;return(t=this.head)==null?void 0:t.value}getLast(){var t;return(t=this.tail)==null?void 0:t.value}getAt(t){if(t<0||t>=this.length)return;let e=this.head;for(let r=0;r<t;r++)e=e.next;return e.value}getNodeAt(t){if(t<0||t>=this.length)return;let e=this.head;for(let r=0;r<t;r++)e=e.next;return e}getNode(t){let e=this.head;for(;e;){if(e.value===t)return e;e=e.next}}insertAt(t,e){if(t<0||t>this.length)return!1;if(t===0)return this.unshift(e),!0;if(t===this.length)return this.push(e),!0;let r=new K(e),i=this.getNodeAt(t-1),n=i.next;return r.prev=i,r.next=n,i.next=r,n.prev=r,this._length++,!0}insertBefore(t,e){let r;if(t instanceof K?r=t:r=this.getNode(t),r){let i=new K(e);return i.prev=r.prev,r.prev&&(r.prev.next=i),i.next=r,r.prev=i,r===this.head&&(this._head=i),this._length++,!0}return!1}insertAfter(t,e){let r;if(t instanceof K?r=t:r=this.getNode(t),r){let i=new K(e);return i.next=r.next,r.next&&(r.next.prev=i),i.prev=r,r.next=i,r===this.tail&&(this._tail=i),this._length++,!0}return!1}deleteAt(t){if(t<0||t>=this.length)return;if(t===0)return this.shift();if(t===this.length-1)return this.pop();let e=this.getNodeAt(t),r=e.prev,i=e.next;return r.next=i,i.prev=r,this._length--,e.value}delete(t){let e;if(t instanceof K?e=t:e=this.getNode(t),e){if(e===this.head)this.shift();else if(e===this.tail)this.pop();else{let r=e.prev,i=e.next;r.next=i,i.prev=r,this._length--}return!0}return!1}isEmpty(){return this.length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}find(t){let e=this.head;for(;e;){if(t(e.value))return e.value;e=e.next}}indexOf(t){let e=0,r=this.head;for(;r;){if(r.value===t)return e;e++,r=r.next}return-1}findBackward(t){let e=this.tail;for(;e;){if(t(e.value))return e.value;e=e.prev}}reverse(){let t=this.head;for([this._head,this._tail]=[this.tail,this.head];t;){let e=t.next;[t.prev,t.next]=[t.next,t.prev],t=e}}toArray(){let t=[],e=this.head;for(;e;)t.push(e.value),e=e.next;return t}toReversedArray(){let t=[],e=this.tail;for(;e;)t.push(e.value),e=e.prev;return t}*[Symbol.iterator](){let t=this.head;for(;t;)yield t.value,t=t.next}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new h,r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new h,r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}};var J=class{constructor(t,e,r){l(this,"key");l(this,"value");l(this,"forward");this.key=t,this.value=e,this.forward=new Array(r)}},ke=class{constructor(t=16,e=.5){l(this,"_head");l(this,"_level");l(this,"_maxLevel");l(this,"_probability");this._head=new J(void 0,void 0,t),this._level=0,this._maxLevel=t,this._probability=e}get head(){return this._head}get level(){return this._level}get maxLevel(){return this._maxLevel}get probability(){return this._probability}add(t,e){let r=new J(t,e,this._randomLevel()),i=new Array(this.maxLevel).fill(this.head),n=this.head;for(let s=this.level-1;s>=0;s--){for(;n.forward[s]&&n.forward[s].key<t;)n=n.forward[s];i[s]=n}for(let s=0;s<r.forward.length;s++)r.forward[s]=i[s].forward[s],i[s].forward[s]=r;r.forward[0]||(this._level=Math.max(this.level,r.forward.length))}get(t){let e=this.head;for(let r=this.level-1;r>=0;r--)for(;e.forward[r]&&e.forward[r].key<t;)e=e.forward[r];if(e=e.forward[0],e&&e.key===t)return e.value}has(t){return this.get(t)!==void 0}delete(t){let e=new Array(this.maxLevel).fill(this.head),r=this.head;for(let i=this.level-1;i>=0;i--){for(;r.forward[i]&&r.forward[i].key<t;)r=r.forward[i];e[i]=r}if(r=r.forward[0],r&&r.key===t){for(let i=0;i<this.level&&e[i].forward[i]===r;i++)e[i].forward[i]=r.forward[i];for(;this.level>0&&!this.head.forward[this.level-1];)this._level--;return!0}return!1}getFirst(){let t=this.head.forward[0];return t?t.value:void 0}getLast(){let t=this.head;for(let e=this.level-1;e>=0;e--)for(;t.forward[e];)t=t.forward[e];return t.value}higher(t){let e=this.head;for(let i=this.level-1;i>=0;i--)for(;e.forward[i]&&e.forward[i].key<=t;)e=e.forward[i];let r=e.forward[0];return r?r.value:void 0}lower(t){let e=this.head,r;for(let i=this.level-1;i>=0;i--){for(;e.forward[i]&&e.forward[i].key<t;)e=e.forward[i];e.key<t&&(r=e)}return r?r.value:void 0}_randomLevel(){let t=1;for(;Math.random()<this.probability&&t<this.maxLevel;)t++;return t}};var Be=class h{constructor(t){l(this,"_elements");if(this._elements=[],t)for(let e of t)this.push(e)}get elements(){return this._elements}get size(){return this.elements.length}static fromArray(t){return new h(t)}isEmpty(){return this.elements.length===0}peek(){if(!this.isEmpty())return this.elements[this.elements.length-1]}push(t){return this.elements.push(t),this}pop(){if(!this.isEmpty())return this.elements.pop()||void 0}toArray(){return this.elements.slice()}clear(){this._elements=[]}clone(){return new h(this.elements.slice())}*[Symbol.iterator](){for(let t=0;t<this.elements.length;t++)yield this.elements[t]}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new h,r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new h,r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}};var Oe=class extends Y{enqueue(t){this.push(t)}dequeue(){return this.shift()}getFirst(){var t;return(t=this.head)==null?void 0:t.value}peek(){return this.getFirst()}},O=class h{constructor(t){l(this,"_nodes");l(this,"_offset");this._nodes=t||[],this._offset=0}get nodes(){return this._nodes}get offset(){return this._offset}get size(){return this.nodes.length-this.offset}static fromArray(t){return new h(t)}push(t){return this.nodes.push(t),this}shift(){if(this.size===0)return;let t=this.getFirst();return this._offset+=1,this.offset*2<this.nodes.length||(this._nodes=this.nodes.slice(this.offset),this._offset=0),t}getFirst(){return this.size>0?this.nodes[this.offset]:void 0}peek(){return this.getFirst()}getLast(){return this.size>0?this.nodes[this.nodes.length-1]:void 0}peekLast(){return this.getLast()}enqueue(t){this.push(t)}dequeue(){return this.shift()}getAt(t){return this.nodes[t]}isEmpty(){return this.size===0}toArray(){return this.nodes.slice(this.offset)}clear(){this._nodes=[],this._offset=0}clone(){return new h(this.nodes.slice(this.offset))}print(){console.log([...this])}*[Symbol.iterator](){for(let t of this.nodes)yield t}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new h([]),r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new h([]),r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}};var ve=class h{constructor(t=[],e=4096){l(this,"_bucketFirst",0);l(this,"_firstInBucket",0);l(this,"_bucketLast",0);l(this,"_lastInBucket",0);l(this,"_bucketCount",0);l(this,"_bucketSize");l(this,"_buckets",[]);l(this,"_size",0);let r;"length"in t?t.length instanceof Function?r=t.length():r=t.length:t.size instanceof Function?r=t.size():r=t.size,this._bucketSize=e,this._bucketCount=ae(r,this._bucketSize)||1;for(let n=0;n<this._bucketCount;++n)this._buckets.push(new Array(this._bucketSize));let i=ae(r,this._bucketSize);this._bucketFirst=this._bucketLast=(this._bucketCount>>1)-(i>>1),this._firstInBucket=this._lastInBucket=this._bucketSize-r%this._bucketSize>>1;for(let n of t)this.push(n)}get buckets(){return this._buckets}get size(){return this._size}get first(){if(this.size!==0)return this._buckets[this._bucketFirst][this._firstInBucket]}get last(){if(this.size!==0)return this._buckets[this._bucketLast][this._lastInBucket]}isEmpty(){return this.size===0}addLast(t){this.push(t)}popLast(){return this.pop()}addFirst(t){this.unshift(t)}popFirst(){return this.shift()}clear(){this._buckets=[new Array(this._bucketSize)],this._bucketCount=1,this._bucketFirst=this._bucketLast=this._size=0,this._firstInBucket=this._lastInBucket=this._bucketSize>>1}*begin(){let t=0;for(;t<this.size;)yield this.getAt(t),t++}*reverseBegin(){let t=this.size-1;for(;t>=0;)yield this.getAt(t),t--}push(t){return this.size&&(this._lastInBucket<this._bucketSize-1?this._lastInBucket+=1:this._bucketLast<this._bucketCount-1?(this._bucketLast+=1,this._lastInBucket=0):(this._bucketLast=0,this._lastInBucket=0),this._bucketLast===this._bucketFirst&&this._lastInBucket===this._firstInBucket&&this._reallocate()),this._size+=1,this._buckets[this._bucketLast][this._lastInBucket]=t,this.size}pop(){if(this.size===0)return;let t=this._buckets[this._bucketLast][this._lastInBucket];return this.size!==1&&(this._lastInBucket>0?this._lastInBucket-=1:this._bucketLast>0?(this._bucketLast-=1,this._lastInBucket=this._bucketSize-1):(this._bucketLast=this._bucketCount-1,this._lastInBucket=this._bucketSize-1)),this._size-=1,t}unshift(t){return this.size&&(this._firstInBucket>0?this._firstInBucket-=1:this._bucketFirst>0?(this._bucketFirst-=1,this._firstInBucket=this._bucketSize-1):(this._bucketFirst=this._bucketCount-1,this._firstInBucket=this._bucketSize-1),this._bucketFirst===this._bucketLast&&this._firstInBucket===this._lastInBucket&&this._reallocate()),this._size+=1,this._buckets[this._bucketFirst][this._firstInBucket]=t,this.size}shift(){if(this.size===0)return;let t=this._buckets[this._bucketFirst][this._firstInBucket];return this.size!==1&&(this._firstInBucket<this._bucketSize-1?this._firstInBucket+=1:this._bucketFirst<this._bucketCount-1?(this._bucketFirst+=1,this._firstInBucket=0):(this._bucketFirst=0,this._firstInBucket=0)),this._size-=1,t}getAt(t){M(t,0,this.size-1);let{bucketIndex:e,indexInBucket:r}=this._getBucketAndPosition(t);return this._buckets[e][r]}setAt(t,e){M(t,0,this.size-1);let{bucketIndex:r,indexInBucket:i}=this._getBucketAndPosition(t);this._buckets[r][i]=e}insertAt(t,e,r=1){let i=this.size;if(M(t,0,i),t===0)for(;r--;)this.unshift(e);else if(t===this.size)for(;r--;)this.push(e);else{let n=[];for(let s=t;s<this.size;++s)n.push(this.getAt(s));this.cut(t-1);for(let s=0;s<r;++s)this.push(e);for(let s=0;s<n.length;++s)this.push(n[s])}return this.size}cut(t){if(t<0)return this.clear(),0;let{bucketIndex:e,indexInBucket:r}=this._getBucketAndPosition(t);return this._bucketLast=e,this._lastInBucket=r,this._size=t+1,this.size}deleteAt(t){if(M(t,0,this.size-1),t===0)this.shift();else if(t===this.size-1)this.pop();else{let e=this.size-1,{bucketIndex:r,indexInBucket:i}=this._getBucketAndPosition(t);for(let n=t;n<e;++n){let{bucketIndex:s,indexInBucket:o}=this._getBucketAndPosition(t+1);this._buckets[r][i]=this._buckets[s][o],r=s,i=o}this.pop()}return this.size}delete(t){let e=this.size;if(e===0)return 0;let r=0,i=0;for(;r<e;){let n=this.getAt(r);n!==t&&(this.setAt(i,n),i+=1),r+=1}return this.cut(i-1),this.size}reverse(){this._buckets.reverse().forEach(function(n){n.reverse()});let{_bucketFirst:t,_bucketLast:e,_firstInBucket:r,_lastInBucket:i}=this;return this._bucketFirst=this._bucketCount-e-1,this._bucketLast=this._bucketCount-t-1,this._firstInBucket=this._bucketSize-i-1,this._lastInBucket=this._bucketSize-r-1,this}unique(){if(this.size<=1)return this.size;let t=1,e=this.getAt(0);for(let r=1;r<this.size;++r){let i=this.getAt(r);i!==e&&(e=i,this.setAt(t++,i))}return this.cut(t-1),this.size}sort(t){let e=[];for(let r=0;r<this.size;++r)e.push(this.getAt(r));e.sort(t);for(let r=0;r<this.size;++r)this.setAt(r,e[r]);return this}shrinkToFit(){if(this.size===0)return;let t=[];if(this._bucketFirst!==this._bucketLast){if(this._bucketFirst<this._bucketLast)for(let e=this._bucketFirst;e<=this._bucketLast;++e)t.push(this._buckets[e]);else{for(let e=this._bucketFirst;e<this._bucketCount;++e)t.push(this._buckets[e]);for(let e=0;e<=this._bucketLast;++e)t.push(this._buckets[e])}this._bucketFirst=0,this._bucketLast=t.length-1,this._buckets=t}}find(t){for(let e=0;e<this.size;++e){let r=this.getAt(e);if(t(r,e,this))return r}}indexOf(t){for(let e=0;e<this.size;++e)if(this.getAt(e)===t)return e;return-1}toArray(){let t=[];for(let e=0;e<this.size;++e)t.push(this.getAt(e));return t}*[Symbol.iterator](){for(let t=0;t<this.size;++t)yield this.getAt(t)}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new h([],this._bucketSize),r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new h([],this._bucketSize),r=0;for(let i of this)e.push(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}_reallocate(t){let e=[],r=t||this._bucketCount>>1||1;for(let i=0;i<r;++i)e[i]=new Array(this._bucketSize);for(let i=this._bucketFirst;i<this._bucketCount;++i)e[e.length]=this._buckets[i];for(let i=0;i<this._bucketLast;++i)e[e.length]=this._buckets[i];e[e.length]=[...this._buckets[this._bucketLast]],this._bucketFirst=r,this._bucketLast=e.length-1;for(let i=0;i<r;++i)e[e.length]=new Array(this._bucketSize);this._buckets=e,this._bucketCount=e.length}_getBucketAndPosition(t){let e,r,i=this._firstInBucket+t;return e=this._bucketFirst+Math.floor(i/this._bucketSize),e>=this._bucketCount&&(e-=this._bucketCount),r=(i+1)%this._bucketSize-1,r<0&&(r=this._bucketSize-1),{bucketIndex:e,indexInBucket:r}}},we=class{constructor(t){l(this,"_nodes",{});l(this,"_capacity",Number.MAX_SAFE_INTEGER);l(this,"_first",-1);l(this,"_last",-1);l(this,"_size",0);t!==void 0&&(this._capacity=t)}get nodes(){return this._nodes}get capacity(){return this._capacity}get first(){return this._first}get last(){return this._last}get size(){return this._size}addFirst(t){if(this.size===0){let e=Math.floor(this.capacity/2);this._first=e,this._last=e}else this._first--;this.nodes[this.first]=t,this._size++}addLast(t){if(this.size===0){let e=Math.floor(this.capacity/2);this._first=e,this._last=e}else this._last++;this.nodes[this.last]=t,this._size++}popFirst(){if(!this.size)return;let t=this.getFirst();return delete this.nodes[this.first],this._first++,this._size--,t}getFirst(){if(this.size)return this.nodes[this.first]}popLast(){if(!this.size)return;let t=this.getLast();return delete this.nodes[this.last],this._last--,this._size--,t}getLast(){if(this.size)return this.nodes[this.last]}get(t){return this.nodes[this.first+t]||void 0}isEmpty(){return this.size<=0}};var L=class h{constructor(t,e){l(this,"options");l(this,"_elements",[]);let r=(i,n)=>{if(typeof i=="number"&&typeof n=="number")return i-n;throw new Error("The a, b params of compare function must be number")};if(e?this.options=e:this.options={comparator:r},t)for(let i of t)this.push(i)}get elements(){return this._elements}get size(){return this.elements.length}get leaf(){var t;return(t=this.elements[this.size-1])!=null?t:void 0}static heapify(t,e){return new h(t,e)}add(t){return this.push(t)}push(t){return this._elements.push(t),this._bubbleUp(this.elements.length-1),this}poll(){if(this.elements.length===0)return;let t=this.elements[0],e=this.elements.pop();return this.elements.length&&(this.elements[0]=e,this._sinkDown(0,this.elements.length>>1)),t}pop(){return this.poll()}peek(){return this.elements[0]}isEmpty(){return this.size===0}clear(){this._elements=[]}refill(t){this._elements=t,this.fix()}has(t){return this.elements.includes(t)}delete(t){let e=this.elements.indexOf(t);return e<0?!1:(e===0?this.pop():e===this.elements.length-1?this.elements.pop():(this.elements.splice(e,1,this.elements.pop()),this._bubbleUp(e),this._sinkDown(e,this.elements.length>>1)),!0)}dfs(t="pre"){let e=[],r=i=>{let n=2*i+1,s=n+1;i<this.size&&(t==="in"?(r(n),e.push(this.elements[i]),r(s)):t==="pre"?(e.push(this.elements[i]),r(n),r(s)):t==="post"&&(r(n),r(s),e.push(this.elements[i])))};return r(0),e}toArray(){return[...this.elements]}clone(){let t=new h([],this.options);return t._elements=[...this.elements],t}sort(){let t=[],e=this.clone();for(;e.size!==0;){let r=e.poll();r&&t.push(r)}return t}fix(){for(let t=Math.floor(this.size/2);t>=0;t--)this._sinkDown(t,this.elements.length>>1)}*[Symbol.iterator](){for(let t of this.elements)yield t}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=new h([],this.options),r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t,e){let r=new h([],{comparator:e}),i=0;for(let n of this)r.add(t(n,i,this)),i++;return r}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}_bubbleUp(t){let e=this.elements[t];for(;t>0;){let r=t-1>>1,i=this.elements[r];if(this.options.comparator(i,e)<=0)break;this.elements[t]=i,t=r}this.elements[t]=e}_sinkDown(t,e){let r=this.elements[t];for(;t<e;){let i=t<<1|1,n=i+1,s=this.elements[i];if(n<this.elements.length&&this.options.comparator(s,this.elements[n])>0&&(i=n,s=this.elements[n]),this.options.comparator(s,r)>=0)break;this.elements[t]=s,t=i}this.elements[t]=r}},de=class{constructor(t,e=0){l(this,"element");l(this,"degree");l(this,"left");l(this,"right");l(this,"child");l(this,"parent");l(this,"marked");this.element=t,this.degree=e,this.marked=!1}},Ce=class{constructor(t){l(this,"_root");l(this,"_size",0);l(this,"_min");l(this,"_comparator");if(this.clear(),this._comparator=t||this._defaultComparator,typeof this.comparator!="function")throw new Error("FibonacciHeap constructor: given comparator should be a function.")}get root(){return this._root}get size(){return this._size}get min(){return this._min}get comparator(){return this._comparator}clear(){this._root=void 0,this._min=void 0,this._size=0}add(t){return this.push(t)}push(t){let e=this.createNode(t);return e.left=e,e.right=e,this.mergeWithRoot(e),(!this.min||this.comparator(e.element,this.min.element)<=0)&&(this._min=e),this._size++,this}peek(){return this.min?this.min.element:void 0}consumeLinkedList(t){let e=[];if(!t)return e;let r=t,i=!1;for(;!(r===t&&i);)r===t&&(i=!0),r&&(e.push(r),r=r.right);return e}mergeWithChild(t,e){t.child?(e.right=t.child.right,e.left=t.child,t.child.right.left=e,t.child.right=e):t.child=e}poll(){return this.pop()}pop(){if(this.size===0)return;let t=this.min;if(t.child){let e=this.consumeLinkedList(t.child);for(let r of e)this.mergeWithRoot(r),r.parent=void 0}return this.removeFromRoot(t),t===t.right?(this._min=void 0,this._root=void 0):(this._min=t.right,this._consolidate()),this._size--,t.element}merge(t){if(t.size!==0){if(this.root&&t.root){let e=this.root,r=t.root,i=e.right,n=r.left;e.right=r,r.left=e,i.left=n,n.right=i}(!this.min||t.min&&this.comparator(t.min.element,this.min.element)<0)&&(this._min=t.min),this._size+=t.size,t.clear()}}createNode(t){return new de(t)}_defaultComparator(t,e){return t<e?-1:t>e?1:0}mergeWithRoot(t){this.root?(t.right=this.root.right,t.left=this.root,this.root.right.left=t,this.root.right=t):this._root=t}removeFromRoot(t){this.root===t&&(this._root=t.right),t.left&&(t.left.right=t.right),t.right&&(t.right.left=t.left)}_link(t,e){this.removeFromRoot(t),t.left=t,t.right=t,this.mergeWithChild(e,t),e.degree++,t.parent=e}_consolidate(){let t=new Array(this.size),e=this.consumeLinkedList(this.root),r,i,n,s;for(let o of e){for(r=o,n=r.degree;t[n];)i=t[n],this.comparator(r.element,i.element)>0&&(s=r,r=i,i=s),this._link(i,r),t[n]=void 0,n++;t[n]=r}for(let o=0;o<this.size;o++)t[o]&&this.comparator(t[o].element,this.min.element)<=0&&(this._min=t[o])}};var Ke=class extends L{constructor(t,e={comparator:(r,i)=>{if(typeof r=="number"&&typeof i=="number")return i-r;throw new Error("The a, b params of compare function must be number")}}){super(t,e)}};var Re=class extends L{constructor(t,e={comparator:(r,i)=>{if(typeof r=="number"&&typeof i=="number")return r-i;throw new Error("The a, b params of compare function must be number")}}){super(t,e)}};var I=class extends L{constructor(t,e){super(t,e)}};var Se=class extends I{constructor(t,e={comparator:(r,i)=>{if(typeof r=="number"&&typeof i=="number")return r-i;throw new Error("The a, b params of compare function must be number")}}){super(t,e)}};var Me=class extends I{constructor(t,e={comparator:(r,i)=>{if(typeof r=="number"&&typeof i=="number")return i-r;throw new Error("The a, b params of compare function must be number")}}){super(t,e)}};var k=class{constructor(t,e){l(this,"key");l(this,"value");this.key=t,this.value=e}},D=class{constructor(t,e){l(this,"value");l(this,"weight");l(this,"_hashCode");this.weight=t!==void 0?t:1,this.value=e,this._hashCode=ge()}get hashCode(){return this._hashCode}},A=class{constructor(){l(this,"_vertices",new Map)}get vertices(){return this._vertices}getVertex(t){return this._vertices.get(t)||void 0}hasVertex(t){return this._vertices.has(this._getVertexKey(t))}addVertex(t,e){if(t instanceof k)return this._addVertexOnly(t);{let r=this.createVertex(t,e);return this._addVertexOnly(r)}}deleteVertex(t){let e=this._getVertexKey(t);return this._vertices.delete(e)}removeManyVertices(t){let e=[];for(let r of t)e.push(this.deleteVertex(r));return e.length>0}hasEdge(t,e){return!!this.getEdge(t,e)}addEdge(t,e,r,i){if(t instanceof D)return this._addEdgeOnly(t);if(e instanceof k||typeof e=="string"||typeof e=="number"){if(!(this.hasVertex(t)&&this.hasVertex(e)))return!1;t instanceof k&&(t=t.key),e instanceof k&&(e=e.key);let n=this.createEdge(t,e,r,i);return this._addEdgeOnly(n)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(t,e,r){let i=this.getEdge(t,e);return i?(i.weight=r,!0):!1}getAllPathsBetween(t,e,r=1e3){let i=[],n=this._getVertex(t),s=this._getVertex(e);if(!(n&&s))return[];let o=[];for(o.push({vertex:n,path:[n]});o.length>0;){let{vertex:a,path:d}=o.pop();if(a===s&&(i.push(d),i.length>=r))return i;let u=this.getNeighbors(a);for(let f of u)if(!d.includes(f)){let N=[...d,f];o.push({vertex:f,path:N})}}return i}getPathSumWeight(t){var r;let e=0;for(let i=0;i<t.length;i++)e+=((r=this.getEdge(t[i],t[i+1]))==null?void 0:r.weight)||0;return e}getMinCostBetween(t,e,r){if(r===void 0&&(r=!1),r){let i=this.getAllPathsBetween(t,e),n=1/0;for(let s of i)n=Math.min(this.getPathSumWeight(s),n);return n}else{let i=this._getVertex(e),n=this._getVertex(t);if(!(n&&i))return;let s=new Map,o=new O([n]);s.set(n,!0);let a=0;for(;o.size>0;){for(let d=0;d<o.size;d++){let u=o.shift();if(u===i)return a;if(u!==void 0){let f=this.getNeighbors(u);for(let N of f)s.has(N)||(s.set(N,!0),o.push(N))}}a++}return}}getMinPathBetween(t,e,r,i=!1){var n,s;if(r===void 0&&(r=!1),r)if(i){let o=this.getAllPathsBetween(t,e,1e4),a=1/0,d=-1,u=0;for(let f of o){let N=this.getPathSumWeight(f);N<a&&(a=N,d=u),u++}return o[d]||void 0}else return(s=(n=this.dijkstra(t,e,!0,!0))==null?void 0:n.minPath)!=null?s:[];else{let o=[],a=this._getVertex(t),d=this._getVertex(e);if(!(a&&d))return[];let u=(f,N,y,g)=>{if(y.add(f),f===N){o=[a,...g];return}let x=this.getNeighbors(f);for(let V of x)y.has(V)||(g.push(V),u(V,N,y,g),g.pop());y.delete(f)};return u(a,d,new Set,[]),o}}dijkstraWithoutHeap(t,e,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1),e===void 0&&(e=void 0);let n=1/0,s,o=[],a=[],d=this._vertices,u=new Map,f=new Set,N=new Map,y=this._getVertex(t),g=e?this._getVertex(e):void 0;if(!y)return;for(let p of d){let c=p[1];c instanceof k&&u.set(c,1/0)}u.set(y,0),N.set(y,void 0);let x=()=>{let p=1/0,c;for(let[T,m]of u)f.has(T)||m<p&&(p=m,c=T);return c},V=p=>{for(let c of d){let T=c[1];if(T instanceof k){let m=[T],b=N.get(T);for(;b;)m.push(b),b=N.get(b);let _=m.reverse();c[1]===p&&(o=_),a.push(_)}}};for(let p=1;p<d.size;p++){let c=x();if(c){if(f.add(c),g&&g===c)return r&&(n=u.get(g)||1/0),i&&V(g),{distMap:u,preMap:N,seen:f,paths:a,minDist:n,minPath:o};let T=this.getNeighbors(c);for(let m of T)if(!f.has(m)){let b=this.getEdge(c,m);if(b){let _=u.get(c),E=u.get(m);_!==void 0&&E!==void 0&&b.weight+_<E&&(u.set(m,b.weight+_),N.set(m,c))}}}}return r&&u.forEach((p,c)=>{c!==y&&p<n&&(n=p,i&&(s=c))}),i&&V(s),{distMap:u,preMap:N,seen:f,paths:a,minDist:n,minPath:o}}dijkstra(t,e,r,i){var p;r===void 0&&(r=!1),i===void 0&&(i=!1),e===void 0&&(e=void 0);let n=1/0,s,o=[],a=[],d=this._vertices,u=new Map,f=new Set,N=new Map,y=this._getVertex(t),g=e?this._getVertex(e):void 0;if(!y)return;for(let c of d){let T=c[1];T instanceof k&&u.set(T,1/0)}let x=new I([],{comparator:(c,T)=>c.key-T.key});x.add({key:0,value:y}),u.set(y,0),N.set(y,void 0);let V=c=>{for(let T of d){let m=T[1];if(m instanceof k){let b=[m],_=N.get(m);for(;_;)b.push(_),_=N.get(_);let E=b.reverse();T[1]===c&&(o=E),a.push(E)}}};for(;x.size>0;){let c=x.poll(),T=c==null?void 0:c.key,m=c==null?void 0:c.value;if(T!==void 0&&m){if(f.add(m),g&&g===m)return r&&(n=u.get(g)||1/0),i&&V(g),{distMap:u,preMap:N,seen:f,paths:a,minDist:n,minPath:o};let b=this.getNeighbors(m);for(let _ of b)if(!f.has(_)){let E=(p=this.getEdge(m,_))==null?void 0:p.weight;if(typeof E=="number"){let v=u.get(_);v&&T+E<v&&(x.add({key:T+E,value:_}),N.set(_,m),u.set(_,T+E))}}}}return r&&u.forEach((c,T)=>{T!==y&&c<n&&(n=c,i&&(s=T))}),i&&V(s),{distMap:u,preMap:N,seen:f,paths:a,minDist:n,minPath:o}}bellmanFord(t,e,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1);let n=this._getVertex(t),s=[],o=new Map,a=new Map,d=1/0,u=[],f;if(e&&(f=!1),!n)return{hasNegativeCycle:f,distMap:o,preMap:a,paths:s,min:d,minPath:u};let N=this._vertices,y=N.size,g=this.edgeSet(),x=g.length;this._vertices.forEach(p=>{o.set(p,1/0)}),o.set(n,0);for(let p=1;p<y;++p)for(let c=0;c<x;++c){let T=this.getEndsOfEdge(g[c]);if(T){let[m,b]=T,_=g[c].weight,E=o.get(m),v=o.get(b);E!==void 0&&v!==void 0&&o.get(m)!==1/0&&E+_<v&&(o.set(b,E+_),i&&a.set(b,m))}}let V;if(r&&o.forEach((p,c)=>{c!==n&&p<d&&(d=p,i&&(V=c))}),i)for(let p of N){let c=p[1];if(c instanceof k){let T=[c],m=a.get(c);for(;m!==void 0;)T.push(m),m=a.get(m);let b=T.reverse();p[1]===V&&(u=b),s.push(b)}}for(let p=0;p<x;++p){let c=this.getEndsOfEdge(g[p]);if(c){let[T]=c,m=g[p].weight,b=o.get(T);b&&b!==1/0&&b+m<b&&(f=!0)}}return{hasNegativeCycle:f,distMap:o,preMap:a,paths:s,min:d,minPath:u}}floydWarshall(){var n;let t=[...this._vertices],e=t.length,r=[],i=[];for(let s=0;s<e;s++){r[s]=[],i[s]=[];for(let o=0;o<e;o++)i[s][o]=void 0}for(let s=0;s<e;s++)for(let o=0;o<e;o++)r[s][o]=((n=this.getEdge(t[s][1],t[o][1]))==null?void 0:n.weight)||1/0;for(let s=0;s<e;s++)for(let o=0;o<e;o++)for(let a=0;a<e;a++)r[o][a]>r[o][s]+r[s][a]&&(r[o][a]=r[o][s]+r[s][a],i[o][a]=t[s][1]);return{costs:r,predecessor:i}}tarjan(t=!1,e=!1,r=!0,i=!1){t===void 0&&(t=!1),e===void 0&&(e=!1),r===void 0&&(r=!1),i===void 0&&(i=!1);let s=new Map,o=new Map,a=this._vertices;a.forEach(p=>{s.set(p,-1),o.set(p,1/0)});let[d]=a.values(),u=[],f=[],N=0,y=(p,c)=>{N++,s.set(p,N),o.set(p,N);let T=this.getNeighbors(p),m=0;for(let b of T)if(b!==c){s.get(b)===-1&&(m++,y(b,p));let _=o.get(b),E=o.get(p);E!==void 0&&_!==void 0&&o.set(p,Math.min(E,_));let v=s.get(p);if(_!==void 0&&v!==void 0&&(t&&(p===d&&m>=2||p!==d&&_>=v)&&u.push(p),e&&_>v)){let ne=this.getEdge(p,b);ne&&f.push(ne)}}};y(d,void 0);let g=new Map,x=()=>{let p=new Map;return o.forEach((c,T)=>{var m;p.has(c)?(m=p.get(c))==null||m.push(T):p.set(c,[T])}),p};r&&(g=x());let V=new Map;if(i){let p=new Map;p.size<1&&(p=x()),p.forEach((c,T)=>{c.length>1&&V.set(T,c)})}return{dfnMap:s,lowMap:o,bridges:f,cutVertexes:u,SCCs:g,cycles:V}}getDFNMap(){return this.tarjan(!1,!1,!1,!1).dfnMap}getLowMap(){return this.tarjan(!1,!1,!1,!1).lowMap}getCycles(){return this.tarjan(!1,!1,!1,!0).cycles}getCutVertexes(){return this.tarjan(!0,!1,!1,!1).cutVertexes}getSCCs(){return this.tarjan(!1,!1,!0,!1).SCCs}getBridges(){return this.tarjan(!1,!0,!1,!1).bridges}*[Symbol.iterator](){for(let t of this._vertices.values())yield[t.key,t.value]}forEach(t){let e=0;for(let r of this)t(r,e,this._vertices),e++}filter(t){let e=[],r=0;for(let i of this)t(i,r,this._vertices)&&e.push(i),r++;return e}map(t){let e=[],r=0;for(let i of this)e.push(t(i,r,this._vertices)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this._vertices),i++;return r}_addVertexOnly(t){return this.hasVertex(t)?!1:(this._vertices.set(t.key,t),!0)}_getVertex(t){let e=this._getVertexKey(t);return this._vertices.get(e)||void 0}_getVertexKey(t){return t instanceof k?t.key:t}};var H=class extends k{constructor(t,e){super(t,e)}},j=class extends D{constructor(e,r,i,n){super(i,n);l(this,"src");l(this,"dest");this.src=e,this.dest=r}},Z=class extends A{constructor(){super();l(this,"_outEdgeMap",new Map);l(this,"_inEdgeMap",new Map)}get outEdgeMap(){return this._outEdgeMap}get inEdgeMap(){return this._inEdgeMap}createVertex(e,r){return new H(e,r)}createEdge(e,r,i,n){return new j(e,r,i!=null?i:1,n)}getEdge(e,r){let i=[];if(e!==void 0&&r!==void 0){let n=this._getVertex(e),s=this._getVertex(r);if(n&&s){let o=this._outEdgeMap.get(n);o&&(i=o.filter(a=>a.dest===s.key))}}return i[0]||void 0}deleteEdgeSrcToDest(e,r){let i=this._getVertex(e),n=this._getVertex(r),s;if(!i||!n)return;let o=this._outEdgeMap.get(i);o&&S(o,d=>d.dest===n.key);let a=this._inEdgeMap.get(n);return a&&(s=S(a,d=>d.src===i.key)[0]||void 0),s}deleteEdge(e){let r,i=this._getVertex(e.src),n=this._getVertex(e.dest);if(i&&n){let s=this._outEdgeMap.get(i);s&&s.length>0&&S(s,a=>a.src===i.key);let o=this._inEdgeMap.get(n);o&&o.length>0&&(r=S(o,a=>a.dest===n.key)[0])}return r}deleteEdgesBetween(e,r){let i=[];if(e&&r){let n=this.deleteEdgeSrcToDest(e,r),s=this.deleteEdgeSrcToDest(r,e);n&&i.push(n),s&&i.push(s)}return i}incomingEdgesOf(e){let r=this._getVertex(e);return r?this.inEdgeMap.get(r)||[]:[]}outgoingEdgesOf(e){let r=this._getVertex(e);return r?this._outEdgeMap.get(r)||[]:[]}degreeOf(e){return this.outDegreeOf(e)+this.inDegreeOf(e)}inDegreeOf(e){return this.incomingEdgesOf(e).length}outDegreeOf(e){return this.outgoingEdgesOf(e).length}edgesOf(e){return[...this.outgoingEdgesOf(e),...this.incomingEdgesOf(e)]}getEdgeSrc(e){return this._getVertex(e.src)}getEdgeDest(e){return this._getVertex(e.dest)}getDestinations(e){if(e===void 0)return[];let r=[],i=this.outgoingEdgesOf(e);for(let n of i){let s=this.getEdgeDest(n);s&&r.push(s)}return r}topologicalSort(e){e=e!=null?e:"key";let r=new Map;for(let o of this.vertices)r.set(o[1],0);let i=[],n=!1,s=o=>{r.set(o,1);let a=this.getDestinations(o);for(let d of a){let u=r.get(d);u===0?s(d):u===1&&(n=!0)}r.set(o,2),i.push(o)};for(let o of this.vertices)r.get(o[1])===0&&s(o[1]);if(!n)return e==="key"&&(i=i.map(o=>o instanceof H?o.key:o)),i.reverse()}edgeSet(){let e=[];return this._outEdgeMap.forEach(r=>{e=[...e,...r]}),e}getNeighbors(e){let r=[],i=this._getVertex(e);if(i){let n=this.outgoingEdgesOf(i);for(let s of n){let o=this._getVertex(s.dest);o&&r.push(o)}}return r}getEndsOfEdge(e){if(!this.hasEdge(e.src,e.dest))return;let r=this._getVertex(e.src),i=this._getVertex(e.dest);if(r&&i)return[r,i]}_addEdgeOnly(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let r=this._getVertex(e.src),i=this._getVertex(e.dest);if(r&&i){let n=this._outEdgeMap.get(r);n?n.push(e):this._outEdgeMap.set(r,[e]);let s=this._inEdgeMap.get(i);return s?s.push(e):this._inEdgeMap.set(i,[e]),!0}else return!1}};var he=class extends k{constructor(t,e){super(t,e)}},le=class extends D{constructor(e,r,i,n){super(i,n);l(this,"vertices");this.vertices=[e,r]}},Le=class extends A{constructor(){super();l(this,"_edges");this._edges=new Map}get edges(){return this._edges}createVertex(e,r){return new he(e,r!=null?r:e)}createEdge(e,r,i,n){return new le(e,r,i!=null?i:1,n)}getEdge(e,r){var n;let i=[];if(e!==void 0&&r!==void 0){let s=this._getVertex(e),o=this._getVertex(r);s&&o&&(i=(n=this._edges.get(s))==null?void 0:n.filter(a=>a.vertices.includes(o.key)))}return i&&i[0]||void 0}deleteEdgeBetween(e,r){let i=this._getVertex(e),n=this._getVertex(r);if(!i||!n)return;let s=this._edges.get(i),o;s&&(o=S(s,d=>d.vertices.includes(n.key))[0]||void 0);let a=this._edges.get(n);return a&&S(a,d=>d.vertices.includes(i.key)),o}deleteEdge(e){return this.deleteEdgeBetween(e.vertices[0],e.vertices[1])}degreeOf(e){var i;let r=this._getVertex(e);return r&&((i=this._edges.get(r))==null?void 0:i.length)||0}edgesOf(e){let r=this._getVertex(e);return r?this._edges.get(r)||[]:[]}edgeSet(){let e=new Set;return this._edges.forEach(r=>{r.forEach(i=>{e.add(i)})}),[...e]}getNeighbors(e){let r=[],i=this._getVertex(e);if(i){let n=this.edgesOf(i);for(let s of n){let o=this._getVertex(s.vertices.filter(a=>a!==i.key)[0]);o&&r.push(o)}}return r}getEndsOfEdge(e){if(!this.hasEdge(e.vertices[0],e.vertices[1]))return;let r=this._getVertex(e.vertices[0]),i=this._getVertex(e.vertices[1]);if(r&&i)return[r,i]}_addEdgeOnly(e){for(let r of e.vertices){let i=this._getVertex(r);if(i===void 0)return!1;if(i){let n=this._edges.get(i);n?n.push(e):this._edges.set(i,[e])}}return!0}};var ue=class extends H{constructor(e,r,i,n){super(e,r);l(this,"lat");l(this,"long");this.lat=i,this.long=n}},fe=class extends j{constructor(t,e,r,i){super(t,e,r,i)}},Ie=class extends Z{constructor(e,r){super();l(this,"_origin",[0,0]);l(this,"_bottomRight");this._origin=e,this._bottomRight=r}get origin(){return this._origin}get bottomRight(){return this._bottomRight}createVertex(e,r,i=this.origin[0],n=this.origin[1]){return new ue(e,r,i,n)}createEdge(e,r,i,n){return new fe(e,r,i,n)}};var $=(e=>(e.ITERATIVE="ITERATIVE",e.RECURSIVE="RECURSIVE",e))($||{}),ce=(o=>(o.ROOT="ROOT",o.LEFT="LEFT",o.RIGHT="RIGHT",o.ROOT_LEFT="ROOT_LEFT",o.ROOT_RIGHT="ROOT_RIGHT",o.ISOLATED="ISOLATED",o.MAL_NODE="MAL_NODE",o))(ce||{});var ze=(e=>(e[e.RED=1]="RED",e[e.BLACK=0]="BLACK",e))(ze||{});var De=(r=>(r.lt="lt",r.eq="eq",r.gt="gt",r))(De||{});var B=class{constructor(t,e){l(this,"key");l(this,"value");l(this,"parent");l(this,"_left");l(this,"_right");this.key=t,this.value=e}get left(){return this._left}set left(t){t&&(t.parent=this),this._left=t}get right(){return this._right}set right(t){t&&(t.parent=this),this._right=t}get familyPosition(){let t=this;return this.parent?this.parent.left===t?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===t?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},ee=class h{constructor(t,e){l(this,"iterationType","ITERATIVE");l(this,"_root");l(this,"_size");l(this,"_defaultOneParamCallback",t=>t.key);if(e){let{iterationType:r}=e;r&&(this.iterationType=r)}this._size=0,t&&this.addMany(t)}get root(){return this._root}get size(){return this._size}createNode(t,e){return new B(t,e)}createTree(t){return new h([],w({iterationType:this.iterationType},t))}isNode(t){return t instanceof B}exemplarToNode(t){if(t===void 0)return;let e;if(t===null)e=null;else if(this.isEntry(t)){let[r,i]=t;if(r===void 0)return;r===null?e=null:e=this.createNode(r,i)}else if(this.isNode(t))e=t;else if(this.isNodeKey(t))e=this.createNode(t);else return;return e}isEntry(t){return Array.isArray(t)&&t.length===2}add(t){let e,r=this.exemplarToNode(t);if(r===void 0)return;let i=(n,s)=>{let o=new O([n]);for(;o.size>0;){let a=o.shift();if(s&&a.key===s.key)return this._replaceNode(a,s),s;let d=this._addTo(s,a);if(d!==void 0)return d;a.left&&o.push(a.left),a.right&&o.push(a.right)}};return this.root?e=i(this.root,r):(this._setRoot(r),r?this._size=1:this._size=0,e=this.root),e}addMany(t){let e=[];for(let r of t)e.push(this.add(r));return e}refill(t){this.clear(),this.addMany(t)}delete(t,e=this._defaultOneParamCallback){let r=[];if(!this.root)return r;(!e||e===this._defaultOneParamCallback)&&t instanceof B&&(e=a=>a);let i=this.getNode(t,e);if(!i)return r;let n=i!=null&&i.parent?i.parent:null,s,o=i;if(i.left){if(i.left){let a=this.getRightMost(i.left);if(a){let d=a.parent;o=this._swapProperties(i,a),d&&(d.right===a?d.right=a.left:d.left=a.left,s=d)}}}else if(!n)this._setRoot(null);else{let{familyPosition:a}=i;a==="LEFT"||a==="ROOT_LEFT"?n.left=i.right:(a==="RIGHT"||a==="ROOT_RIGHT")&&(n.right=i.right),s=n}return this._size=this.size-1,r.push({deleted:o,needBalanced:s}),r}getDepth(t,e=this.root){t=this.ensureNode(t),e=this.ensureNode(e);let r=0;for(;t!=null&&t.parent;){if(t===e)return r;r++,t=t.parent}return r}getHeight(t=this.root,e=this.iterationType){if(t=this.ensureNode(t),!t)return-1;if(e==="RECURSIVE"){let r=i=>{if(!i)return-1;let n=r(i.left),s=r(i.right);return Math.max(n,s)+1};return r(t)}else{let r=[{node:t,depth:0}],i=0;for(;r.length>0;){let{node:n,depth:s}=r.pop();n.left&&r.push({node:n.left,depth:s+1}),n.right&&r.push({node:n.right,depth:s+1}),i=Math.max(i,s)}return i}}getMinHeight(t=this.root,e=this.iterationType){var r,i,n;if(t=this.ensureNode(t),!t)return-1;if(e==="RECURSIVE"){let s=o=>{if(!o||!o.left&&!o.right)return 0;let a=s(o.left),d=s(o.right);return Math.min(a,d)+1};return s(t)}else{let s=[],o=t,a=null,d=new Map;for(;s.length>0||o;)if(o)s.push(o),o=o.left;else if(o=s[s.length-1],!o.right||a===o.right){if(o=s.pop(),o){let u=o.left&&(r=d.get(o.left))!=null?r:-1,f=o.right&&(i=d.get(o.right))!=null?i:-1;d.set(o,1+Math.min(u,f)),a=o,o=null}}else o=o.right;return(n=d.get(t))!=null?n:-1}}isPerfectlyBalanced(t=this.root){return this.getMinHeight(t)+1>=this.getHeight(t)}getNodes(t,e=this._defaultOneParamCallback,r=!1,i=this.root,n=this.iterationType){if((!e||e===this._defaultOneParamCallback)&&t instanceof B&&(e=o=>o),i=this.ensureNode(i),!i)return[];let s=[];if(n==="RECURSIVE"){let o=a=>{e(a)===t&&(s.push(a),r)||!a.left&&!a.right||(a.left&&o(a.left),a.right&&o(a.right))};o(i)}else{let o=new O([i]);for(;o.size>0;){let a=o.shift();if(a){if(e(a)===t&&(s.push(a),r))return s;a.left&&o.push(a.left),a.right&&o.push(a.right)}}}return s}has(t,e=this._defaultOneParamCallback,r=this.root,i=this.iterationType){return(!e||e===this._defaultOneParamCallback)&&t instanceof B&&(e=n=>n),this.getNodes(t,e,!0,r,i).length>0}getNode(t,e=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var n;return(!e||e===this._defaultOneParamCallback)&&t instanceof B&&(e=s=>s),(n=this.getNodes(t,e,!0,r,i)[0])!=null?n:null}getNodeByKey(t,e="ITERATIVE"){if(this.root)if(e==="RECURSIVE"){let r=i=>{if(i.key===t)return i;if(!(!i.left&&!i.right)){if(i.left)return r(i.left);if(i.right)return r(i.right)}};return r(this.root)}else{let r=new O([this.root]);for(;r.size>0;){let i=r.shift();if(i){if(i.key===t)return i;i.left&&r.push(i.left),i.right&&r.push(i.right)}}}}ensureNode(t,e="ITERATIVE"){return this.isNodeKey(t)?this.getNodeByKey(t,e):t}get(t,e=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var n,s;return(!e||e===this._defaultOneParamCallback)&&t instanceof B&&(e=o=>o),(s=(n=this.getNode(t,e,r,i))==null?void 0:n.value)!=null?s:void 0}clear(){this._setRoot(void 0),this._size=0}isEmpty(){return this.size===0}getPathToRoot(t,e=!0){let r=[];if(t=this.ensureNode(t),!t)return r;for(;t.parent;)r.push(t),t=t.parent;return r.push(t),e?r.reverse():r}getLeftMost(t=this.root,e=this.iterationType){if(t=this.ensureNode(t),!t)return t;if(e==="RECURSIVE"){let r=i=>this.isRealNode(i.left)?r(i.left):i;return r(t)}else{let r=oe(i=>this.isRealNode(i.left)?r.cont(i.left):i);return r(t)}}getRightMost(t=this.root,e=this.iterationType){if(t=this.ensureNode(t),!t)return t;if(e==="RECURSIVE"){let r=i=>this.isRealNode(i.right)?r(i.right):i;return r(t)}else{let r=oe(i=>this.isRealNode(i.right)?r.cont(i.right):i);return r(t)}}isSubtreeBST(t,e=this.iterationType){if(t=this.ensureNode(t),!t)return!0;if(e==="RECURSIVE"){let r=(i,n,s)=>i?i.key<=n||i.key>=s?!1:r(i.left,n,i.key)&&r(i.right,i.key,s):!0;return r(t,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER)}else{let r=[],i=Number.MIN_SAFE_INTEGER,n=t;for(;n||r.length>0;){for(;n;)r.push(n),n=n.left;if(n=r.pop(),!n||i>=n.key)return!1;i=n.key,n=n.right}return!0}}isBST(t=this.iterationType){return this.root===null?!0:this.isSubtreeBST(this.root,t)}subTreeTraverse(t=this._defaultOneParamCallback,e=this.root,r=this.iterationType,i=!1){e=this.ensureNode(e);let n=[];if(!e)return n;if(r==="RECURSIVE"){let s=o=>{o!==void 0&&(n.push(t(o)),i?(o&&this.isNodeOrNull(o.left)&&s(o.left),o&&this.isNodeOrNull(o.right)&&s(o.right)):(o&&o.left&&s(o.left),o&&o.right&&s(o.right)))};s(e)}else{let s=[e];for(;s.length>0;){let o=s.pop();o!==void 0&&(n.push(t(o)),i?(o&&this.isNodeOrNull(o.right)&&s.push(o.right),o&&this.isNodeOrNull(o.left)&&s.push(o.left)):(o&&o.right&&s.push(o.right),o&&o.left&&s.push(o.left)))}}return n}isRealNode(t){return t instanceof B&&t.key.toString()!=="NaN"}isNIL(t){return t instanceof B&&t.key.toString()==="NaN"}isNodeOrNull(t){return this.isRealNode(t)||t===null}isNodeKey(t){return typeof t=="number"}dfs(t=this._defaultOneParamCallback,e="in",r=this.root,i="ITERATIVE",n=!1){if(r=this.ensureNode(r),!r)return[];let s=[];if(i==="RECURSIVE"){let o=a=>{switch(e){case"in":n?(a&&this.isNodeOrNull(a.left)&&o(a.left),this.isNodeOrNull(a)&&s.push(t(a)),a&&this.isNodeOrNull(a.right)&&o(a.right)):(a&&a.left&&o(a.left),this.isRealNode(a)&&s.push(t(a)),a&&a.right&&o(a.right));break;case"pre":n?(this.isNodeOrNull(a)&&s.push(t(a)),a&&this.isNodeOrNull(a.left)&&o(a.left),a&&this.isNodeOrNull(a.right)&&o(a.right)):(this.isRealNode(a)&&s.push(t(a)),a&&a.left&&o(a.left),a&&a.right&&o(a.right));break;case"post":n?(a&&this.isNodeOrNull(a.left)&&o(a.left),a&&this.isNodeOrNull(a.right)&&o(a.right),this.isNodeOrNull(a)&&s.push(t(a))):(a&&a.left&&o(a.left),a&&a.right&&o(a.right),this.isRealNode(a)&&s.push(t(a)));break}};o(r)}else{let o=[{opt:0,node:r}];for(;o.length>0;){let a=o.pop();if(!(a===void 0||this.isNIL(a.node))){if(n){if(a.node===void 0)continue}else if(a.node===null||a.node===void 0)continue;if(a.opt===1)s.push(t(a.node));else switch(e){case"in":a.node&&o.push({opt:0,node:a.node.right}),o.push({opt:1,node:a.node}),a.node&&o.push({opt:0,node:a.node.left});break;case"pre":a.node&&o.push({opt:0,node:a.node.right}),a.node&&o.push({opt:0,node:a.node.left}),o.push({opt:1,node:a.node});break;case"post":o.push({opt:1,node:a.node}),a.node&&o.push({opt:0,node:a.node.right}),a.node&&o.push({opt:0,node:a.node.left});break;default:a.node&&o.push({opt:0,node:a.node.right}),o.push({opt:1,node:a.node}),a.node&&o.push({opt:0,node:a.node.left});break}}}}return s}bfs(t=this._defaultOneParamCallback,e=this.root,r=this.iterationType,i=!1){if(e=this.ensureNode(e),!e)return[];let n=[];if(r==="RECURSIVE"){let s=new O([e]),o=a=>{if(s.size===0)return;let d=s.shift();n.push(t(d)),i?(d&&this.isNodeOrNull(d.left)&&s.push(d.left),d&&this.isNodeOrNull(d.right)&&s.push(d.right)):(d.left&&s.push(d.left),d.right&&s.push(d.right)),o(a+1)};o(0)}else{let s=new O([e]);for(;s.size>0;){let o=s.size;for(let a=0;a<o;a++){let d=s.shift();n.push(t(d)),i?(d&&this.isNodeOrNull(d.left)&&s.push(d.left),d&&this.isNodeOrNull(d.right)&&s.push(d.right)):(d.left&&s.push(d.left),d.right&&s.push(d.right))}}}return n}listLevels(t=this._defaultOneParamCallback,e=this.root,r=this.iterationType,i=!1){e=this.ensureNode(e);let n=[];if(!e)return n;if(r==="RECURSIVE"){let s=(o,a)=>{n[a]||(n[a]=[]),n[a].push(t(o)),i?(o&&this.isNodeOrNull(o.left)&&s(o.left,a+1),o&&this.isNodeOrNull(o.right)&&s(o.right,a+1)):(o&&o.left&&s(o.left,a+1),o&&o.right&&s(o.right,a+1))};s(e,0)}else{let s=[[e,0]];for(;s.length>0;){let o=s.pop(),[a,d]=o;n[d]||(n[d]=[]),n[d].push(t(a)),i?(a&&this.isNodeOrNull(a.right)&&s.push([a.right,d+1]),a&&this.isNodeOrNull(a.left)&&s.push([a.left,d+1])):(a&&a.right&&s.push([a.right,d+1]),a&&a.left&&s.push([a.left,d+1]))}}return n}getPredecessor(t){if(t=this.ensureNode(t),!!this.isRealNode(t))if(t.left){let e=t.left;for(;!this.isRealNode(e)||this.isRealNode(e.right)&&e.right!==t;)e&&(e=e.right);return e}else return t}getSuccessor(t){if(t=this.ensureNode(t),!t)return;if(t.right)return this.getLeftMost(t.right);let e=t.parent;for(;e&&e&&t===e.right;)t=e,e=e.parent;return e}morris(t=this._defaultOneParamCallback,e="in",r=this.root){if(r=this.ensureNode(r),r===null)return[];let i=[],n=r,s=a=>{let d=null,u=null;for(;a;)u=a.right,a.right=d,d=a,a=u;return d},o=a=>{let d=s(a),u=d;for(;u;)i.push(t(u)),u=u.right;s(d)};switch(e){case"in":for(;n;){if(n.left){let a=this.getPredecessor(n);if(a.right)a.right=null;else{a.right=n,n=n.left;continue}}i.push(t(n)),n=n.right}break;case"pre":for(;n;){if(n.left){let a=this.getPredecessor(n);if(a.right)a.right=null;else{a.right=n,i.push(t(n)),n=n.left;continue}}else i.push(t(n));n=n.right}break;case"post":for(;n;){if(n.left){let a=this.getPredecessor(n);if(a.right===null){a.right=n,n=n.left;continue}else a.right=null,o(n.left)}n=n.right}o(r);break}return i}forEach(t){for(let e of this)t(e,this)}filter(t){let e=this.createTree();for(let[r,i]of this)t([r,i],this)&&e.add([r,i]);return e}map(t){let e=this.createTree();for(let[r,i]of this)e.add([r,t([r,i],this)]);return e}reduce(t,e){let r=e;for(let[i,n]of this)r=t(r,[i,n],this);return r}*[Symbol.iterator](t=this.root){if(t)if(this.iterationType==="ITERATIVE"){let e=[],r=t;for(;r||e.length>0;){for(;r&&!isNaN(r.key);)e.push(r),r=r.left;r=e.pop(),r&&!isNaN(r.key)&&(yield[r.key,r.value],r=r.right)}}else t.left&&!isNaN(t.key)&&(yield*q(this[Symbol.iterator](t.left))),yield[t.key,t.value],t.right&&!isNaN(t.key)&&(yield*q(this[Symbol.iterator](t.right)))}print(t=this.root,e){let r=w({isShowUndefined:!1,isShowNull:!1,isShowRedBlackNIL:!1},e);if(t=this.ensureNode(t),!t)return;r.isShowUndefined&&console.log(`U for undefined
2
2
  `),r.isShowNull&&console.log(`N for null
3
3
  `),r.isShowRedBlackNIL&&console.log(`S for Sentinel Node
4
- `),(n=>{let[s,,,]=this._displayAux(n,r);for(let o of s)console.log(o)})(t)}_displayAux(t,e){let{isShowNull:r,isShowUndefined:i,isShowRedBlackNIL:n}=e,s=[["\u2500"],1,0,0];if(t===null&&!r)return s;if(t===void 0&&!i)return s;if(t!=null&&isNaN(t.key)&&!n)return s;if(t!=null){let a=t.key,h=isNaN(a)?"S":a.toString(),u=h.length;return o(h,u,this._displayAux(t.left,e),this._displayAux(t.right,e))}else{let a=t===void 0?"U":"N",h=a.length;return o(a,h,[[""],1,0,0],[[""],1,0,0])}function o(a,h,u,f){let[N,y,g,x]=u,[V,p,c,T]=f,m=" ".repeat(Math.max(0,x+1))+"_".repeat(Math.max(0,y-x-1))+a+"_".repeat(Math.max(0,T))+" ".repeat(Math.max(0,p-T)),b=(g>0?" ".repeat(x)+"/"+" ".repeat(y-x-1):" ".repeat(y))+" ".repeat(h)+(c>0?" ".repeat(T)+"\\"+" ".repeat(p-T-1):" ".repeat(p)),_=[m,b];for(let E=0;E<Math.max(g,c);E++){let v=E<g?N[E]:" ".repeat(y),ne=E<c?V[E]:" ".repeat(p);_.push(v+" ".repeat(h)+ne)}return[_,y+h+p,Math.max(g,c)+2,y+Math.floor(h/2)]}}_swapProperties(t,e){if(t=this.ensureNode(t),e=this.ensureNode(e),t&&e){let{key:r,value:i}=e,n=this.createNode(r,i);return n&&(e.key=t.key,e.value=t.value,t.key=n.key,t.value=n.value),e}}_replaceNode(t,e){return t.parent&&(t.parent.left===t?t.parent.left=e:t.parent.right===t&&(t.parent.right=e)),e.left=t.left,e.right=t.right,e.parent=t.parent,this.root===t&&(this._root=e),e}_addTo(t,e){if(this.isNodeKey(e)&&(e=this.getNode(e)),e)return e.left===void 0?(e.left=t,t&&(this._size=this.size+1),e.left):e.right===void 0?(e.right=t,t&&(this._size=this.size+1),e.right):void 0}_setRoot(t){t&&(t.parent=void 0),this._root=t}};var z=class extends k{constructor(e,r){super(e,r);d(this,"parent");d(this,"_left");d(this,"_right");this.parent=void 0,this._left=void 0,this._right=void 0}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},H=class l extends ee{constructor(e,r){super([],r);d(this,"_root");d(this,"comparator",(e,r)=>e-r);if(r){let{comparator:i}=r;i&&(this.comparator=i)}this._root=void 0,e&&this.addMany(e)}get root(){return this._root}createNode(e,r){return new z(e,r)}createTree(e){return new l([],C({iterationType:this.iterationType,comparator:this.comparator},e))}add(e){if(e==null)return;let r;if(e instanceof z)r=e;else if(this.isNodeKey(e))r=this.createNode(e);else if(this.isEntry(e)){let[n,s]=e;if(n==null)return;r=this.createNode(n,s)}else return;if(this.root===void 0)return this._setRoot(r),this._size++,this.root;let i=this.root;for(;i!==void 0;){if(this._compare(i.key,r.key)==="eq")return this._replaceNode(i,r),r;if(this._compare(i.key,r.key)==="gt"){if(i.left===void 0)return i.left=r,r.parent=i,this._size++,r;i=i.left}else{if(i.right===void 0)return i.right=r,r.parent=i,this._size++,r;i=i.right}}}addMany(e,r=!0,i=this.iterationType){let n=[];if(!r){for(let f of e){let N=this.add(f);n.push(N)}return n}let s=[],o=f=>f==null?!1:!(this.isEntry(f)&&(f[0]===void 0||f[0]===null));for(let f of e)o(f)&&s.push(f);let a=[];a=s.sort((f,N)=>{let y,g;return this.isEntry(f)?y=f[0]:this.isRealNode(f)?y=f.key:y=f,this.isEntry(N)?g=N[0]:this.isRealNode(N)?g=N.key:g=N,y-g});let h=f=>{if(f.length===0)return;let N=Math.floor((f.length-1)/2),y=this.add(f[N]);n.push(y),h(f.slice(0,N)),h(f.slice(N+1))},u=()=>{let N=[[0,a.length-1]];for(;N.length>0;){let y=N.pop();if(y){let[g,x]=y;if(g<=x){let V=g+Math.floor((x-g)/2),p=this.add(a[V]);n.push(p),N.push([V+1,x]),N.push([g,V-1])}}}};return i==="RECURSIVE"?h(a):u(),n}lastKey(e=this.root,r=this.iterationType){var i,n,s,o,a,h;return this._compare(0,1)==="lt"?(n=(i=this.getRightMost(e,r))==null?void 0:i.key)!=null?n:0:this._compare(0,1)==="gt"?(o=(s=this.getLeftMost(e,r))==null?void 0:s.key)!=null?o:0:(h=(a=this.getRightMost(e,r))==null?void 0:a.key)!=null?h:0}getNodeByKey(e,r="ITERATIVE"){if(this.root)if(r==="RECURSIVE"){let i=n=>{if(n.key===e)return n;if(!(!n.left&&!n.right)){if(this._compare(n.key,e)==="gt"&&n.left)return i(n.left);if(this._compare(n.key,e)==="lt"&&n.right)return i(n.right)}};return i(this.root)}else{let i=new O([this.root]);for(;i.size>0;){let n=i.shift();if(n){if(this._compare(n.key,e)==="eq")return n;this._compare(n.key,e)==="gt"&&n.left&&i.push(n.left),this._compare(n.key,e)==="lt"&&n.right&&i.push(n.right)}}}}ensureNode(e,r="ITERATIVE"){return this.isNodeKey(e)?this.getNodeByKey(e,r):e}getNodes(e,r=this._defaultOneParamCallback,i=!1,n=this.root,s=this.iterationType){if(n=this.ensureNode(n),!n)return[];let o=[];if(s==="RECURSIVE"){let a=h=>{r(h)===e&&(o.push(h),i)||!h.left&&!h.right||(r===this._defaultOneParamCallback?(this._compare(h.key,e)==="gt"&&h.left&&a(h.left),this._compare(h.key,e)==="lt"&&h.right&&a(h.right)):(h.left&&a(h.left),h.right&&a(h.right)))};a(n)}else{let a=new O([n]);for(;a.size>0;){let h=a.shift();if(h){if(r(h)===e&&(o.push(h),i))return o;r===this._defaultOneParamCallback?(this._compare(h.key,e)==="gt"&&h.left&&a.push(h.left),this._compare(h.key,e)==="lt"&&h.right&&a.push(h.right)):(h.left&&a.push(h.left),h.right&&a.push(h.right))}}}return o}lesserOrGreaterTraverse(e=this._defaultOneParamCallback,r="lt",i=this.root,n=this.iterationType){i=this.ensureNode(i);let s=[];if(!i||!this.root)return s;let o=i.key;if(n==="RECURSIVE"){let a=h=>{this._compare(h.key,o)===r&&s.push(e(h)),!(!h.left&&!h.right)&&(h.left&&this._compare(h.left.key,o)===r&&a(h.left),h.right&&this._compare(h.right.key,o)===r&&a(h.right))};return a(this.root),s}else{let a=new O([this.root]);for(;a.size>0;){let h=a.shift();h&&(this._compare(h.key,o)===r&&s.push(e(h)),h.left&&this._compare(h.left.key,o)===r&&a.push(h.left),h.right&&this._compare(h.right.key,o)===r&&a.push(h.right))}return s}}perfectlyBalance(e=this.iterationType){let r=this.dfs(n=>n,"in"),i=r.length;if(this.clear(),r.length<1)return!1;if(e==="RECURSIVE"){let n=(s,o)=>{if(s>o)return;let a=s+Math.floor((o-s)/2),h=r[a];this.add([h.key,h.value]),n(s,a-1),n(a+1,o)};return n(0,i-1),!0}else{let n=[[0,i-1]];for(;n.length>0;){let s=n.pop();if(s){let[o,a]=s;if(o<=a){let h=o+Math.floor((a-o)/2),u=r[h];debugger;this.add([u.key,u.value]),n.push([h+1,a]),n.push([o,h-1])}}}return!0}}isAVLBalanced(e=this.iterationType){var i,n;if(!this.root)return!0;let r=!0;if(e==="RECURSIVE"){let s=o=>{if(!o)return 0;let a=s(o.left),h=s(o.right);return Math.abs(a-h)>1&&(r=!1),Math.max(a,h)+1};s(this.root)}else{let s=[],o=this.root,a,h=new Map;for(;s.length>0||o;)if(o)s.push(o),o=o.left;else if(o=s[s.length-1],!o.right||a===o.right){if(o=s.pop(),o){let u=o.left&&(i=h.get(o.left))!=null?i:-1,f=o.right&&(n=h.get(o.right))!=null?n:-1;if(Math.abs(u-f)>1)return!1;h.set(o,1+Math.max(u,f)),a=o,o=void 0}}else o=o.right}return r}_setRoot(e){e&&(e.parent=void 0),this._root=e}_compare(e,r){let i=this.comparator(e,r);return i>0?"gt":i<0?"lt":"eq"}};var Fe=class{constructor({frequency:t=0,max:e}){d(this,"_freq");d(this,"_max");d(this,"_freqMap");d(this,"_msb");d(this,"_negativeCount");this._freq=t,this._max=e,this._freqMap={0:0},this._msb=Ee(e),this._negativeCount=t<0?e:0}get freqMap(){return this._freqMap}get msb(){return this._msb}get negativeCount(){return this._negativeCount}get freq(){return this._freq}get max(){return this._max}readSingle(t){return this._checkIndex(t),this._readSingle(t)}update(t,e){this._checkIndex(t);let r=this._readSingle(t);this._update(t,e),this._updateNegativeCount(r,r+e)}writeSingle(t,e){this._checkIndex(t),this._writeSingle(t,e)}read(t){if(!Number.isInteger(t))throw new Error("Invalid count");return this._read(Math.max(Math.min(t,this.max),0))}lowerBound(t){if(this.negativeCount>0)throw new Error("Sequence is not non-descending");return this._binarySearch(t,(e,r)=>e<r)}upperBound(t){if(this.negativeCount>0)throw new Error("Must not be descending");return this._binarySearch(t,(e,r)=>e<=r)}getPrefixSum(t){this._checkIndex(t),t++;let e=0;for(;t>0;)e+=this._getFrequency(t),t-=t&-t;return e}_getFrequency(t){return t in this.freqMap?this.freqMap[t]:this.freq*(t&-t)}_updateFrequency(t,e){this.freqMap[t]=this._getFrequency(t)+e}_checkIndex(t){if(!Number.isInteger(t))throw new Error("Invalid index: Index must be an integer.");if(t<0||t>=this.max)throw new Error("Index out of range: Index must be within the range [0, this.max).")}_readSingle(t){t=t+1;let e=this._getFrequency(t),r=t-(t&-t);for(t--;t!==r;)e-=this._getFrequency(t),t-=t&-t;return e}_updateNegativeCount(t,e){t<0&&e>=0?this._negativeCount--:t>=0&&e<0&&this._negativeCount++}_update(t,e){for(t=t+1;t<=this.max;)this._updateFrequency(t,e),t+=t&-t}_writeSingle(t,e){let r=this._readSingle(t);this._update(t,e-r),this._updateNegativeCount(r,e)}_read(t){let e=t,r=0;for(;e;)r+=this._getFrequency(e),e-=e&-e;return r}_binarySearch(t,e){let r=0,i=this.msb<<1,n=t;for(;i>r+1;){let s=r+i>>1,o=this._getFrequency(s);s<=this.max&&e(o,n)?(n-=o,r=s):i=s}return r}};var U=class{constructor(t,e,r,i){d(this,"start",0);d(this,"end",0);d(this,"value");d(this,"sum",0);d(this,"left");d(this,"right");this.start=t,this.end=e,this.sum=r,this.value=i||void 0}},Ae=class{constructor(t,e,r){d(this,"_values",[]);d(this,"_start",0);d(this,"_end");d(this,"_root");e=e||0,r=r||t.length-1,this._values=t,this._start=e,this._end=r,t.length>0?this._root=this.build(e,r):(this._root=void 0,this._values=[])}get values(){return this._values}get start(){return this._start}get end(){return this._end}get root(){return this._root}build(t,e){if(t>e)return new U(t,e,0);if(t===e)return new U(t,e,this._values[t]);let r=t+Math.floor((e-t)/2),i=this.build(t,r),n=this.build(r+1,e),s=new U(t,e,i.sum+n.sum);return s.left=i,s.right=n,s}updateNode(t,e,r){let i=this.root||void 0;if(!i)return;let n=(s,o,a,h)=>{if(s.start===s.end&&s.start===o){s.sum=a,h!==void 0&&(s.value=h);return}let u=s.start+Math.floor((s.end-s.start)/2);o<=u?s.left&&n(s.left,o,a,h):s.right&&n(s.right,o,a,h),s.left&&s.right&&(s.sum=s.left.sum+s.right.sum)};n(i,t,e,r)}querySumByRange(t,e){let r=this.root||void 0;if(!r)return 0;if(t<0||e>=this.values.length||t>e)return NaN;let i=(n,s,o)=>{if(s<=n.start&&o>=n.end)return n.sum;let a=n.start+Math.floor((n.end-n.start)/2);if(o<=a)return n.left?i(n.left,s,o):NaN;if(s>a)return n.right?i(n.right,s,o):NaN;{let h=0,u=0;return n.left&&(h=i(n.left,s,a)),n.right&&(u=i(n.right,a+1,o)),h+u}};return i(r,t,e)}};var P=class extends z{constructor(e,r){super(e,r);d(this,"height");this.height=0}},te=class l extends H{constructor(t,e){super([],e),t&&super.addMany(t)}createNode(t,e){return new P(t,e)}createTree(t){return new l([],C({iterationType:this.iterationType,comparator:this.comparator},t))}add(t){if(t===null)return;let e=super.add(t);return e&&this._balancePath(e),e}delete(t,e=this._defaultOneParamCallback){t instanceof P&&(e=i=>i);let r=super.delete(t,e);for(let{needBalanced:i}of r)i&&this._balancePath(i);return r}_swapProperties(t,e){if(t=this.ensureNode(t),e=this.ensureNode(e),t&&e){let{key:r,value:i,height:n}=e,s=this.createNode(r,i);return s&&(s.height=n,e.key=t.key,e.value=t.value,e.height=t.height,t.key=s.key,t.value=s.value,t.height=s.height),e}}_balanceFactor(t){return t.right?t.left?t.right.height-t.left.height:+t.height:-t.height}_updateHeight(t){if(!t.left&&!t.right)t.height=0;else if(t.left)t.right?t.height=1+Math.max(t.right.height,t.left.height):t.height=1+t.left.height;else{let e=t.right?t.right.height:0;t.height=1+e}}_balancePath(t){let e=this.getPathToRoot(t,!1);for(let r=0;r<e.length;r++){let i=e[r];switch(this._updateHeight(i),this._balanceFactor(i)){case-2:i&&i.left&&(this._balanceFactor(i.left)<=0?this._balanceLL(i):this._balanceLR(i));break;case 2:i&&i.right&&(this._balanceFactor(i.right)>=0?this._balanceRR(i):this._balanceRL(i))}}}_balanceLL(t){let e=t.parent,r=t.left;t.parent=r,r&&r.right&&(r.right.parent=t),r&&(r.parent=e),t===this.root?r&&this._setRoot(r):(e==null?void 0:e.left)===t?e.left=r:e&&(e.right=r),r&&(t.left=r.right,r.right=t),this._updateHeight(t),r&&this._updateHeight(r)}_balanceLR(t){let e=t.parent,r=t.left,i;r&&(i=r.right),t&&(t.parent=i),r&&(r.parent=i),i&&(i.left&&(i.left.parent=r),i.right&&(i.right.parent=t),i.parent=e),t===this.root?i&&this._setRoot(i):e&&(e.left===t?e.left=i:e.right=i),i&&(t.left=i.right,r&&(r.right=i.left),i.left=r,i.right=t),this._updateHeight(t),r&&this._updateHeight(r),i&&this._updateHeight(i)}_balanceRR(t){let e=t.parent,r=t.right;t.parent=r,r&&(r.left&&(r.left.parent=t),r.parent=e),t===this.root?r&&this._setRoot(r):e&&(e.left===t?e.left=r:e.right=r),r&&(t.right=r.left,r.left=t),this._updateHeight(t),r&&this._updateHeight(r)}_balanceRL(t){let e=t.parent,r=t.right,i;r&&(i=r.left),t.parent=i,r&&(r.parent=i),i&&(i.left&&(i.left.parent=t),i.right&&(i.right.parent=r),i.parent=e),t===this.root?i&&this._setRoot(i):e&&(e.left===t?e.left=i:e.right=i),i&&(t.right=i.left),r&&i&&(r.left=i.right),i&&(i.left=t),i&&(i.right=r),this._updateHeight(t),r&&this._updateHeight(r),i&&this._updateHeight(i)}_replaceNode(t,e){return e.height=t.height,super._replaceNode(t,e)}};var G=class extends z{constructor(e,r,i=0){super(e,r);d(this,"color");this.color=i}},He=class l extends H{constructor(e,r){super([],r);d(this,"Sentinel",new G(NaN));d(this,"_root");d(this,"_size",0);this._root=this.Sentinel,e&&super.addMany(e)}get root(){return this._root}get size(){return this._size}createNode(e,r,i=0){return new G(e,r,i)}createTree(e){return new l([],C({iterationType:this.iterationType,comparator:this.comparator},e))}add(e){let r;if(this.isNodeKey(e))r=this.createNode(e,void 0,1);else if(e instanceof G)r=e;else{if(e==null)return;if(this.isEntry(e)){let[s,o]=e;if(s==null)return;r=this.createNode(s,o,1)}else return}r.left=this.Sentinel,r.right=this.Sentinel;let i,n=this.root;for(;n!==this.Sentinel;)if(i=n,n)if(r.key<n.key)n=n.left;else if(r.key>n.key)n=n==null?void 0:n.right;else{r!==n&&this._replaceNode(n,r);return}if(r.parent=i,i===void 0?this._setRoot(r):r.key<i.key?i.left=r:i.right=r,r.parent===void 0){r.color=0,this._size++;return}if(r.parent.parent===void 0){this._size++;return}this._fixInsert(r),this._size++}delete(e,r=this._defaultOneParamCallback){let i=[];return e===null||(s=>{let o=this.Sentinel,a,h;for(;s!==this.Sentinel;)s&&r(s)===e&&(o=s),s&&e&&r(s)<=e?s=s.right:s=s==null?void 0:s.left;if(o===this.Sentinel){this._size--;return}h=o;let u=h.color;o.left===this.Sentinel?(a=o.right,this._rbTransplant(o,o.right)):o.right===this.Sentinel?(a=o.left,this._rbTransplant(o,o.left)):(h=this.getLeftMost(o.right),u=h.color,a=h.right,h.parent===o?a.parent=h:(this._rbTransplant(h,h.right),h.right=o.right,h.right.parent=h),this._rbTransplant(o,h),h.left=o.left,h.left.parent=h,h.color=o.color),u===0&&this._fixDelete(a),this._size--})(this.root),i}isRealNode(e){return e!==this.Sentinel&&e!==void 0}getNode(e,r=this._defaultOneParamCallback,i=this.root,n=this.iterationType){var s;return e instanceof k&&(r=o=>o),i=this.ensureNode(i),(s=this.getNodes(e,r,!0,i,n)[0])!=null?s:void 0}getSuccessor(e){var i;if(e.right!==this.Sentinel)return(i=this.getLeftMost(e.right))!=null?i:void 0;let r=e.parent;for(;r!==this.Sentinel&&r!==void 0&&e===r.right;)e=r,r=r.parent;return r}getPredecessor(e){if(e.left!==this.Sentinel)return this.getRightMost(e.left);let r=e.parent;for(;r!==this.Sentinel&&e===r.left;)e=r,r=r.parent;return r}clear(){this._root=this.Sentinel,this._size=0}_setRoot(e){e&&(e.parent=void 0),this._root=e}_leftRotate(e){if(e.right){let r=e.right;e.right=r.left,r.left!==this.Sentinel&&r.left&&(r.left.parent=e),r.parent=e.parent,e.parent===void 0?this._setRoot(r):e===e.parent.left?e.parent.left=r:e.parent.right=r,r.left=e,e.parent=r}}_rightRotate(e){if(e.left){let r=e.left;e.left=r.right,r.right!==this.Sentinel&&r.right&&(r.right.parent=e),r.parent=e.parent,e.parent===void 0?this._setRoot(r):e===e.parent.right?e.parent.right=r:e.parent.left=r,r.right=e,e.parent=r}}_fixDelete(e){let r;for(;e!==this.root&&e.color===0;)e.parent&&e===e.parent.left?(r=e.parent.right,r.color===1&&(r.color=0,e.parent.color=1,this._leftRotate(e.parent),r=e.parent.right),r.left!==void 0&&r.left.color===0&&r.right&&r.right.color===0?(r.color=1,e=e.parent):(r.right&&r.right.color===0&&(r.left&&(r.left.color=0),r.color=1,this._rightRotate(r),r=e.parent.right),r&&(r.color=e.parent.color),e.parent.color=0,r&&r.right&&(r.right.color=0),this._leftRotate(e.parent),e=this.root)):(r=e.parent.left,r.color===1&&(r.color=0,e.parent.color=1,this._rightRotate(e.parent),r=e.parent.left),r&&r.right&&r.right.color===0&&r.right.color===0?(r.color=1,e=e.parent):(r&&r.left&&r.left.color===0&&(r.right&&(r.right.color=0),r.color=1,this._leftRotate(r),r=e.parent.left),r&&(r.color=e.parent.color),e.parent.color=0,r&&r.left&&(r.left.color=0),this._rightRotate(e.parent),e=this.root));e.color=0}_rbTransplant(e,r){e.parent===void 0?this._setRoot(r):e===e.parent.left?e.parent.left=r:e.parent.right=r,r.parent=e.parent}_fixInsert(e){let r;for(;e.parent&&e.parent.color===1&&(e.parent.parent&&e.parent===e.parent.parent.right?(r=e.parent.parent.left,r&&r.color===1?(r.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.left&&(e=e.parent,this._rightRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._leftRotate(e.parent.parent))):(r=e.parent.parent.right,r&&r.color===1?(r.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.right&&(e=e.parent,this._leftRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._rightRotate(e.parent.parent))),e!==this.root););this.root.color=0}_replaceNode(e,r){return r.color=e.color,super._replaceNode(e,r)}};var re=class extends P{constructor(e,r,i=1){super(e,r);d(this,"count");this.count=i}},Pe=class l extends te{constructor(e,r){super([],r);d(this,"_count",0);e&&this.addMany(e)}get count(){let e=0;return this.subTreeTraverse(r=>e+=r.count),e}createNode(e,r,i){return new re(e,r,i)}createTree(e){return new l([],C({iterationType:this.iterationType,comparator:this.comparator},e))}add(e,r=1){let i;if(e==null)return;if(e instanceof re)i=e;else if(this.isNodeKey(e))i=this.createNode(e,void 0,r);else if(this.isEntry(e)){let[o,a]=e;if(o==null)return;i=this.createNode(o,a,r)}else return;let n=(i==null?void 0:i.count)||0,s=super.add(i);return s&&(this._count+=n),s}addMany(e){return super.addMany(e)}perfectlyBalance(e=this.iterationType){let r=this.dfs(n=>n,"in"),i=r.length;if(r.length<1)return!1;if(this.clear(),e==="RECURSIVE"){let n=(s,o)=>{if(s>o)return;let a=s+Math.floor((o-s)/2),h=r[a];this.add([h.key,h.value],h.count),n(s,a-1),n(a+1,o)};return n(0,i-1),!0}else{let n=[[0,i-1]];for(;n.length>0;){let s=n.pop();if(s){let[o,a]=s;if(o<=a){let h=o+Math.floor((a-o)/2),u=r[h];this.add([u.key,u.value],u.count),n.push([h+1,a]),n.push([o,h-1])}}}return!0}}delete(e,r=this._defaultOneParamCallback,i=!1){var u;let n=[];if(!this.root)return n;let s=(u=this.getNode(e,r))!=null?u:void 0;if(!s)return n;let o=s!=null&&s.parent?s.parent:void 0,a,h=s;if(s.count>1&&!i)s.count--,this._count--;else{if(s.left){let f=s.left?this.getRightMost(s.left):void 0;if(f){let N=f.parent;h=this._swapProperties(s,f),N&&(N.right===f?N.right=f.left:N.left=f.left,a=N)}}else if(!o)s.right!==void 0&&this._setRoot(s.right);else{let{familyPosition:f}=s;f==="LEFT"||f==="ROOT_LEFT"?o.left=s.right:(f==="RIGHT"||f==="ROOT_RIGHT")&&(o.right=s.right),a=o}this._size=this.size-1,h&&(this._count-=h.count)}return n.push({deleted:h,needBalanced:a}),a&&this._balancePath(a),n}clear(){super.clear(),this._count=0}_addTo(e,r){if(r=this.ensureNode(r),r)return r.left===void 0?(r.left=e,e!==void 0&&(this._size=this.size+1,this._count+=e.count),r.left):r.right===void 0?(r.right=e,e!==void 0&&(this._size=this.size+1,this._count+=e.count),r.right):void 0}_swapProperties(e,r){if(e=this.ensureNode(e),r=this.ensureNode(r),e&&r){let{key:i,value:n,count:s,height:o}=r,a=this.createNode(i,n,s);return a&&(a.height=o,r.key=e.key,r.value=e.value,r.count=e.count,r.height=e.height,e.key=a.key,e.value=a.value,e.count=a.count,e.height=a.height),r}}_replaceNode(e,r){return r.count=e.count+r.count,super._replaceNode(e,r)}};var qe=class l{constructor(t,e,r){d(this,"key");d(this,"value");d(this,"children");this.key=t,this.value=e||void 0,this.children=r||[]}addChildren(t){this.children||(this.children=[]),t instanceof l?this.children.push(t):this.children=this.children.concat(t)}getHeight(){let t=0;if(this){let e=(r,i)=>{i>t&&(t=i);let{children:n}=r;if(n)for(let s=0,o=n.length;s<o;s++)e(n[s],i+1)};e(this,0)}return t}};var je=class{constructor(t){d(this,"_matrix");let{row:e,col:r,initialVal:i}=t;this._matrix=new Array(e).fill(void 0).map(()=>new Array(r).fill(i||0))}toArray(){return this._matrix}};var W=class l{constructor(t=0,e=0,r=1){this.x=t;this.y=e;this.w=r}get isZero(){return this.x===0&&this.y===0}get length(){return Math.sqrt(this.x*this.x+this.y*this.y)}get lengthSq(){return this.x*this.x+this.y*this.y}get rounded(){return new l(Math.round(this.x),Math.round(this.y))}static add(t,e){return new l(t.x+e.x,t.y+e.y)}static subtract(t,e){return new l(t.x-e.x,t.y-e.y)}static subtractValue(t,e){return new l(t.x-e,t.y-e)}static multiply(t,e){return new l(t.x*e,t.y*e)}static divide(t,e){return new l(t.x/e,t.y/e)}static equals(t,e){return t.x===e.x&&t.y===e.y}static equalsRounded(t,e,r=12){let i=l.abs(l.subtract(t,e));return i.x<r&&i.y<r}static normalize(t){let e=t.length;return e>2220446049250313e-31?l.divide(t,e):t}static truncate(t,e){return t.length>e?l.multiply(l.normalize(t),e):t}static perp(t){return new l(-t.y,t.x)}static reverse(t){return new l(-t.x,-t.y)}static abs(t){return new l(Math.abs(t.x),Math.abs(t.y))}static dot(t,e){return t.x*e.x+t.y*e.y}static distance(t,e){let r=e.y-t.y,i=e.x-t.x;return Math.sqrt(r*r+i*i)}static distanceSq(t,e){let r=e.y-t.y,i=e.x-t.x;return r*r+i*i}static sign(t,e){return t.y*e.x>t.x*e.y?-1:1}static angle(t){let e=new l(0,-1),r=Math.acos(l.dot(t,e)/(t.length*e.length));return l.sign(t,e)===1?Math.PI*2-r:r}static random(t,e){let r=Math.floor(Math.random()*t-t/2),i=Math.floor(Math.random()*e-e/2);return new l(r,i)}zero(){this.x=0,this.y=0}};var Ue=class l{constructor(t){d(this,"_matrix");typeof t=="undefined"?this._matrix=l.identity:t instanceof W?(this._matrix=l.identity,this._matrix[0][0]=t.x,this._matrix[1][0]=t.y,this._matrix[2][0]=t.w):this._matrix=t}static get empty(){return[[],[],[]]}static get identity(){return[[1,0,0],[0,1,0],[0,0,1]]}get m(){return this._matrix}static add(t,e){let r=l.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++)r[i][n]=t.m[i][n]+e.m[i][n];return new l(r)}static subtract(t,e){let r=l.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++)r[i][n]=t.m[i][n]-e.m[i][n];return new l(r)}static multiply(t,e){let r=l.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++){r[i][n]=0;for(let s=0;s<3;s++)r[i][n]+=t.m[i][s]*e.m[s][n]}return new l(r)}static multiplyByValue(t,e){let r=l.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++)r[i][n]=t.m[i][n]*e;return new l(r)}static multiplyByVector(t,e){return l.multiply(t,new l(e)).toVector()}static view(t,e){let i=t/2,n=e/2,s=Math.cos(Math.PI);return new l([[1,0,i],[0,s*1,n],[0,0,1]])}static scale(t){return l.multiplyByValue(new l,t)}static rotate(t){let e=Math.cos(t),r=Math.sin(t);return new l([[e,-r,0],[r,e,0],[0,0,1]])}static translate(t){return new l([[1,0,t.x],[0,1,t.y],[0,0,t.w]])}toVector(){return new W(this._matrix[0][0],this._matrix[1][0])}};var pe=class l{constructor(t,e){d(this,"direction");d(this,"turn");this.direction=t,this.turn=()=>new l(e[t],e)}},Ge=class{constructor({matrix:t,turning:e,onMove:r,init:{cur:i,charDir:n,VISITED:s}}){d(this,"onMove");d(this,"_matrix");d(this,"_cur");d(this,"_character");d(this,"_VISITED");this._matrix=t,this._cur=i,this._character=new pe(n,e),this.onMove=r,this.onMove&&this.onMove(this._cur),this._VISITED=s,this._matrix[this._cur[0]][this._cur[1]]=this._VISITED}start(){for(;this.check(this._character.direction)||this.check(this._character.turn().direction);){let{direction:t}=this._character;this.check(t)?this.move(t):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(t){let e,r,i=this._matrix,[n,s]=this._cur;switch(t){case"up":if(r=i[n-1],!r)return!1;e=r[s];break;case"right":e=i[n][s+1];break;case"down":if(r=i[n+1],!r)return!1;e=r[s];break;case"left":e=i[n][s-1];break}return e!==void 0&&e!==this._VISITED}move(t){switch(t){case"up":this._cur[0]--;break;case"right":this._cur[1]++;break;case"down":this._cur[0]++;break;case"left":this._cur[1]--;break}let[e,r]=this._cur;this._matrix[e][r]=this._VISITED,this.onMove&&this.onMove(this._cur)}};var ie=class{constructor(t){d(this,"key");d(this,"children");d(this,"isEnd");this.key=t,this.isEnd=!1,this.children=new Map}},We=class l{constructor(t,e=!0){d(this,"_size");d(this,"_caseSensitive");d(this,"_root");if(this._root=new ie(""),this._caseSensitive=e,this._size=0,t)for(let r of t)this.add(r)}get size(){return this._size}get caseSensitive(){return this._caseSensitive}get root(){return this._root}add(t){t=this._caseProcess(t);let e=this.root,r=!1;for(let i of t){let n=e.children.get(i);n||(n=new ie(i),e.children.set(i,n)),e=n}return e.isEnd||(r=!0,e.isEnd=!0,this._size++),r}has(t){t=this._caseProcess(t);let e=this.root;for(let r of t){let i=e.children.get(r);if(!i)return!1;e=i}return e.isEnd}delete(t){t=this._caseProcess(t);let e=!1,r=(i,n)=>{let s=t[n],o=i.children.get(s);return o?n===t.length-1?o.isEnd?(o.children.size>0?o.isEnd=!1:i.children.delete(s),e=!0,!0):!1:r(o,n+1)&&!i.isEnd&&o.children.size===0?(i.children.delete(s),!0):!1:!1};return r(this.root,0),e&&this._size--,e}getHeight(){let t=this.root,e=0;if(t){let r=(i,n)=>{n>e&&(e=n);let{children:s}=i;if(s)for(let o of s.entries())r(o[1],n+1)};r(t,0)}return e}hasPurePrefix(t){t=this._caseProcess(t);let e=this.root;for(let r of t){let i=e.children.get(r);if(!i)return!1;e=i}return!e.isEnd}hasPrefix(t){t=this._caseProcess(t);let e=this.root;for(let r of t){let i=e.children.get(r);if(!i)return!1;e=i}return!0}hasCommonPrefix(t){t=this._caseProcess(t);let e="",r=i=>{if(e+=i.key,e!==t&&!i.isEnd)if(i&&i.children&&i.children.size===1)r(Array.from(i.children.values())[0]);else return};return r(this.root),e===t}getLongestCommonPrefix(){let t="",e=r=>{if(t+=r.key,!r.isEnd)if(r&&r.children&&r.children.size===1)e(Array.from(r.children.values())[0]);else return};return e(this.root),t}getWords(t="",e=Number.MAX_SAFE_INTEGER,r=!1){t=this._caseProcess(t);let i=[],n=0;function s(a,h){for(let u of a.children.keys()){let f=a.children.get(u);f!==void 0&&s(f,h.concat(u))}if(a.isEnd){if(n>e-1)return;i.push(h),n++}}let o=this.root;if(t)for(let a of t){let h=o.children.get(a);h&&(o=h)}return(r||o!==this.root)&&s(o,t),i}*[Symbol.iterator](){function*t(e,r){e.isEnd&&(yield r);for(let[i,n]of e.children)yield*q(t(n,r+i))}yield*q(t(this.root,""))}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=[],r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new l,r=0;for(let i of this)e.add(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}_caseProcess(t){return this._caseSensitive||(t=t.toLowerCase()),t}};return rt(ot);})();
4
+ `),(n=>{let[s,,,]=this._displayAux(n,r);for(let o of s)console.log(o)})(t)}_displayAux(t,e){let{isShowNull:r,isShowUndefined:i,isShowRedBlackNIL:n}=e,s=[["\u2500"],1,0,0];if(t===null&&!r)return s;if(t===void 0&&!i)return s;if(t!=null&&isNaN(t.key)&&!n)return s;if(t!=null){let a=t.key,d=isNaN(a)?"S":a.toString(),u=d.length;return o(d,u,this._displayAux(t.left,e),this._displayAux(t.right,e))}else{let a=t===void 0?"U":"N",d=a.length;return o(a,d,[[""],1,0,0],[[""],1,0,0])}function o(a,d,u,f){let[N,y,g,x]=u,[V,p,c,T]=f,m=" ".repeat(Math.max(0,x+1))+"_".repeat(Math.max(0,y-x-1))+a+"_".repeat(Math.max(0,T))+" ".repeat(Math.max(0,p-T)),b=(g>0?" ".repeat(x)+"/"+" ".repeat(y-x-1):" ".repeat(y))+" ".repeat(d)+(c>0?" ".repeat(T)+"\\"+" ".repeat(p-T-1):" ".repeat(p)),_=[m,b];for(let E=0;E<Math.max(g,c);E++){let v=E<g?N[E]:" ".repeat(y),ne=E<c?V[E]:" ".repeat(p);_.push(v+" ".repeat(d)+ne)}return[_,y+d+p,Math.max(g,c)+2,y+Math.floor(d/2)]}}_swapProperties(t,e){if(t=this.ensureNode(t),e=this.ensureNode(e),t&&e){let{key:r,value:i}=e,n=this.createNode(r,i);return n&&(e.key=t.key,e.value=t.value,t.key=n.key,t.value=n.value),e}}_replaceNode(t,e){return t.parent&&(t.parent.left===t?t.parent.left=e:t.parent.right===t&&(t.parent.right=e)),e.left=t.left,e.right=t.right,e.parent=t.parent,this.root===t&&(this._root=e),e}_addTo(t,e){if(this.isNodeKey(e)&&(e=this.getNode(e)),e)return e.left===void 0?(e.left=t,t&&(this._size=this.size+1),e.left):e.right===void 0?(e.right=t,t&&(this._size=this.size+1),e.right):void 0}_setRoot(t){t&&(t.parent=void 0),this._root=t}};var z=class extends B{constructor(e,r){super(e,r);l(this,"parent");l(this,"_left");l(this,"_right");this.parent=void 0,this._left=void 0,this._right=void 0}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},P=class h extends ee{constructor(e,r){super([],r);l(this,"_root");l(this,"comparator",(e,r)=>e-r);if(r){let{comparator:i}=r;i&&(this.comparator=i)}this._root=void 0,e&&this.addMany(e)}get root(){return this._root}createNode(e,r){return new z(e,r)}createTree(e){return new h([],w({iterationType:this.iterationType,comparator:this.comparator},e))}isNode(e){return e instanceof z}exemplarToNode(e){let r;if(e!=null){if(this.isNode(e))r=e;else if(this.isEntry(e)){let[i,n]=e;if(i==null)return;r=this.createNode(i,n)}else if(this.isNodeKey(e))r=this.createNode(e);else return;return r}}add(e){let r=this.exemplarToNode(e);if(r===void 0)return;if(this.root===void 0)return this._setRoot(r),this._size++,this.root;let i=this.root;for(;i!==void 0;){if(this._compare(i.key,r.key)==="eq")return this._replaceNode(i,r),r;if(this._compare(i.key,r.key)==="gt"){if(i.left===void 0)return i.left=r,r.parent=i,this._size++,r;i=i.left}else{if(i.right===void 0)return i.right=r,r.parent=i,this._size++,r;i=i.right}}}addMany(e,r=!0,i=this.iterationType){let n=[];if(!r){for(let f of e){let N=this.add(f);n.push(N)}return n}let s=[],o=f=>f==null?!1:!(this.isEntry(f)&&(f[0]===void 0||f[0]===null));for(let f of e)o(f)&&s.push(f);let a=[];a=s.sort((f,N)=>{let y,g;return this.isEntry(f)?y=f[0]:this.isRealNode(f)?y=f.key:y=f,this.isEntry(N)?g=N[0]:this.isRealNode(N)?g=N.key:g=N,y-g});let d=f=>{if(f.length===0)return;let N=Math.floor((f.length-1)/2),y=this.add(f[N]);n.push(y),d(f.slice(0,N)),d(f.slice(N+1))},u=()=>{let N=[[0,a.length-1]];for(;N.length>0;){let y=N.pop();if(y){let[g,x]=y;if(g<=x){let V=g+Math.floor((x-g)/2),p=this.add(a[V]);n.push(p),N.push([V+1,x]),N.push([g,V-1])}}}};return i==="RECURSIVE"?d(a):u(),n}lastKey(e=this.root,r=this.iterationType){var i,n,s,o,a,d;return this._compare(0,1)==="lt"?(n=(i=this.getRightMost(e,r))==null?void 0:i.key)!=null?n:0:this._compare(0,1)==="gt"?(o=(s=this.getLeftMost(e,r))==null?void 0:s.key)!=null?o:0:(d=(a=this.getRightMost(e,r))==null?void 0:a.key)!=null?d:0}getNodeByKey(e,r="ITERATIVE"){if(this.root)if(r==="RECURSIVE"){let i=n=>{if(n.key===e)return n;if(!(!n.left&&!n.right)){if(this._compare(n.key,e)==="gt"&&n.left)return i(n.left);if(this._compare(n.key,e)==="lt"&&n.right)return i(n.right)}};return i(this.root)}else{let i=new O([this.root]);for(;i.size>0;){let n=i.shift();if(n){if(this._compare(n.key,e)==="eq")return n;this._compare(n.key,e)==="gt"&&n.left&&i.push(n.left),this._compare(n.key,e)==="lt"&&n.right&&i.push(n.right)}}}}ensureNode(e,r="ITERATIVE"){return this.isNodeKey(e)?this.getNodeByKey(e,r):e}getNodes(e,r=this._defaultOneParamCallback,i=!1,n=this.root,s=this.iterationType){if(n=this.ensureNode(n),!n)return[];let o=[];if(s==="RECURSIVE"){let a=d=>{r(d)===e&&(o.push(d),i)||!d.left&&!d.right||(r===this._defaultOneParamCallback?(this._compare(d.key,e)==="gt"&&d.left&&a(d.left),this._compare(d.key,e)==="lt"&&d.right&&a(d.right)):(d.left&&a(d.left),d.right&&a(d.right)))};a(n)}else{let a=new O([n]);for(;a.size>0;){let d=a.shift();if(d){if(r(d)===e&&(o.push(d),i))return o;r===this._defaultOneParamCallback?(this._compare(d.key,e)==="gt"&&d.left&&a.push(d.left),this._compare(d.key,e)==="lt"&&d.right&&a.push(d.right)):(d.left&&a.push(d.left),d.right&&a.push(d.right))}}}return o}lesserOrGreaterTraverse(e=this._defaultOneParamCallback,r="lt",i=this.root,n=this.iterationType){i=this.ensureNode(i);let s=[];if(!i||!this.root)return s;let o=i.key;if(n==="RECURSIVE"){let a=d=>{this._compare(d.key,o)===r&&s.push(e(d)),!(!d.left&&!d.right)&&(d.left&&this._compare(d.left.key,o)===r&&a(d.left),d.right&&this._compare(d.right.key,o)===r&&a(d.right))};return a(this.root),s}else{let a=new O([this.root]);for(;a.size>0;){let d=a.shift();d&&(this._compare(d.key,o)===r&&s.push(e(d)),d.left&&this._compare(d.left.key,o)===r&&a.push(d.left),d.right&&this._compare(d.right.key,o)===r&&a.push(d.right))}return s}}perfectlyBalance(e=this.iterationType){let r=this.dfs(n=>n,"in"),i=r.length;if(this.clear(),r.length<1)return!1;if(e==="RECURSIVE"){let n=(s,o)=>{if(s>o)return;let a=s+Math.floor((o-s)/2),d=r[a];this.add([d.key,d.value]),n(s,a-1),n(a+1,o)};return n(0,i-1),!0}else{let n=[[0,i-1]];for(;n.length>0;){let s=n.pop();if(s){let[o,a]=s;if(o<=a){let d=o+Math.floor((a-o)/2),u=r[d];debugger;this.add([u.key,u.value]),n.push([d+1,a]),n.push([o,d-1])}}}return!0}}isAVLBalanced(e=this.iterationType){var i,n;if(!this.root)return!0;let r=!0;if(e==="RECURSIVE"){let s=o=>{if(!o)return 0;let a=s(o.left),d=s(o.right);return Math.abs(a-d)>1&&(r=!1),Math.max(a,d)+1};s(this.root)}else{let s=[],o=this.root,a,d=new Map;for(;s.length>0||o;)if(o)s.push(o),o=o.left;else if(o=s[s.length-1],!o.right||a===o.right){if(o=s.pop(),o){let u=o.left&&(i=d.get(o.left))!=null?i:-1,f=o.right&&(n=d.get(o.right))!=null?n:-1;if(Math.abs(u-f)>1)return!1;d.set(o,1+Math.max(u,f)),a=o,o=void 0}}else o=o.right}return r}_setRoot(e){e&&(e.parent=void 0),this._root=e}_compare(e,r){let i=this.comparator(e,r);return i>0?"gt":i<0?"lt":"eq"}};var Fe=class{constructor({frequency:t=0,max:e}){l(this,"_freq");l(this,"_max");l(this,"_freqMap");l(this,"_msb");l(this,"_negativeCount");this._freq=t,this._max=e,this._freqMap={0:0},this._msb=Ee(e),this._negativeCount=t<0?e:0}get freqMap(){return this._freqMap}get msb(){return this._msb}get negativeCount(){return this._negativeCount}get freq(){return this._freq}get max(){return this._max}readSingle(t){return this._checkIndex(t),this._readSingle(t)}update(t,e){this._checkIndex(t);let r=this._readSingle(t);this._update(t,e),this._updateNegativeCount(r,r+e)}writeSingle(t,e){this._checkIndex(t),this._writeSingle(t,e)}read(t){if(!Number.isInteger(t))throw new Error("Invalid count");return this._read(Math.max(Math.min(t,this.max),0))}lowerBound(t){if(this.negativeCount>0)throw new Error("Sequence is not non-descending");return this._binarySearch(t,(e,r)=>e<r)}upperBound(t){if(this.negativeCount>0)throw new Error("Must not be descending");return this._binarySearch(t,(e,r)=>e<=r)}getPrefixSum(t){this._checkIndex(t),t++;let e=0;for(;t>0;)e+=this._getFrequency(t),t-=t&-t;return e}_getFrequency(t){return t in this.freqMap?this.freqMap[t]:this.freq*(t&-t)}_updateFrequency(t,e){this.freqMap[t]=this._getFrequency(t)+e}_checkIndex(t){if(!Number.isInteger(t))throw new Error("Invalid index: Index must be an integer.");if(t<0||t>=this.max)throw new Error("Index out of range: Index must be within the range [0, this.max).")}_readSingle(t){t=t+1;let e=this._getFrequency(t),r=t-(t&-t);for(t--;t!==r;)e-=this._getFrequency(t),t-=t&-t;return e}_updateNegativeCount(t,e){t<0&&e>=0?this._negativeCount--:t>=0&&e<0&&this._negativeCount++}_update(t,e){for(t=t+1;t<=this.max;)this._updateFrequency(t,e),t+=t&-t}_writeSingle(t,e){let r=this._readSingle(t);this._update(t,e-r),this._updateNegativeCount(r,e)}_read(t){let e=t,r=0;for(;e;)r+=this._getFrequency(e),e-=e&-e;return r}_binarySearch(t,e){let r=0,i=this.msb<<1,n=t;for(;i>r+1;){let s=r+i>>1,o=this._getFrequency(s);s<=this.max&&e(o,n)?(n-=o,r=s):i=s}return r}};var U=class{constructor(t,e,r,i){l(this,"start",0);l(this,"end",0);l(this,"value");l(this,"sum",0);l(this,"left");l(this,"right");this.start=t,this.end=e,this.sum=r,this.value=i||void 0}},Ae=class{constructor(t,e,r){l(this,"_values",[]);l(this,"_start",0);l(this,"_end");l(this,"_root");e=e||0,r=r||t.length-1,this._values=t,this._start=e,this._end=r,t.length>0?this._root=this.build(e,r):(this._root=void 0,this._values=[])}get values(){return this._values}get start(){return this._start}get end(){return this._end}get root(){return this._root}build(t,e){if(t>e)return new U(t,e,0);if(t===e)return new U(t,e,this._values[t]);let r=t+Math.floor((e-t)/2),i=this.build(t,r),n=this.build(r+1,e),s=new U(t,e,i.sum+n.sum);return s.left=i,s.right=n,s}updateNode(t,e,r){let i=this.root||void 0;if(!i)return;let n=(s,o,a,d)=>{if(s.start===s.end&&s.start===o){s.sum=a,d!==void 0&&(s.value=d);return}let u=s.start+Math.floor((s.end-s.start)/2);o<=u?s.left&&n(s.left,o,a,d):s.right&&n(s.right,o,a,d),s.left&&s.right&&(s.sum=s.left.sum+s.right.sum)};n(i,t,e,r)}querySumByRange(t,e){let r=this.root||void 0;if(!r)return 0;if(t<0||e>=this.values.length||t>e)return NaN;let i=(n,s,o)=>{if(s<=n.start&&o>=n.end)return n.sum;let a=n.start+Math.floor((n.end-n.start)/2);if(o<=a)return n.left?i(n.left,s,o):NaN;if(s>a)return n.right?i(n.right,s,o):NaN;{let d=0,u=0;return n.left&&(d=i(n.left,s,a)),n.right&&(u=i(n.right,a+1,o)),d+u}};return i(r,t,e)}};var F=class extends z{constructor(e,r){super(e,r);l(this,"height");this.height=0}},te=class h extends P{constructor(t,e){super([],e),t&&super.addMany(t)}createNode(t,e){return new F(t,e)}createTree(t){return new h([],w({iterationType:this.iterationType,comparator:this.comparator},t))}isNode(t){return t instanceof F}add(t){if(t===null)return;let e=super.add(t);return e&&this._balancePath(e),e}delete(t,e=this._defaultOneParamCallback){t instanceof F&&(e=i=>i);let r=super.delete(t,e);for(let{needBalanced:i}of r)i&&this._balancePath(i);return r}_swapProperties(t,e){if(t=this.ensureNode(t),e=this.ensureNode(e),t&&e){let{key:r,value:i,height:n}=e,s=this.createNode(r,i);return s&&(s.height=n,e.key=t.key,e.value=t.value,e.height=t.height,t.key=s.key,t.value=s.value,t.height=s.height),e}}_balanceFactor(t){return t.right?t.left?t.right.height-t.left.height:+t.height:-t.height}_updateHeight(t){if(!t.left&&!t.right)t.height=0;else if(t.left)t.right?t.height=1+Math.max(t.right.height,t.left.height):t.height=1+t.left.height;else{let e=t.right?t.right.height:0;t.height=1+e}}_balancePath(t){let e=this.getPathToRoot(t,!1);for(let r=0;r<e.length;r++){let i=e[r];switch(this._updateHeight(i),this._balanceFactor(i)){case-2:i&&i.left&&(this._balanceFactor(i.left)<=0?this._balanceLL(i):this._balanceLR(i));break;case 2:i&&i.right&&(this._balanceFactor(i.right)>=0?this._balanceRR(i):this._balanceRL(i))}}}_balanceLL(t){let e=t.parent,r=t.left;t.parent=r,r&&r.right&&(r.right.parent=t),r&&(r.parent=e),t===this.root?r&&this._setRoot(r):(e==null?void 0:e.left)===t?e.left=r:e&&(e.right=r),r&&(t.left=r.right,r.right=t),this._updateHeight(t),r&&this._updateHeight(r)}_balanceLR(t){let e=t.parent,r=t.left,i;r&&(i=r.right),t&&(t.parent=i),r&&(r.parent=i),i&&(i.left&&(i.left.parent=r),i.right&&(i.right.parent=t),i.parent=e),t===this.root?i&&this._setRoot(i):e&&(e.left===t?e.left=i:e.right=i),i&&(t.left=i.right,r&&(r.right=i.left),i.left=r,i.right=t),this._updateHeight(t),r&&this._updateHeight(r),i&&this._updateHeight(i)}_balanceRR(t){let e=t.parent,r=t.right;t.parent=r,r&&(r.left&&(r.left.parent=t),r.parent=e),t===this.root?r&&this._setRoot(r):e&&(e.left===t?e.left=r:e.right=r),r&&(t.right=r.left,r.left=t),this._updateHeight(t),r&&this._updateHeight(r)}_balanceRL(t){let e=t.parent,r=t.right,i;r&&(i=r.left),t.parent=i,r&&(r.parent=i),i&&(i.left&&(i.left.parent=t),i.right&&(i.right.parent=r),i.parent=e),t===this.root?i&&this._setRoot(i):e&&(e.left===t?e.left=i:e.right=i),i&&(t.right=i.left),r&&i&&(r.left=i.right),i&&(i.left=t),i&&(i.right=r),this._updateHeight(t),r&&this._updateHeight(r),i&&this._updateHeight(i)}_replaceNode(t,e){return e.height=t.height,super._replaceNode(t,e)}};var G=class extends z{constructor(e,r,i=0){super(e,r);l(this,"color");this.color=i}},He=class h extends P{constructor(e,r){super([],r);l(this,"Sentinel",new G(NaN));l(this,"_root");l(this,"_size",0);this._root=this.Sentinel,e&&super.addMany(e)}get root(){return this._root}get size(){return this._size}createNode(e,r,i=0){return new G(e,r,i)}createTree(e){return new h([],w({iterationType:this.iterationType,comparator:this.comparator},e))}isNode(e){return e instanceof G}exemplarToNode(e){let r;if(e!=null){if(this.isNode(e))r=e;else if(this.isEntry(e)){let[i,n]=e;if(i==null)return;r=this.createNode(i,n,1)}else if(this.isNodeKey(e))r=this.createNode(e,void 0,1);else return;return r}}add(e){let r=this.exemplarToNode(e);if(r===void 0)return;r.left=this.Sentinel,r.right=this.Sentinel;let i,n=this.root;for(;n!==this.Sentinel;)if(i=n,n)if(r.key<n.key)n=n.left;else if(r.key>n.key)n=n==null?void 0:n.right;else{r!==n&&this._replaceNode(n,r);return}if(r.parent=i,i===void 0?this._setRoot(r):r.key<i.key?i.left=r:i.right=r,r.parent===void 0){r.color=0,this._size++;return}if(r.parent.parent===void 0){this._size++;return}this._fixInsert(r),this._size++}delete(e,r=this._defaultOneParamCallback){let i=[];return e===null||(s=>{let o=this.Sentinel,a,d;for(;s!==this.Sentinel;)s&&r(s)===e&&(o=s),s&&e&&r(s)<=e?s=s.right:s=s==null?void 0:s.left;if(o===this.Sentinel){this._size--;return}d=o;let u=d.color;o.left===this.Sentinel?(a=o.right,this._rbTransplant(o,o.right)):o.right===this.Sentinel?(a=o.left,this._rbTransplant(o,o.left)):(d=this.getLeftMost(o.right),u=d.color,a=d.right,d.parent===o?a.parent=d:(this._rbTransplant(d,d.right),d.right=o.right,d.right.parent=d),this._rbTransplant(o,d),d.left=o.left,d.left.parent=d,d.color=o.color),u===0&&this._fixDelete(a),this._size--})(this.root),i}isRealNode(e){return e!==this.Sentinel&&e!==void 0}getNode(e,r=this._defaultOneParamCallback,i=this.root,n=this.iterationType){var s;return e instanceof B&&(r=o=>o),i=this.ensureNode(i),(s=this.getNodes(e,r,!0,i,n)[0])!=null?s:void 0}getSuccessor(e){var i;if(e.right!==this.Sentinel)return(i=this.getLeftMost(e.right))!=null?i:void 0;let r=e.parent;for(;r!==this.Sentinel&&r!==void 0&&e===r.right;)e=r,r=r.parent;return r}getPredecessor(e){if(e.left!==this.Sentinel)return this.getRightMost(e.left);let r=e.parent;for(;r!==this.Sentinel&&e===r.left;)e=r,r=r.parent;return r}clear(){this._root=this.Sentinel,this._size=0}_setRoot(e){e&&(e.parent=void 0),this._root=e}_leftRotate(e){if(e.right){let r=e.right;e.right=r.left,r.left!==this.Sentinel&&r.left&&(r.left.parent=e),r.parent=e.parent,e.parent===void 0?this._setRoot(r):e===e.parent.left?e.parent.left=r:e.parent.right=r,r.left=e,e.parent=r}}_rightRotate(e){if(e.left){let r=e.left;e.left=r.right,r.right!==this.Sentinel&&r.right&&(r.right.parent=e),r.parent=e.parent,e.parent===void 0?this._setRoot(r):e===e.parent.right?e.parent.right=r:e.parent.left=r,r.right=e,e.parent=r}}_fixDelete(e){let r;for(;e!==this.root&&e.color===0;)e.parent&&e===e.parent.left?(r=e.parent.right,r.color===1&&(r.color=0,e.parent.color=1,this._leftRotate(e.parent),r=e.parent.right),r.left!==void 0&&r.left.color===0&&r.right&&r.right.color===0?(r.color=1,e=e.parent):(r.right&&r.right.color===0&&(r.left&&(r.left.color=0),r.color=1,this._rightRotate(r),r=e.parent.right),r&&(r.color=e.parent.color),e.parent.color=0,r&&r.right&&(r.right.color=0),this._leftRotate(e.parent),e=this.root)):(r=e.parent.left,r.color===1&&(r.color=0,e.parent.color=1,this._rightRotate(e.parent),r=e.parent.left),r&&r.right&&r.right.color===0&&r.right.color===0?(r.color=1,e=e.parent):(r&&r.left&&r.left.color===0&&(r.right&&(r.right.color=0),r.color=1,this._leftRotate(r),r=e.parent.left),r&&(r.color=e.parent.color),e.parent.color=0,r&&r.left&&(r.left.color=0),this._rightRotate(e.parent),e=this.root));e.color=0}_rbTransplant(e,r){e.parent===void 0?this._setRoot(r):e===e.parent.left?e.parent.left=r:e.parent.right=r,r.parent=e.parent}_fixInsert(e){let r;for(;e.parent&&e.parent.color===1&&(e.parent.parent&&e.parent===e.parent.parent.right?(r=e.parent.parent.left,r&&r.color===1?(r.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.left&&(e=e.parent,this._rightRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._leftRotate(e.parent.parent))):(r=e.parent.parent.right,r&&r.color===1?(r.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.right&&(e=e.parent,this._leftRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._rightRotate(e.parent.parent))),e!==this.root););this.root.color=0}_replaceNode(e,r){return r.color=e.color,super._replaceNode(e,r)}};var re=class extends F{constructor(e,r,i=1){super(e,r);l(this,"count");this.count=i}},Pe=class h extends te{constructor(e,r){super([],r);l(this,"_count",0);e&&this.addMany(e)}get count(){let e=0;return this.subTreeTraverse(r=>e+=r.count),e}createNode(e,r,i){return new re(e,r,i)}createTree(e){return new h([],w({iterationType:this.iterationType,comparator:this.comparator},e))}isNode(e){return e instanceof re}exemplarToNode(e,r=1){let i;if(e!=null){if(this.isNode(e))i=e;else if(this.isEntry(e)){let[n,s]=e;if(n==null)return;i=this.createNode(n,s,r)}else if(this.isNodeKey(e))i=this.createNode(e,void 0,r);else return;return i}}add(e,r=1){let i=this.exemplarToNode(e,r);if(i===void 0)return;let n=(i==null?void 0:i.count)||0,s=super.add(i);return s&&(this._count+=n),s}addMany(e){return super.addMany(e)}perfectlyBalance(e=this.iterationType){let r=this.dfs(n=>n,"in"),i=r.length;if(r.length<1)return!1;if(this.clear(),e==="RECURSIVE"){let n=(s,o)=>{if(s>o)return;let a=s+Math.floor((o-s)/2),d=r[a];this.add([d.key,d.value],d.count),n(s,a-1),n(a+1,o)};return n(0,i-1),!0}else{let n=[[0,i-1]];for(;n.length>0;){let s=n.pop();if(s){let[o,a]=s;if(o<=a){let d=o+Math.floor((a-o)/2),u=r[d];this.add([u.key,u.value],u.count),n.push([d+1,a]),n.push([o,d-1])}}}return!0}}delete(e,r=this._defaultOneParamCallback,i=!1){var u;let n=[];if(!this.root)return n;let s=(u=this.getNode(e,r))!=null?u:void 0;if(!s)return n;let o=s!=null&&s.parent?s.parent:void 0,a,d=s;if(s.count>1&&!i)s.count--,this._count--;else{if(s.left){let f=s.left?this.getRightMost(s.left):void 0;if(f){let N=f.parent;d=this._swapProperties(s,f),N&&(N.right===f?N.right=f.left:N.left=f.left,a=N)}}else if(!o)s.right!==void 0&&this._setRoot(s.right);else{let{familyPosition:f}=s;f==="LEFT"||f==="ROOT_LEFT"?o.left=s.right:(f==="RIGHT"||f==="ROOT_RIGHT")&&(o.right=s.right),a=o}this._size=this.size-1,d&&(this._count-=d.count)}return n.push({deleted:d,needBalanced:a}),a&&this._balancePath(a),n}clear(){super.clear(),this._count=0}_addTo(e,r){if(r=this.ensureNode(r),r)return r.left===void 0?(r.left=e,e!==void 0&&(this._size=this.size+1,this._count+=e.count),r.left):r.right===void 0?(r.right=e,e!==void 0&&(this._size=this.size+1,this._count+=e.count),r.right):void 0}_swapProperties(e,r){if(e=this.ensureNode(e),r=this.ensureNode(r),e&&r){let{key:i,value:n,count:s,height:o}=r,a=this.createNode(i,n,s);return a&&(a.height=o,r.key=e.key,r.value=e.value,r.count=e.count,r.height=e.height,e.key=a.key,e.value=a.value,e.count=a.count,e.height=a.height),r}}_replaceNode(e,r){return r.count=e.count+r.count,super._replaceNode(e,r)}};var qe=class h{constructor(t,e,r){l(this,"key");l(this,"value");l(this,"children");this.key=t,this.value=e||void 0,this.children=r||[]}addChildren(t){this.children||(this.children=[]),t instanceof h?this.children.push(t):this.children=this.children.concat(t)}getHeight(){let t=0;if(this){let e=(r,i)=>{i>t&&(t=i);let{children:n}=r;if(n)for(let s=0,o=n.length;s<o;s++)e(n[s],i+1)};e(this,0)}return t}};var je=class{constructor(t){l(this,"_matrix");let{row:e,col:r,initialVal:i}=t;this._matrix=new Array(e).fill(void 0).map(()=>new Array(r).fill(i||0))}toArray(){return this._matrix}};var W=class h{constructor(t=0,e=0,r=1){this.x=t;this.y=e;this.w=r}get isZero(){return this.x===0&&this.y===0}get length(){return Math.sqrt(this.x*this.x+this.y*this.y)}get lengthSq(){return this.x*this.x+this.y*this.y}get rounded(){return new h(Math.round(this.x),Math.round(this.y))}static add(t,e){return new h(t.x+e.x,t.y+e.y)}static subtract(t,e){return new h(t.x-e.x,t.y-e.y)}static subtractValue(t,e){return new h(t.x-e,t.y-e)}static multiply(t,e){return new h(t.x*e,t.y*e)}static divide(t,e){return new h(t.x/e,t.y/e)}static equals(t,e){return t.x===e.x&&t.y===e.y}static equalsRounded(t,e,r=12){let i=h.abs(h.subtract(t,e));return i.x<r&&i.y<r}static normalize(t){let e=t.length;return e>2220446049250313e-31?h.divide(t,e):t}static truncate(t,e){return t.length>e?h.multiply(h.normalize(t),e):t}static perp(t){return new h(-t.y,t.x)}static reverse(t){return new h(-t.x,-t.y)}static abs(t){return new h(Math.abs(t.x),Math.abs(t.y))}static dot(t,e){return t.x*e.x+t.y*e.y}static distance(t,e){let r=e.y-t.y,i=e.x-t.x;return Math.sqrt(r*r+i*i)}static distanceSq(t,e){let r=e.y-t.y,i=e.x-t.x;return r*r+i*i}static sign(t,e){return t.y*e.x>t.x*e.y?-1:1}static angle(t){let e=new h(0,-1),r=Math.acos(h.dot(t,e)/(t.length*e.length));return h.sign(t,e)===1?Math.PI*2-r:r}static random(t,e){let r=Math.floor(Math.random()*t-t/2),i=Math.floor(Math.random()*e-e/2);return new h(r,i)}zero(){this.x=0,this.y=0}};var Ue=class h{constructor(t){l(this,"_matrix");typeof t=="undefined"?this._matrix=h.identity:t instanceof W?(this._matrix=h.identity,this._matrix[0][0]=t.x,this._matrix[1][0]=t.y,this._matrix[2][0]=t.w):this._matrix=t}static get empty(){return[[],[],[]]}static get identity(){return[[1,0,0],[0,1,0],[0,0,1]]}get m(){return this._matrix}static add(t,e){let r=h.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++)r[i][n]=t.m[i][n]+e.m[i][n];return new h(r)}static subtract(t,e){let r=h.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++)r[i][n]=t.m[i][n]-e.m[i][n];return new h(r)}static multiply(t,e){let r=h.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++){r[i][n]=0;for(let s=0;s<3;s++)r[i][n]+=t.m[i][s]*e.m[s][n]}return new h(r)}static multiplyByValue(t,e){let r=h.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++)r[i][n]=t.m[i][n]*e;return new h(r)}static multiplyByVector(t,e){return h.multiply(t,new h(e)).toVector()}static view(t,e){let i=t/2,n=e/2,s=Math.cos(Math.PI);return new h([[1,0,i],[0,s*1,n],[0,0,1]])}static scale(t){return h.multiplyByValue(new h,t)}static rotate(t){let e=Math.cos(t),r=Math.sin(t);return new h([[e,-r,0],[r,e,0],[0,0,1]])}static translate(t){return new h([[1,0,t.x],[0,1,t.y],[0,0,t.w]])}toVector(){return new W(this._matrix[0][0],this._matrix[1][0])}};var pe=class h{constructor(t,e){l(this,"direction");l(this,"turn");this.direction=t,this.turn=()=>new h(e[t],e)}},Ge=class{constructor({matrix:t,turning:e,onMove:r,init:{cur:i,charDir:n,VISITED:s}}){l(this,"onMove");l(this,"_matrix");l(this,"_cur");l(this,"_character");l(this,"_VISITED");this._matrix=t,this._cur=i,this._character=new pe(n,e),this.onMove=r,this.onMove&&this.onMove(this._cur),this._VISITED=s,this._matrix[this._cur[0]][this._cur[1]]=this._VISITED}start(){for(;this.check(this._character.direction)||this.check(this._character.turn().direction);){let{direction:t}=this._character;this.check(t)?this.move(t):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(t){let e,r,i=this._matrix,[n,s]=this._cur;switch(t){case"up":if(r=i[n-1],!r)return!1;e=r[s];break;case"right":e=i[n][s+1];break;case"down":if(r=i[n+1],!r)return!1;e=r[s];break;case"left":e=i[n][s-1];break}return e!==void 0&&e!==this._VISITED}move(t){switch(t){case"up":this._cur[0]--;break;case"right":this._cur[1]++;break;case"down":this._cur[0]++;break;case"left":this._cur[1]--;break}let[e,r]=this._cur;this._matrix[e][r]=this._VISITED,this.onMove&&this.onMove(this._cur)}};var ie=class{constructor(t){l(this,"key");l(this,"children");l(this,"isEnd");this.key=t,this.isEnd=!1,this.children=new Map}},We=class h{constructor(t,e=!0){l(this,"_size");l(this,"_caseSensitive");l(this,"_root");if(this._root=new ie(""),this._caseSensitive=e,this._size=0,t)for(let r of t)this.add(r)}get size(){return this._size}get caseSensitive(){return this._caseSensitive}get root(){return this._root}add(t){t=this._caseProcess(t);let e=this.root,r=!1;for(let i of t){let n=e.children.get(i);n||(n=new ie(i),e.children.set(i,n)),e=n}return e.isEnd||(r=!0,e.isEnd=!0,this._size++),r}has(t){t=this._caseProcess(t);let e=this.root;for(let r of t){let i=e.children.get(r);if(!i)return!1;e=i}return e.isEnd}delete(t){t=this._caseProcess(t);let e=!1,r=(i,n)=>{let s=t[n],o=i.children.get(s);return o?n===t.length-1?o.isEnd?(o.children.size>0?o.isEnd=!1:i.children.delete(s),e=!0,!0):!1:r(o,n+1)&&!i.isEnd&&o.children.size===0?(i.children.delete(s),!0):!1:!1};return r(this.root,0),e&&this._size--,e}getHeight(){let t=this.root,e=0;if(t){let r=(i,n)=>{n>e&&(e=n);let{children:s}=i;if(s)for(let o of s.entries())r(o[1],n+1)};r(t,0)}return e}hasPurePrefix(t){t=this._caseProcess(t);let e=this.root;for(let r of t){let i=e.children.get(r);if(!i)return!1;e=i}return!e.isEnd}hasPrefix(t){t=this._caseProcess(t);let e=this.root;for(let r of t){let i=e.children.get(r);if(!i)return!1;e=i}return!0}hasCommonPrefix(t){t=this._caseProcess(t);let e="",r=i=>{if(e+=i.key,e!==t&&!i.isEnd)if(i&&i.children&&i.children.size===1)r(Array.from(i.children.values())[0]);else return};return r(this.root),e===t}getLongestCommonPrefix(){let t="",e=r=>{if(t+=r.key,!r.isEnd)if(r&&r.children&&r.children.size===1)e(Array.from(r.children.values())[0]);else return};return e(this.root),t}getWords(t="",e=Number.MAX_SAFE_INTEGER,r=!1){t=this._caseProcess(t);let i=[],n=0;function s(a,d){for(let u of a.children.keys()){let f=a.children.get(u);f!==void 0&&s(f,d.concat(u))}if(a.isEnd){if(n>e-1)return;i.push(d),n++}}let o=this.root;if(t)for(let a of t){let d=o.children.get(a);d&&(o=d)}return(r||o!==this.root)&&s(o,t),i}*[Symbol.iterator](){function*t(e,r){e.isEnd&&(yield r);for(let[i,n]of e.children)yield*q(t(n,r+i))}yield*q(t(this.root,""))}forEach(t){let e=0;for(let r of this)t(r,e,this),e++}filter(t){let e=[],r=0;for(let i of this)t(i,r,this)&&e.push(i),r++;return e}map(t){let e=new h,r=0;for(let i of this)e.add(t(i,r,this)),r++;return e}reduce(t,e){let r=e,i=0;for(let n of this)r=t(r,n,i,this),i++;return r}print(){console.log([...this])}_caseProcess(t){return this._caseSensitive||(t=t.toLowerCase()),t}};return rt(ot);})();
5
5
  /**
6
6
  * data-structure-typed
7
7
  *