data-structure-typed 1.47.3 → 1.47.5

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 (69) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/benchmark/report.html +2 -2
  3. package/benchmark/report.json +12 -18
  4. package/dist/cjs/data-structures/hash/hash-map.d.ts +3 -3
  5. package/dist/cjs/data-structures/hash/hash-map.js +10 -4
  6. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  7. package/dist/cjs/data-structures/hash/hash-table.d.ts +9 -4
  8. package/dist/cjs/data-structures/hash/hash-table.js +50 -5
  9. package/dist/cjs/data-structures/hash/hash-table.js.map +1 -1
  10. package/dist/cjs/data-structures/heap/heap.d.ts +6 -1
  11. package/dist/cjs/data-structures/heap/heap.js +51 -9
  12. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  13. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +56 -56
  14. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +117 -119
  15. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  16. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +36 -36
  17. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +58 -60
  18. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  19. package/dist/cjs/data-structures/queue/deque.d.ts +49 -49
  20. package/dist/cjs/data-structures/queue/deque.js +79 -72
  21. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  22. package/dist/cjs/data-structures/queue/queue.d.ts +45 -0
  23. package/dist/cjs/data-structures/queue/queue.js +77 -0
  24. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  25. package/dist/cjs/data-structures/stack/stack.d.ts +18 -5
  26. package/dist/cjs/data-structures/stack/stack.js +56 -7
  27. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  28. package/dist/cjs/data-structures/trie/trie.d.ts +5 -0
  29. package/dist/cjs/data-structures/trie/trie.js +47 -0
  30. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  31. package/dist/mjs/data-structures/hash/hash-map.d.ts +3 -3
  32. package/dist/mjs/data-structures/hash/hash-map.js +10 -4
  33. package/dist/mjs/data-structures/hash/hash-table.d.ts +9 -4
  34. package/dist/mjs/data-structures/hash/hash-table.js +50 -5
  35. package/dist/mjs/data-structures/heap/heap.d.ts +6 -1
  36. package/dist/mjs/data-structures/heap/heap.js +51 -9
  37. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +56 -56
  38. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +117 -119
  39. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +36 -36
  40. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +58 -60
  41. package/dist/mjs/data-structures/queue/deque.d.ts +49 -49
  42. package/dist/mjs/data-structures/queue/deque.js +79 -72
  43. package/dist/mjs/data-structures/queue/queue.d.ts +45 -0
  44. package/dist/mjs/data-structures/queue/queue.js +77 -0
  45. package/dist/mjs/data-structures/stack/stack.d.ts +18 -5
  46. package/dist/mjs/data-structures/stack/stack.js +56 -7
  47. package/dist/mjs/data-structures/trie/trie.d.ts +5 -0
  48. package/dist/mjs/data-structures/trie/trie.js +47 -0
  49. package/dist/umd/data-structure-typed.js +545 -276
  50. package/dist/umd/data-structure-typed.min.js +2 -2
  51. package/dist/umd/data-structure-typed.min.js.map +1 -1
  52. package/package.json +1 -1
  53. package/src/data-structures/hash/hash-map.ts +13 -7
  54. package/src/data-structures/hash/hash-table.ts +59 -9
  55. package/src/data-structures/heap/heap.ts +60 -9
  56. package/src/data-structures/linked-list/doubly-linked-list.ts +129 -129
  57. package/src/data-structures/linked-list/singly-linked-list.ts +65 -65
  58. package/src/data-structures/queue/deque.ts +84 -77
  59. package/src/data-structures/queue/queue.ts +84 -0
  60. package/src/data-structures/stack/stack.ts +64 -8
  61. package/src/data-structures/trie/trie.ts +53 -0
  62. package/test/integration/conversion.test.ts +0 -0
  63. package/test/performance/data-structures/heap/heap.test.ts +13 -4
  64. package/test/unit/data-structures/hash/hash-table.test.ts +58 -2
  65. package/test/unit/data-structures/heap/min-heap.test.ts +48 -0
  66. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +2 -2
  67. package/test/unit/data-structures/queue/queue.test.ts +37 -0
  68. package/test/unit/data-structures/stack/stack.test.ts +55 -5
  69. package/test/unit/data-structures/trie/trie.test.ts +33 -0
@@ -1,7 +1,7 @@
1
- "use strict";var dataStructureTyped=(()=>{var ne=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 ge=(h,t,e)=>t in h?ne(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,k=(h,t)=>{for(var e in t||(t={}))Xe.call(t,e)&&ge(h,e,t[e]);if(Qe)for(var e of Qe(t))$e.call(t,e)&&ge(h,e,t[e]);return h};var et=(h,t)=>{for(var e in t)ne(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&&ne(h,i,{get:()=>t[i],enumerable:!(r=Je(t,i))||r.enumerable});return h};var rt=h=>tt(ne({},"__esModule",{value:!0}),h);var u=(h,t,e)=>(ge(h,typeof t!="symbol"?t+"":t,e),e);var Ye=(h,t,e)=>new Promise((r,i)=>{var n=l=>{try{o(e.next(l))}catch(a){i(a)}},s=l=>{try{o(e.throw(l))}catch(a){i(a)}},o=l=>l.done?r(l.value):Promise.resolve(l.value).then(n,s);o((e=e.apply(h,t)).next())}),it=function(h,t){this[0]=h,this[1]=t};var Te=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 l=t[n](s);if(!(l instanceof Object))throw TypeError("Object expected");o(l)}),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:()=>q,AbstractEdge:()=>z,AbstractGraph:()=>D,AbstractVertex:()=>B,BST:()=>P,BSTNode:()=>R,BinaryIndexedTree:()=>De,BinaryTree:()=>ee,BinaryTreeNode:()=>O,CP:()=>ce,Character:()=>pe,Deque:()=>ve,DirectedEdge:()=>U,DirectedGraph:()=>$,DirectedVertex:()=>F,DoublyLinkedList:()=>ke,DoublyLinkedListNode:()=>w,FamilyPosition:()=>fe,FibonacciHeap:()=>we,FibonacciHeapNode:()=>le,HashMap:()=>xe,HashTable:()=>me,HashTableNode:()=>X,Heap:()=>I,IterationType:()=>H,LinkedListQueue:()=>Ce,MapEdge:()=>de,MapGraph:()=>ze,MapVertex:()=>ue,Matrix2D:()=>je,MatrixNTI2D:()=>Ue,MaxHeap:()=>Re,MaxPriorityQueue:()=>Ie,MinHeap:()=>Me,MinPriorityQueue:()=>Se,Navigator:()=>Ge,ObjectDeque:()=>Ke,PriorityQueue:()=>L,Queue:()=>C,RBTNColor:()=>Ae,RedBlackTree:()=>He,RedBlackTreeNode:()=>G,SegmentTree:()=>Fe,SegmentTreeNode:()=>j,SinglyLinkedList:()=>J,SinglyLinkedListNode:()=>K,SkipList:()=>Be,SkipListNode:()=>Z,Stack:()=>Oe,THUNK_SYMBOL:()=>_e,TreeMultimap:()=>Pe,TreeMultimapNode:()=>W,TreeNode:()=>qe,Trie:()=>We,TrieNode:()=>re,UndirectedEdge:()=>he,UndirectedGraph:()=>Le,UndirectedVertex:()=>ae,Vector2D:()=>Q,arrayRemove:()=>M,calcMinUnitsRequired:()=>oe,getMSB:()=>Ve,isThunk:()=>be,isWeakKey:()=>Y,rangeCheck:()=>S,throwRangeError:()=>st,toThunk:()=>Ee,trampoline:()=>se,trampolineAsync:()=>nt,uuidV4:()=>ye});var X=class{constructor(t,e){u(this,"key");u(this,"value");u(this,"next");this.key=t,this.value=e,this.next=null}},A=class A{constructor(t=A.DEFAULT_CAPACITY,e){u(this,"_capacity");u(this,"_size");u(this,"_buckets");u(this,"_hashFn");this._hashFn=e||this._defaultHashFn,this._capacity=Math.max(t,A.DEFAULT_CAPACITY),this._size=0,this._buckets=new Array(this._capacity).fill(null)}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 X(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>=A.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=null;for(;r;){if(r.key===t){i?i.next=r.next:this._buckets[e]=r.next,this._size--,r.next=null;return}i=r,r=r.next}}_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(null);for(let r of this._buckets){let i=r;for(;i;){let n=this._hash(i.key),s=new X(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}};u(A,"DEFAULT_CAPACITY",16),u(A,"LOAD_FACTOR",.75);var me=A;var ye=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)})},M=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},_e=Symbol("thunk"),be=h=>typeof h=="function"&&h.__THUNK__===_e,Ee=h=>{let t=()=>h();return t.__THUNK__=_e,t},se=h=>Object.assign((...e)=>{let r=h(...e);for(;be(r)&&typeof r=="function";)r=r();return r},{cont:(...e)=>Ee(()=>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)=>Ee(()=>h(...e))}),Ve=h=>h<=0?0:1<<31-Math.clz32(h),S=(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)},Y=h=>{let t=typeof h;return t==="object"&&h!==null||t==="function"},oe=(h,t)=>Math.floor((h+t-1)/t);var xe=class h{constructor(t={elements:[],hashFn:e=>String(e),objHashFn:e=>e}){u(this,"_noObjMap",{});u(this,"_objMap",new WeakMap);u(this,"_head");u(this,"_tail");u(this,"_sentinel");u(this,"_hashFn");u(this,"_objHashFn");u(this,"_size",0);this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel;let{elements:e,hashFn:r,objHashFn:i}=t;if(this._hashFn=r,this._objHashFn=i,e)for(let n of e)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(Y(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(Y(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){S(t,0,this._size-1);let e=this._head;for(;t--;)e=e.next;return[e.key,e.value]}delete(t){let e;if(Y(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){S(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;for(let[r,i]of this)t([r,i],this)&&e.set(r,i);return e}map(t){let e=new h;for(let[r,i]of this){let n=t([r,i],this);e.set(r,n)}return e}reduce(t,e){let r=e;for(let i of this)r=t(r,i,this);return r}*[Symbol.iterator](){let t=this._head;for(;t!==this._sentinel;)yield[t.key,t.value],t=t.next}_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 K=class{constructor(t){u(this,"value");u(this,"next");this.value=t,this.next=null}},J=class h{constructor(){u(this,"_head");u(this,"_tail");u(this,"_length");this._head=null,this._tail=null,this._length=0}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 K(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=null,this._tail=null,this._length--,r}let t=this.head;for(;t.next!==this.tail;)t=t.next;let e=this.tail.value;return t.next=null,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 K(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 K?e=t.value:e=t;let r=this.head,i=null;for(;r;){if(r.value===e)return i===null?(this._head=r.next,r===this.tail&&(this._tail=null)):(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 K(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=null,this._tail=null,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=null,e=this.head,r=null;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}return null}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}return null}insertBefore(t,e){if(!this.head)return!1;let r;if(t instanceof K?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 K(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 K?r=t:r=this.getNode(t),r){let i=new K(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}forEach(t){let e=this.head,r=0;for(;e;)t(e.value,r),e=e.next,r++}map(t){let e=new h,r=this.head;for(;r;)e.push(t(r.value)),r=r.next;return e}filter(t){let e=new h,r=this.head;for(;r;)t(r.value)&&e.push(r.value),r=r.next;return e}reduce(t,e){let r=e,i=this.head;for(;i;)r=t(r,i.value),i=i.next;return r}*[Symbol.iterator](){let t=this.head;for(;t;)yield t.value,t=t.next}};var w=class{constructor(t){u(this,"value");u(this,"next");u(this,"prev");this.value=t,this.next=null,this.prev=null}},ke=class h{constructor(){u(this,"_head");u(this,"_tail");u(this,"_length");this._head=null,this._tail=null,this._length=0}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 w(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=null,this._tail=null):(this._tail=t.prev,this.tail.next=null),this._length--,t.value}popLast(){return this.pop()}shift(){if(!this.head)return;let t=this.head;return this.head===this.tail?(this._head=null,this._tail=null):(this._head=t.next,this.head.prev=null),this._length--,t.value}popFirst(){return this.shift()}unshift(t){let e=new w(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 null;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}return null}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),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 w?r=t:r=this.getNode(t),r){let i=new w(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}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 w?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}toArray(){let t=[],e=this.head;for(;e;)t.push(e.value),e=e.next;return t}isEmpty(){return this.length===0}clear(){this._head=null,this._tail=null,this._length=0}find(t){let e=this.head;for(;e;){if(t(e.value))return e.value;e=e.next}return null}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}return null}toArrayBackward(){let t=[],e=this.tail;for(;e;)t.push(e.value),e=e.prev;return t}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}}forEach(t){let e=this.head,r=0;for(;e;)t(e.value,r),e=e.next,r++}map(t){let e=new h,r=this.head;for(;r;)e.push(t(r.value)),r=r.next;return e}filter(t){let e=new h,r=this.head;for(;r;)t(r.value)&&e.push(r.value),r=r.next;return e}reduce(t,e){let r=e,i=this.head;for(;i;)r=t(r,i.value),i=i.next;return r}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&&(r.next.prev=i),i.prev=r,r.next=i,r===this.tail&&(this._tail=i),this._length++,!0}return!1}*[Symbol.iterator](){let t=this.head;for(;t;)yield t.value,t=t.next}};var Z=class{constructor(t,e,r){u(this,"key");u(this,"value");u(this,"forward");this.key=t,this.value=e,this.forward=new Array(r)}},Be=class{constructor(t=16,e=.5){u(this,"_head");u(this,"_level");u(this,"_maxLevel");u(this,"_probability");this._head=new Z(null,null,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 Z(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]!==null&&(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]===null;)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=null;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 Oe=class h{constructor(t){u(this,"_elements");this._elements=Array.isArray(t)?t:[]}get elements(){return this._elements}static fromArray(t){return new h(t)}isEmpty(){return this.elements.length===0}size(){return this.elements.length}peek(){return this.isEmpty()?null:this.elements[this.elements.length-1]}push(t){return this.elements.push(t),this}pop(){return this.isEmpty()?null:this.elements.pop()||null}toArray(){return this.elements.slice()}clear(){this._elements=[]}clone(){return new h(this.elements.slice())}};var Ce=class extends J{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()}},C=class h{constructor(t){u(this,"_nodes");u(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))}*[Symbol.iterator](){for(let t of this.nodes)yield t}};var ve=class h{constructor(t=[],e=4096){u(this,"_bucketFirst",0);u(this,"_firstInBucket",0);u(this,"_bucketLast",0);u(this,"_lastInBucket",0);u(this,"_bucketCount",0);u(this,"_bucketSize");u(this,"_buckets",[]);u(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=oe(r,this._bucketSize)||1;for(let n=0;n<this._bucketCount;++n)this._buckets.push(new Array(this._bucketSize));let i=oe(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){S(t,0,this.size-1);let{bucketIndex:e,indexInBucket:r}=this._getBucketAndPosition(t);return this._buckets[e][r]}setAt(t,e){S(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(S(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(S(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}}forEach(t){for(let e=0;e<this.size;++e)t(this.getAt(e),e,this)}find(t){for(let e=0;e<this.size;++e){let r=this.getAt(e);if(t(r,e,this))return r}}toArray(){let t=[];for(let e=0;e<this.size;++e)t.push(this.getAt(e));return t}map(t){let e=new h([],this._bucketSize);for(let r=0;r<this.size;++r)e.push(t(this.getAt(r),r,this));return e}filter(t){let e=new h([],this._bucketSize);for(let r=0;r<this.size;++r){let i=this.getAt(r);t(i,r,this)&&e.push(i)}return e}reduce(t,e){let r=e;for(let i=0;i<this.size;++i)r=t(r,this.getAt(i),i,this);return r}indexOf(t){for(let e=0;e<this.size;++e)if(this.getAt(e)===t)return e;return-1}*[Symbol.iterator](){for(let t=0;t<this.size;++t)yield this.getAt(t)}_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}}},Ke=class{constructor(t){u(this,"_nodes",{});u(this,"_capacity",Number.MAX_SAFE_INTEGER);u(this,"_first",-1);u(this,"_last",-1);u(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 I=class h{constructor(t){u(this,"_elements",[]);u(this,"_comparator");this._comparator=t.comparator,t.elements&&t.elements.length>0&&(this._elements=t.elements,this.fix())}get elements(){return this._elements}get comparator(){return this._comparator}get size(){return this.elements.length}get leaf(){var t;return(t=this.elements[this.size-1])!=null?t:void 0}static heapify(t){return new h(t)}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){let e=[],r=i=>{i<this.size&&(t==="in"?(r(2*i+1),e.push(this.elements[i]),r(2*i+2)):t==="pre"?(e.push(this.elements[i]),r(2*i+1),r(2*i+2)):t==="post"&&(r(2*i+1),r(2*i+2),e.push(this.elements[i])))};return r(0),e}toArray(){return[...this.elements]}clone(){let t=new h({comparator:this.comparator});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)}_bubbleUp(t){let e=this.elements[t];for(;t>0;){let r=t-1>>1,i=this.elements[r];if(this._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._comparator(s,this.elements[n])>0&&(i=n,s=this.elements[n]),this._comparator(s,r)>=0)break;this.elements[t]=s,t=i}this.elements[t]=r}},le=class{constructor(t,e=0){u(this,"element");u(this,"degree");u(this,"left");u(this,"right");u(this,"child");u(this,"parent");u(this,"marked");this.element=t,this.degree=e,this.marked=!1}},we=class{constructor(t){u(this,"_root");u(this,"_size",0);u(this,"_min");u(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()}}defaultComparator(t,e){return t<e?-1:t>e?1:0}createNode(t){return new le(t)}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 Re=class extends I{constructor(t={comparator:(e,r)=>{if(typeof e=="number"&&typeof r=="number")return r-e;throw new Error("The a, b params of compare function must be number")}}){super(t)}};var Me=class extends I{constructor(t={comparator:(e,r)=>{if(typeof e=="number"&&typeof r=="number")return e-r;throw new Error("The a, b params of compare function must be number")}}){super(t)}};var L=class extends I{constructor(t){super(t)}};var Se=class extends L{constructor(t={comparator:(e,r)=>{if(typeof e=="number"&&typeof r=="number")return e-r;throw new Error("The a, b params of compare function must be number")}}){super(t)}};var Ie=class extends L{constructor(t={comparator:(e,r)=>{if(typeof e=="number"&&typeof r=="number")return r-e;throw new Error("The a, b params of compare function must be number")}}){super(t)}};var B=class{constructor(t,e){u(this,"key");u(this,"value");this.key=t,this.value=e}},z=class{constructor(t,e){u(this,"value");u(this,"weight");u(this,"_hashCode");this.weight=t!==void 0?t:1,this.value=e,this._hashCode=ye()}get hashCode(){return this._hashCode}},D=class{constructor(){u(this,"_vertices",new Map)}get vertices(){return this._vertices}getVertex(t){return this._vertices.get(t)||null}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 z)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:l,path:a}=o.pop();if(l===s&&(i.push(a),i.length>=r))return i;let d=this.getNeighbors(l);for(let p of d)if(!a.includes(p)){let T=[...a,p];o.push({vertex:p,path:T})}}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 null;let s=new Map,o=new C([n]);s.set(n,!0);let l=0;for(;o.size>0;){for(let a=0;a<o.size;a++){let d=o.shift();if(d===i)return l;if(d!==void 0){let p=this.getNeighbors(d);for(let T of p)s.has(T)||(s.set(T,!0),o.push(T))}}l++}return null}}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),l=1/0,a=-1,d=0;for(let p of o){let T=this.getPathSumWeight(p);T<l&&(l=T,a=d),d++}return o[a]||null}else return(s=(n=this.dijkstra(t,e,!0,!0))==null?void 0:n.minPath)!=null?s:[];else{let o=[],l=this._getVertex(t),a=this._getVertex(e);if(!(l&&a))return[];let d=(p,T,_,b)=>{if(_.add(p),p===T){o=[l,...b];return}let x=this.getNeighbors(p);for(let m of x)_.has(m)||(b.push(m),d(m,T,_,b),b.pop());_.delete(p)};return d(l,a,new Set,[]),o}}dijkstraWithoutHeap(t,e,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1),e===void 0&&(e=null);let n=1/0,s=null,o=[],l=[],a=this._vertices,d=new Map,p=new Set,T=new Map,_=this._getVertex(t),b=e?this._getVertex(e):null;if(!_)return null;for(let f of a){let c=f[1];c instanceof B&&d.set(c,1/0)}d.set(_,0),T.set(_,null);let x=()=>{let f=1/0,c=null;for(let[N,g]of d)p.has(N)||g<f&&(f=g,c=N);return c},m=f=>{for(let c of a){let N=c[1];if(N instanceof B){let g=[N],y=T.get(N);for(;y;)g.push(y),y=T.get(y);let E=g.reverse();c[1]===f&&(o=E),l.push(E)}}};for(let f=1;f<a.size;f++){let c=x();if(c){if(p.add(c),b&&b===c)return r&&(n=d.get(b)||1/0),i&&m(b),{distMap:d,preMap:T,seen:p,paths:l,minDist:n,minPath:o};let N=this.getNeighbors(c);for(let g of N)if(!p.has(g)){let y=this.getEdge(c,g);if(y){let E=d.get(c),V=d.get(g);E!==void 0&&V!==void 0&&y.weight+E<V&&(d.set(g,y.weight+E),T.set(g,c))}}}}return r&&d.forEach((f,c)=>{c!==_&&f<n&&(n=f,i&&(s=c))}),i&&m(s),{distMap:d,preMap:T,seen:p,paths:l,minDist:n,minPath:o}}dijkstra(t,e,r,i){var f;r===void 0&&(r=!1),i===void 0&&(i=!1),e===void 0&&(e=null);let n=1/0,s=null,o=[],l=[],a=this._vertices,d=new Map,p=new Set,T=new Map,_=this._getVertex(t),b=e?this._getVertex(e):null;if(!_)return null;for(let c of a){let N=c[1];N instanceof B&&d.set(N,1/0)}let x=new L({comparator:(c,N)=>c.key-N.key});x.add({key:0,value:_}),d.set(_,0),T.set(_,null);let m=c=>{for(let N of a){let g=N[1];if(g instanceof B){let y=[g],E=T.get(g);for(;E;)y.push(E),E=T.get(E);let V=y.reverse();N[1]===c&&(o=V),l.push(V)}}};for(;x.size>0;){let c=x.poll(),N=c==null?void 0:c.key,g=c==null?void 0:c.value;if(N!==void 0&&g){if(p.add(g),b&&b===g)return r&&(n=d.get(b)||1/0),i&&m(b),{distMap:d,preMap:T,seen:p,paths:l,minDist:n,minPath:o};let y=this.getNeighbors(g);for(let E of y)if(!p.has(E)){let V=(f=this.getEdge(g,E))==null?void 0:f.weight;if(typeof V=="number"){let v=d.get(E);v&&N+V<v&&(x.add({key:N+V,value:E}),T.set(E,g),d.set(E,N+V))}}}}return r&&d.forEach((c,N)=>{N!==_&&c<n&&(n=c,i&&(s=N))}),i&&m(s),{distMap:d,preMap:T,seen:p,paths:l,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,l=new Map,a=1/0,d=[],p;if(e&&(p=!1),!n)return{hasNegativeCycle:p,distMap:o,preMap:l,paths:s,min:a,minPath:d};let T=this._vertices,_=T.size,b=this.edgeSet(),x=b.length;this._vertices.forEach(f=>{o.set(f,1/0)}),o.set(n,0);for(let f=1;f<_;++f)for(let c=0;c<x;++c){let N=this.getEndsOfEdge(b[c]);if(N){let[g,y]=N,E=b[c].weight,V=o.get(g),v=o.get(y);V!==void 0&&v!==void 0&&o.get(g)!==1/0&&V+E<v&&(o.set(y,V+E),i&&l.set(y,g))}}let m=null;if(r&&o.forEach((f,c)=>{c!==n&&f<a&&(a=f,i&&(m=c))}),i)for(let f of T){let c=f[1];if(c instanceof B){let N=[c],g=l.get(c);for(;g!==void 0;)N.push(g),g=l.get(g);let y=N.reverse();f[1]===m&&(d=y),s.push(y)}}for(let f=0;f<x;++f){let c=this.getEndsOfEdge(b[f]);if(c){let[N]=c,g=b[f].weight,y=o.get(N);y&&y!==1/0&&y+g<y&&(p=!0)}}return{hasNegativeCycle:p,distMap:o,preMap:l,paths:s,min:a,minPath:d}}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]=null}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 l=0;l<e;l++)r[o][l]>r[o][s]+r[s][l]&&(r[o][l]=r[o][s]+r[s][l],i[o][l]=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,l=this._vertices;l.forEach(f=>{s.set(f,-1),o.set(f,1/0)});let[a]=l.values(),d=[],p=[],T=0,_=(f,c)=>{T++,s.set(f,T),o.set(f,T);let N=this.getNeighbors(f),g=0;for(let y of N)if(y!==c){s.get(y)===-1&&(g++,_(y,f));let E=o.get(y),V=o.get(f);V!==void 0&&E!==void 0&&o.set(f,Math.min(V,E));let v=s.get(f);if(E!==void 0&&v!==void 0&&(t&&(f===a&&g>=2||f!==a&&E>=v)&&d.push(f),e&&E>v)){let ie=this.getEdge(f,y);ie&&p.push(ie)}}};_(a,null);let b=new Map,x=()=>{let f=new Map;return o.forEach((c,N)=>{var g;f.has(c)?(g=f.get(c))==null||g.push(N):f.set(c,[N])}),f};r&&(b=x());let m=new Map;if(i){let f=new Map;f.size<1&&(f=x()),f.forEach((c,N)=>{c.length>1&&m.set(N,c)})}return{dfnMap:s,lowMap:o,bridges:p,cutVertexes:d,SCCs:b,cycles:m}}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}_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)||null}_getVertexKey(t){return t instanceof B?t.key:t}};var F=class extends B{constructor(t,e){super(t,e)}},U=class extends z{constructor(e,r,i,n){super(i,n);u(this,"src");u(this,"dest");this.src=e,this.dest=r}},$=class extends D{constructor(){super();u(this,"_outEdgeMap",new Map);u(this,"_inEdgeMap",new Map)}get outEdgeMap(){return this._outEdgeMap}get inEdgeMap(){return this._inEdgeMap}createVertex(e,r){return new F(e,r!=null?r:e)}createEdge(e,r,i,n){return new U(e,r,i!=null?i:1,n)}getEdge(e,r){let i=[];if(e!==null&&r!==null){let n=this._getVertex(e),s=this._getVertex(r);if(n&&s){let o=this._outEdgeMap.get(n);o&&(i=o.filter(l=>l.dest===s.key))}}return i[0]||null}deleteEdgeSrcToDest(e,r){let i=this._getVertex(e),n=this._getVertex(r),s=null;if(!i||!n)return null;let o=this._outEdgeMap.get(i);o&&M(o,a=>a.dest===n.key);let l=this._inEdgeMap.get(n);return l&&(s=M(l,a=>a.src===i.key)[0]||null),s}deleteEdge(e){let r=null,i=this._getVertex(e.src),n=this._getVertex(e.dest);if(i&&n){let s=this._outEdgeMap.get(i);s&&s.length>0&&M(s,l=>l.src===i.key);let o=this._inEdgeMap.get(n);o&&o.length>0&&(r=M(o,l=>l.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===null)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 l=this.getDestinations(o);for(let a of l){let d=r.get(a);d===0?s(a):d===1&&(n=!0)}r.set(o,2),i.push(o)};for(let o of this.vertices)r.get(o[1])===0&&s(o[1]);return n?null:(e==="key"&&(i=i.map(o=>o instanceof F?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 null;let r=this._getVertex(e.src),i=this._getVertex(e.dest);return r&&i?[r,i]:null}_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 ae=class extends B{constructor(t,e){super(t,e)}},he=class extends z{constructor(e,r,i,n){super(i,n);u(this,"vertices");this.vertices=[e,r]}},Le=class extends D{constructor(){super();u(this,"_edges");this._edges=new Map}get edges(){return this._edges}createVertex(e,r){return new ae(e,r!=null?r:e)}createEdge(e,r,i,n){return new he(e,r,i!=null?i:1,n)}getEdge(e,r){var n;let i=[];if(e!==null&&r!==null){let s=this._getVertex(e),o=this._getVertex(r);s&&o&&(i=(n=this._edges.get(s))==null?void 0:n.filter(l=>l.vertices.includes(o.key)))}return i&&i[0]||null}deleteEdgeBetween(e,r){let i=this._getVertex(e),n=this._getVertex(r);if(!i||!n)return null;let s=this._edges.get(i),o=null;s&&(o=M(s,a=>a.vertices.includes(n.key))[0]||null);let l=this._edges.get(n);return l&&M(l,a=>a.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(l=>l!==i.key)[0]);o&&r.push(o)}}return r}getEndsOfEdge(e){if(!this.hasEdge(e.vertices[0],e.vertices[1]))return null;let r=this._getVertex(e.vertices[0]),i=this._getVertex(e.vertices[1]);return r&&i?[r,i]:null}_addEdgeOnly(e){for(let r of e.vertices){let i=this._getVertex(r);if(i===null)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 F{constructor(e,r,i,n){super(e,r);u(this,"lat");u(this,"long");this.lat=i,this.long=n}},de=class extends U{constructor(t,e,r,i){super(t,e,r,i)}},ze=class extends ${constructor(e,r){super();u(this,"_origin",[0,0]);u(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 de(e,r,i,n)}};var H=(e=>(e.ITERATIVE="ITERATIVE",e.RECURSIVE="RECURSIVE",e))(H||{}),fe=(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))(fe||{});var Ae=(e=>(e[e.RED=1]="RED",e[e.BLACK=0]="BLACK",e))(Ae||{});var ce=(r=>(r.lt="lt",r.eq="eq",r.gt="gt",r))(ce||{});var O=class{constructor(t,e){u(this,"key");u(this,"value");u(this,"parent");u(this,"_left");u(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){u(this,"options");u(this,"_root");u(this,"_size");u(this,"_defaultOneParamCallback",t=>t.key);t?this.options=k({iterationType:"ITERATIVE"},t):this.options={iterationType:"ITERATIVE"},this._size=0}get root(){return this._root}get size(){return this._size}createNode(t,e){return new O(t,e)}createTree(t){return new h(k(k({},this.options),t))}add(t,e){let r=(s,o)=>{let l=new C([s]);for(;l.size>0;){let a=l.shift();if(o&&a.key===o.key){a.value=o.value;return}let d=this._addTo(o,a);if(d!==void 0)return d;a.left&&l.push(a.left),a.right&&l.push(a.right)}},i,n;if(t===null)n=null;else if(this.isNodeKey(t))n=this.createNode(t,e);else if(t instanceof O)n=t;else return;return this.root?i=r(this.root,n):(this._setRoot(n),n?this._size=1:this._size=0,i=this.root),i}addMany(t,e){return t.map((r,i)=>{if(r instanceof O)return this.add(r.key,r.value);if(r===null)return this.add(null);let n=e==null?void 0:e[i];return this.add(r,n)})}refill(t,e){return this.clear(),t.length===this.addMany(t,e).length}delete(t,e=this._defaultOneParamCallback){let r=[];if(!this.root)return r;(!e||e===this._defaultOneParamCallback)&&t instanceof O&&(e=l=>l);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 l=this.getRightMost(i.left);if(l){let a=l.parent;o=this._swap(i,l),a&&(a.right===l?a.right=l.left:a.left=l.left,s=a)}}}else if(!n)this._setRoot(null);else{let{familyPosition:l}=i;l==="LEFT"||l==="ROOT_LEFT"?n.left=i.right:(l==="RIGHT"||l==="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.ensureNotKey(t),e=this.ensureNotKey(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.options.iterationType){if(t=this.ensureNotKey(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.options.iterationType){var r,i,n;if(t=this.ensureNotKey(t),!t)return-1;if(e==="RECURSIVE"){let s=o=>{if(!o||!o.left&&!o.right)return 0;let l=s(o.left),a=s(o.right);return Math.min(l,a)+1};return s(t)}else{let s=[],o=t,l=null,a=new Map;for(;s.length>0||o;)if(o)s.push(o),o=o.left;else if(o=s[s.length-1],!o.right||l===o.right){if(o=s.pop(),o){let d=o.left&&(r=a.get(o.left))!=null?r:-1,p=o.right&&(i=a.get(o.right))!=null?i:-1;a.set(o,1+Math.min(d,p)),l=o,o=null}}else o=o.right;return(n=a.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.options.iterationType){if((!e||e===this._defaultOneParamCallback)&&t instanceof O&&(e=o=>o),i=this.ensureNotKey(i),!i)return[];let s=[];if(n==="RECURSIVE"){let o=l=>{e(l)===t&&(s.push(l),r)||!l.left&&!l.right||(l.left&&o(l.left),l.right&&o(l.right))};o(i)}else{let o=new C([i]);for(;o.size>0;){let l=o.shift();if(l){if(e(l)===t&&(s.push(l),r))return s;l.left&&o.push(l.left),l.right&&o.push(l.right)}}}return s}has(t,e=this._defaultOneParamCallback,r=this.root,i=this.options.iterationType){return(!e||e===this._defaultOneParamCallback)&&t instanceof O&&(e=n=>n),this.getNodes(t,e,!0,r,i).length>0}getNode(t,e=this._defaultOneParamCallback,r=this.root,i=this.options.iterationType){var n;return(!e||e===this._defaultOneParamCallback)&&t instanceof O&&(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 C([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)}}}}ensureNotKey(t,e="ITERATIVE"){return this.isNodeKey(t)?this.getNodeByKey(t,e):t}get(t,e=this._defaultOneParamCallback,r=this.root,i=this.options.iterationType){var n,s;return(!e||e===this._defaultOneParamCallback)&&t instanceof O&&(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.ensureNotKey(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.options.iterationType){if(t=this.ensureNotKey(t),!t)return t;if(e==="RECURSIVE"){let r=i=>this.isRealNode(i.left)?r(i.left):i;return r(t)}else{let r=se(i=>this.isRealNode(i.left)?r.cont(i.left):i);return r(t)}}getRightMost(t=this.root,e=this.options.iterationType){if(t=this.ensureNotKey(t),!t)return t;if(e==="RECURSIVE"){let r=i=>this.isRealNode(i.right)?r(i.right):i;return r(t)}else{let r=se(i=>this.isRealNode(i.right)?r.cont(i.right):i);return r(t)}}isSubtreeBST(t,e=this.options.iterationType){if(t=this.ensureNotKey(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.options.iterationType){return this.root===null?!0:this.isSubtreeBST(this.root,t)}subTreeTraverse(t=this._defaultOneParamCallback,e=this.root,r=this.options.iterationType,i=!1){e=this.ensureNotKey(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 O&&t.key.toString()!=="NaN"}isNIL(t){return t instanceof O&&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.ensureNotKey(r),!r)return[];let s=[];if(i==="RECURSIVE"){let o=l=>{switch(e){case"in":n?(l&&this.isNodeOrNull(l.left)&&o(l.left),this.isNodeOrNull(l)&&s.push(t(l)),l&&this.isNodeOrNull(l.right)&&o(l.right)):(l&&l.left&&o(l.left),this.isRealNode(l)&&s.push(t(l)),l&&l.right&&o(l.right));break;case"pre":n?(this.isNodeOrNull(l)&&s.push(t(l)),l&&this.isNodeOrNull(l.left)&&o(l.left),l&&this.isNodeOrNull(l.right)&&o(l.right)):(this.isRealNode(l)&&s.push(t(l)),l&&l.left&&o(l.left),l&&l.right&&o(l.right));break;case"post":n?(l&&this.isNodeOrNull(l.left)&&o(l.left),l&&this.isNodeOrNull(l.right)&&o(l.right),this.isNodeOrNull(l)&&s.push(t(l))):(l&&l.left&&o(l.left),l&&l.right&&o(l.right),this.isRealNode(l)&&s.push(t(l)));break}};o(r)}else{let o=[{opt:0,node:r}];for(;o.length>0;){let l=o.pop();if(!(l===void 0||this.isNIL(l.node))){if(n){if(l.node===void 0)continue}else if(l.node===null||l.node===void 0)continue;if(l.opt===1)s.push(t(l.node));else switch(e){case"in":l.node&&o.push({opt:0,node:l.node.right}),o.push({opt:1,node:l.node}),l.node&&o.push({opt:0,node:l.node.left});break;case"pre":l.node&&o.push({opt:0,node:l.node.right}),l.node&&o.push({opt:0,node:l.node.left}),o.push({opt:1,node:l.node});break;case"post":o.push({opt:1,node:l.node}),l.node&&o.push({opt:0,node:l.node.right}),l.node&&o.push({opt:0,node:l.node.left});break;default:l.node&&o.push({opt:0,node:l.node.right}),o.push({opt:1,node:l.node}),l.node&&o.push({opt:0,node:l.node.left});break}}}}return s}bfs(t=this._defaultOneParamCallback,e=this.root,r=this.options.iterationType,i=!1){if(e=this.ensureNotKey(e),!e)return[];let n=[];if(r==="RECURSIVE"){let s=new C([e]),o=l=>{if(s.size===0)return;let a=s.shift();n.push(t(a)),i?(a&&this.isNodeOrNull(a.left)&&s.push(a.left),a&&this.isNodeOrNull(a.right)&&s.push(a.right)):(a.left&&s.push(a.left),a.right&&s.push(a.right)),o(l+1)};o(0)}else{let s=new C([e]);for(;s.size>0;){let o=s.size;for(let l=0;l<o;l++){let a=s.shift();n.push(t(a)),i?(a&&this.isNodeOrNull(a.left)&&s.push(a.left),a&&this.isNodeOrNull(a.right)&&s.push(a.right)):(a.left&&s.push(a.left),a.right&&s.push(a.right))}}}return n}listLevels(t=this._defaultOneParamCallback,e=this.root,r=this.options.iterationType,i=!1){e=this.ensureNotKey(e);let n=[];if(!e)return n;if(r==="RECURSIVE"){let s=(o,l)=>{n[l]||(n[l]=[]),n[l].push(t(o)),i?(o&&this.isNodeOrNull(o.left)&&s(o.left,l+1),o&&this.isNodeOrNull(o.right)&&s(o.right,l+1)):(o&&o.left&&s(o.left,l+1),o&&o.right&&s(o.right,l+1))};s(e,0)}else{let s=[[e,0]];for(;s.length>0;){let o=s.pop(),[l,a]=o;n[a]||(n[a]=[]),n[a].push(t(l)),i?(l&&this.isNodeOrNull(l.right)&&s.push([l.right,a+1]),l&&this.isNodeOrNull(l.left)&&s.push([l.left,a+1])):(l&&l.right&&s.push([l.right,a+1]),l&&l.left&&s.push([l.left,a+1]))}}return n}getPredecessor(t){if(t=this.ensureNotKey(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.ensureNotKey(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.ensureNotKey(r),r===null)return[];let i=[],n=r,s=l=>{let a=null,d=null;for(;l;)d=l.right,l.right=a,a=l,l=d;return a},o=l=>{let a=s(l),d=a;for(;d;)i.push(t(d)),d=d.right;s(a)};switch(e){case"in":for(;n;){if(n.left){let l=this.getPredecessor(n);if(l.right)l.right=null;else{l.right=n,n=n.left;continue}}i.push(t(n)),n=n.right}break;case"pre":for(;n;){if(n.left){let l=this.getPredecessor(n);if(l.right)l.right=null;else{l.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 l=this.getPredecessor(n);if(l.right===null){l.right=n,n=n.left;continue}else l.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.options.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*Te(this[Symbol.iterator](t.left))),yield[t.key,t.value],t.right&&!isNaN(t.key)&&(yield*Te(this[Symbol.iterator](t.right)))}print(t=this.root,e){let r=k({isShowUndefined:!1,isShowNull:!1,isShowRedBlackNIL:!1},e);if(t=this.ensureNotKey(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 me=(h,t)=>{if(t=Symbol[h])return t;throw Error("Symbol."+h+" is not defined")};var ge=(h,t,e)=>t in h?se(h,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[t]=e,k=(h,t)=>{for(var e in t||(t={}))Xe.call(t,e)&&ge(h,e,t[e]);if(Qe)for(var e of Qe(t))$e.call(t,e)&&ge(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 u=(h,t,e)=>(ge(h,typeof t!="symbol"?t+"":t,e),e);var Ye=(h,t,e)=>new Promise((r,i)=>{var n=l=>{try{o(e.next(l))}catch(a){i(a)}},s=l=>{try{o(e.throw(l))}catch(a){i(a)}},o=l=>l.done?r(l.value):Promise.resolve(l.value).then(n,s);o((e=e.apply(h,t)).next())}),it=function(h,t){this[0]=h,this[1]=t};var j=h=>{var t=h[me("asyncIterator")],e=!1,r,i={};return t==null?(t=h[me("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 l=t[n](s);if(!(l instanceof Object))throw TypeError("Object expected");o(l)}),1)}}),i[me("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:()=>re,AVLTreeNode:()=>q,AbstractEdge:()=>D,AbstractGraph:()=>A,AbstractVertex:()=>B,BST:()=>P,BSTNode:()=>R,BinaryIndexedTree:()=>Ae,BinaryTree:()=>te,BinaryTreeNode:()=>O,CP:()=>pe,Character:()=>Te,Deque:()=>ve,DirectedEdge:()=>U,DirectedGraph:()=>ee,DirectedVertex:()=>F,DoublyLinkedList:()=>ke,DoublyLinkedListNode:()=>C,FamilyPosition:()=>ce,FibonacciHeap:()=>Ce,FibonacciHeapNode:()=>ae,HashMap:()=>Ve,HashTable:()=>Ne,HashTableNode:()=>Y,Heap:()=>I,IterationType:()=>H,LinkedListQueue:()=>Ke,MapEdge:()=>fe,MapGraph:()=>ze,MapVertex:()=>de,Matrix2D:()=>Ue,MatrixNTI2D:()=>je,MaxHeap:()=>Re,MaxPriorityQueue:()=>Me,MinHeap:()=>Se,MinPriorityQueue:()=>Le,Navigator:()=>Ge,ObjectDeque:()=>we,PriorityQueue:()=>z,Queue:()=>K,RBTNColor:()=>De,RedBlackTree:()=>He,RedBlackTreeNode:()=>W,SegmentTree:()=>Fe,SegmentTreeNode:()=>G,SinglyLinkedList:()=>Z,SinglyLinkedListNode:()=>w,SkipList:()=>Be,SkipListNode:()=>$,Stack:()=>Oe,THUNK_SYMBOL:()=>be,TreeMultimap:()=>Pe,TreeMultimapNode:()=>Q,TreeNode:()=>qe,Trie:()=>We,TrieNode:()=>ie,UndirectedEdge:()=>ue,UndirectedGraph:()=>Ie,UndirectedVertex:()=>he,Vector2D:()=>X,arrayRemove:()=>L,calcMinUnitsRequired:()=>le,getMSB:()=>xe,isThunk:()=>_e,isWeakKey:()=>J,rangeCheck:()=>M,throwRangeError:()=>st,toThunk:()=>Ee,trampoline:()=>oe,trampolineAsync:()=>nt,uuidV4:()=>ye});var Y=class{constructor(t,e){u(this,"key");u(this,"value");u(this,"next");this.key=t,this.value=e,this.next=void 0}},S=class S{constructor(t=S.DEFAULT_CAPACITY,e){u(this,"_capacity");u(this,"_size");u(this,"_buckets");u(this,"_hashFn");this._hashFn=e||this._defaultHashFn,this._capacity=Math.max(t,S.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 Y(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>=S.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 S,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 S,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 Y(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}};u(S,"DEFAULT_CAPACITY",16),u(S,"LOAD_FACTOR",.75);var Ne=S;var ye=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)})},L=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},be=Symbol("thunk"),_e=h=>typeof h=="function"&&h.__THUNK__===be,Ee=h=>{let t=()=>h();return t.__THUNK__=be,t},oe=h=>Object.assign((...e)=>{let r=h(...e);for(;_e(r)&&typeof r=="function";)r=r();return r},{cont:(...e)=>Ee(()=>h(...e))}),nt=h=>Object.assign((...e)=>Ye(void 0,null,function*(){let r=yield h(...e);for(;_e(r)&&typeof r=="function";)r=yield r();return r}),{cont:(...e)=>Ee(()=>h(...e))}),xe=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)},J=h=>{let t=typeof h;return t==="object"&&h!==null||t==="function"},le=(h,t)=>Math.floor((h+t-1)/t);var Ve=class h{constructor(t={elements:[],hashFn:e=>String(e),objHashFn:e=>e}){u(this,"_noObjMap",{});u(this,"_objMap",new WeakMap);u(this,"_head");u(this,"_tail");u(this,"_sentinel");u(this,"_hashFn");u(this,"_objHashFn");u(this,"_size",0);this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel;let{elements:e,hashFn:r,objHashFn:i}=t;if(this._hashFn=r,this._objHashFn=i,e)for(let n of e)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(J(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(J(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(J(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}_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){u(this,"value");u(this,"next");this.value=t,this.next=null}},Z=class h{constructor(){u(this,"_head");u(this,"_tail");u(this,"_length");this._head=null,this._tail=null,this._length=0}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 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=null,this._tail=null,this._length--,r}let t=this.head;for(;t.next!==this.tail;)t=t.next;let e=this.tail.value;return t.next=null,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=null;for(;r;){if(r.value===e)return i===null?(this._head=r.next,r===this.tail&&(this._tail=null)):(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=null,this._tail=null,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=null,e=this.head,r=null;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}return null}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}return null}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 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 C=class{constructor(t){u(this,"value");u(this,"next");u(this,"prev");this.value=t,this.next=null,this.prev=null}},ke=class h{constructor(){u(this,"_head");u(this,"_tail");u(this,"_length");this._head=null,this._tail=null,this._length=0}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 C(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=null,this._tail=null):(this._tail=t.prev,this.tail.next=null),this._length--,t.value}popLast(){return this.pop()}shift(){if(!this.head)return;let t=this.head;return this.head===this.tail?(this._head=null,this._tail=null):(this._head=t.next,this.head.prev=null),this._length--,t.value}popFirst(){return this.shift()}unshift(t){let e=new C(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 null;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}return null}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),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 C?r=t:r=this.getNode(t),r){let i=new C(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 C?r=t:r=this.getNode(t),r){let i=new C(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 C?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=null,this._tail=null,this._length=0}find(t){let e=this.head;for(;e;){if(t(e.value))return e.value;e=e.next}return null}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}return null}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}};var $=class{constructor(t,e,r){u(this,"key");u(this,"value");u(this,"forward");this.key=t,this.value=e,this.forward=new Array(r)}},Be=class{constructor(t=16,e=.5){u(this,"_head");u(this,"_level");u(this,"_maxLevel");u(this,"_probability");this._head=new $(null,null,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 $(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]!==null&&(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]===null;)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=null;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 Oe=class h{constructor(t){u(this,"_elements");this._elements=Array.isArray(t)?t:[]}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(){return this.isEmpty()?null:this.elements[this.elements.length-1]}push(t){return this.elements.push(t),this}pop(){return this.isEmpty()?null:this.elements.pop()||null}toArray(){return this.elements.slice()}clear(){this._elements=[]}clone(){return new h(this.elements.slice())}*[Symbol.iterator](){for(let t=this.elements.length-1;t>=0;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}};var Ke=class extends Z{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()}},K=class h{constructor(t){u(this,"_nodes");u(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))}*[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){u(this,"_bucketFirst",0);u(this,"_firstInBucket",0);u(this,"_bucketLast",0);u(this,"_lastInBucket",0);u(this,"_bucketCount",0);u(this,"_bucketSize");u(this,"_buckets",[]);u(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=le(r,this._bucketSize)||1;for(let n=0;n<this._bucketCount;++n)this._buckets.push(new Array(this._bucketSize));let i=le(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}_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){u(this,"_nodes",{});u(this,"_capacity",Number.MAX_SAFE_INTEGER);u(this,"_first",-1);u(this,"_last",-1);u(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 I=class h{constructor(t){u(this,"_elements",[]);u(this,"_comparator");this._comparator=t.comparator,t.elements&&t.elements.length>0&&(this._elements=t.elements,this.fix())}get elements(){return this._elements}get comparator(){return this._comparator}get size(){return this.elements.length}get leaf(){var t;return(t=this.elements[this.size-1])!=null?t:void 0}static heapify(t){return new h(t)}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({comparator:this.comparator});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({comparator:this.comparator}),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}_bubbleUp(t){let e=this.elements[t];for(;t>0;){let r=t-1>>1,i=this.elements[r];if(this._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._comparator(s,this.elements[n])>0&&(i=n,s=this.elements[n]),this._comparator(s,r)>=0)break;this.elements[t]=s,t=i}this.elements[t]=r}},ae=class{constructor(t,e=0){u(this,"element");u(this,"degree");u(this,"left");u(this,"right");u(this,"child");u(this,"parent");u(this,"marked");this.element=t,this.degree=e,this.marked=!1}},Ce=class{constructor(t){u(this,"_root");u(this,"_size",0);u(this,"_min");u(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()}}defaultComparator(t,e){return t<e?-1:t>e?1:0}createNode(t){return new ae(t)}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 Re=class extends I{constructor(t={comparator:(e,r)=>{if(typeof e=="number"&&typeof r=="number")return r-e;throw new Error("The a, b params of compare function must be number")}}){super(t)}};var Se=class extends I{constructor(t={comparator:(e,r)=>{if(typeof e=="number"&&typeof r=="number")return e-r;throw new Error("The a, b params of compare function must be number")}}){super(t)}};var z=class extends I{constructor(t){super(t)}};var Le=class extends z{constructor(t={comparator:(e,r)=>{if(typeof e=="number"&&typeof r=="number")return e-r;throw new Error("The a, b params of compare function must be number")}}){super(t)}};var Me=class extends z{constructor(t={comparator:(e,r)=>{if(typeof e=="number"&&typeof r=="number")return r-e;throw new Error("The a, b params of compare function must be number")}}){super(t)}};var B=class{constructor(t,e){u(this,"key");u(this,"value");this.key=t,this.value=e}},D=class{constructor(t,e){u(this,"value");u(this,"weight");u(this,"_hashCode");this.weight=t!==void 0?t:1,this.value=e,this._hashCode=ye()}get hashCode(){return this._hashCode}},A=class{constructor(){u(this,"_vertices",new Map)}get vertices(){return this._vertices}getVertex(t){return this._vertices.get(t)||null}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:l,path:a}=o.pop();if(l===s&&(i.push(a),i.length>=r))return i;let d=this.getNeighbors(l);for(let p of d)if(!a.includes(p)){let g=[...a,p];o.push({vertex:p,path:g})}}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 null;let s=new Map,o=new K([n]);s.set(n,!0);let l=0;for(;o.size>0;){for(let a=0;a<o.size;a++){let d=o.shift();if(d===i)return l;if(d!==void 0){let p=this.getNeighbors(d);for(let g of p)s.has(g)||(s.set(g,!0),o.push(g))}}l++}return null}}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),l=1/0,a=-1,d=0;for(let p of o){let g=this.getPathSumWeight(p);g<l&&(l=g,a=d),d++}return o[a]||null}else return(s=(n=this.dijkstra(t,e,!0,!0))==null?void 0:n.minPath)!=null?s:[];else{let o=[],l=this._getVertex(t),a=this._getVertex(e);if(!(l&&a))return[];let d=(p,g,b,_)=>{if(b.add(p),p===g){o=[l,..._];return}let V=this.getNeighbors(p);for(let N of V)b.has(N)||(_.push(N),d(N,g,b,_),_.pop());b.delete(p)};return d(l,a,new Set,[]),o}}dijkstraWithoutHeap(t,e,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1),e===void 0&&(e=null);let n=1/0,s=null,o=[],l=[],a=this._vertices,d=new Map,p=new Set,g=new Map,b=this._getVertex(t),_=e?this._getVertex(e):null;if(!b)return null;for(let f of a){let c=f[1];c instanceof B&&d.set(c,1/0)}d.set(b,0),g.set(b,null);let V=()=>{let f=1/0,c=null;for(let[T,m]of d)p.has(T)||m<f&&(f=m,c=T);return c},N=f=>{for(let c of a){let T=c[1];if(T instanceof B){let m=[T],y=g.get(T);for(;y;)m.push(y),y=g.get(y);let E=m.reverse();c[1]===f&&(o=E),l.push(E)}}};for(let f=1;f<a.size;f++){let c=V();if(c){if(p.add(c),_&&_===c)return r&&(n=d.get(_)||1/0),i&&N(_),{distMap:d,preMap:g,seen:p,paths:l,minDist:n,minPath:o};let T=this.getNeighbors(c);for(let m of T)if(!p.has(m)){let y=this.getEdge(c,m);if(y){let E=d.get(c),x=d.get(m);E!==void 0&&x!==void 0&&y.weight+E<x&&(d.set(m,y.weight+E),g.set(m,c))}}}}return r&&d.forEach((f,c)=>{c!==b&&f<n&&(n=f,i&&(s=c))}),i&&N(s),{distMap:d,preMap:g,seen:p,paths:l,minDist:n,minPath:o}}dijkstra(t,e,r,i){var f;r===void 0&&(r=!1),i===void 0&&(i=!1),e===void 0&&(e=null);let n=1/0,s=null,o=[],l=[],a=this._vertices,d=new Map,p=new Set,g=new Map,b=this._getVertex(t),_=e?this._getVertex(e):null;if(!b)return null;for(let c of a){let T=c[1];T instanceof B&&d.set(T,1/0)}let V=new z({comparator:(c,T)=>c.key-T.key});V.add({key:0,value:b}),d.set(b,0),g.set(b,null);let N=c=>{for(let T of a){let m=T[1];if(m instanceof B){let y=[m],E=g.get(m);for(;E;)y.push(E),E=g.get(E);let x=y.reverse();T[1]===c&&(o=x),l.push(x)}}};for(;V.size>0;){let c=V.poll(),T=c==null?void 0:c.key,m=c==null?void 0:c.value;if(T!==void 0&&m){if(p.add(m),_&&_===m)return r&&(n=d.get(_)||1/0),i&&N(_),{distMap:d,preMap:g,seen:p,paths:l,minDist:n,minPath:o};let y=this.getNeighbors(m);for(let E of y)if(!p.has(E)){let x=(f=this.getEdge(m,E))==null?void 0:f.weight;if(typeof x=="number"){let v=d.get(E);v&&T+x<v&&(V.add({key:T+x,value:E}),g.set(E,m),d.set(E,T+x))}}}}return r&&d.forEach((c,T)=>{T!==b&&c<n&&(n=c,i&&(s=T))}),i&&N(s),{distMap:d,preMap:g,seen:p,paths:l,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,l=new Map,a=1/0,d=[],p;if(e&&(p=!1),!n)return{hasNegativeCycle:p,distMap:o,preMap:l,paths:s,min:a,minPath:d};let g=this._vertices,b=g.size,_=this.edgeSet(),V=_.length;this._vertices.forEach(f=>{o.set(f,1/0)}),o.set(n,0);for(let f=1;f<b;++f)for(let c=0;c<V;++c){let T=this.getEndsOfEdge(_[c]);if(T){let[m,y]=T,E=_[c].weight,x=o.get(m),v=o.get(y);x!==void 0&&v!==void 0&&o.get(m)!==1/0&&x+E<v&&(o.set(y,x+E),i&&l.set(y,m))}}let N=null;if(r&&o.forEach((f,c)=>{c!==n&&f<a&&(a=f,i&&(N=c))}),i)for(let f of g){let c=f[1];if(c instanceof B){let T=[c],m=l.get(c);for(;m!==void 0;)T.push(m),m=l.get(m);let y=T.reverse();f[1]===N&&(d=y),s.push(y)}}for(let f=0;f<V;++f){let c=this.getEndsOfEdge(_[f]);if(c){let[T]=c,m=_[f].weight,y=o.get(T);y&&y!==1/0&&y+m<y&&(p=!0)}}return{hasNegativeCycle:p,distMap:o,preMap:l,paths:s,min:a,minPath:d}}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]=null}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 l=0;l<e;l++)r[o][l]>r[o][s]+r[s][l]&&(r[o][l]=r[o][s]+r[s][l],i[o][l]=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,l=this._vertices;l.forEach(f=>{s.set(f,-1),o.set(f,1/0)});let[a]=l.values(),d=[],p=[],g=0,b=(f,c)=>{g++,s.set(f,g),o.set(f,g);let T=this.getNeighbors(f),m=0;for(let y of T)if(y!==c){s.get(y)===-1&&(m++,b(y,f));let E=o.get(y),x=o.get(f);x!==void 0&&E!==void 0&&o.set(f,Math.min(x,E));let v=s.get(f);if(E!==void 0&&v!==void 0&&(t&&(f===a&&m>=2||f!==a&&E>=v)&&d.push(f),e&&E>v)){let ne=this.getEdge(f,y);ne&&p.push(ne)}}};b(a,null);let _=new Map,V=()=>{let f=new Map;return o.forEach((c,T)=>{var m;f.has(c)?(m=f.get(c))==null||m.push(T):f.set(c,[T])}),f};r&&(_=V());let N=new Map;if(i){let f=new Map;f.size<1&&(f=V()),f.forEach((c,T)=>{c.length>1&&N.set(T,c)})}return{dfnMap:s,lowMap:o,bridges:p,cutVertexes:d,SCCs:_,cycles:N}}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}_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)||null}_getVertexKey(t){return t instanceof B?t.key:t}};var F=class extends B{constructor(t,e){super(t,e)}},U=class extends D{constructor(e,r,i,n){super(i,n);u(this,"src");u(this,"dest");this.src=e,this.dest=r}},ee=class extends A{constructor(){super();u(this,"_outEdgeMap",new Map);u(this,"_inEdgeMap",new Map)}get outEdgeMap(){return this._outEdgeMap}get inEdgeMap(){return this._inEdgeMap}createVertex(e,r){return new F(e,r!=null?r:e)}createEdge(e,r,i,n){return new U(e,r,i!=null?i:1,n)}getEdge(e,r){let i=[];if(e!==null&&r!==null){let n=this._getVertex(e),s=this._getVertex(r);if(n&&s){let o=this._outEdgeMap.get(n);o&&(i=o.filter(l=>l.dest===s.key))}}return i[0]||null}deleteEdgeSrcToDest(e,r){let i=this._getVertex(e),n=this._getVertex(r),s=null;if(!i||!n)return null;let o=this._outEdgeMap.get(i);o&&L(o,a=>a.dest===n.key);let l=this._inEdgeMap.get(n);return l&&(s=L(l,a=>a.src===i.key)[0]||null),s}deleteEdge(e){let r=null,i=this._getVertex(e.src),n=this._getVertex(e.dest);if(i&&n){let s=this._outEdgeMap.get(i);s&&s.length>0&&L(s,l=>l.src===i.key);let o=this._inEdgeMap.get(n);o&&o.length>0&&(r=L(o,l=>l.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===null)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 l=this.getDestinations(o);for(let a of l){let d=r.get(a);d===0?s(a):d===1&&(n=!0)}r.set(o,2),i.push(o)};for(let o of this.vertices)r.get(o[1])===0&&s(o[1]);return n?null:(e==="key"&&(i=i.map(o=>o instanceof F?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 null;let r=this._getVertex(e.src),i=this._getVertex(e.dest);return r&&i?[r,i]:null}_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 B{constructor(t,e){super(t,e)}},ue=class extends D{constructor(e,r,i,n){super(i,n);u(this,"vertices");this.vertices=[e,r]}},Ie=class extends A{constructor(){super();u(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 ue(e,r,i!=null?i:1,n)}getEdge(e,r){var n;let i=[];if(e!==null&&r!==null){let s=this._getVertex(e),o=this._getVertex(r);s&&o&&(i=(n=this._edges.get(s))==null?void 0:n.filter(l=>l.vertices.includes(o.key)))}return i&&i[0]||null}deleteEdgeBetween(e,r){let i=this._getVertex(e),n=this._getVertex(r);if(!i||!n)return null;let s=this._edges.get(i),o=null;s&&(o=L(s,a=>a.vertices.includes(n.key))[0]||null);let l=this._edges.get(n);return l&&L(l,a=>a.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(l=>l!==i.key)[0]);o&&r.push(o)}}return r}getEndsOfEdge(e){if(!this.hasEdge(e.vertices[0],e.vertices[1]))return null;let r=this._getVertex(e.vertices[0]),i=this._getVertex(e.vertices[1]);return r&&i?[r,i]:null}_addEdgeOnly(e){for(let r of e.vertices){let i=this._getVertex(r);if(i===null)return!1;if(i){let n=this._edges.get(i);n?n.push(e):this._edges.set(i,[e])}}return!0}};var de=class extends F{constructor(e,r,i,n){super(e,r);u(this,"lat");u(this,"long");this.lat=i,this.long=n}},fe=class extends U{constructor(t,e,r,i){super(t,e,r,i)}},ze=class extends ee{constructor(e,r){super();u(this,"_origin",[0,0]);u(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 de(e,r,i,n)}createEdge(e,r,i,n){return new fe(e,r,i,n)}};var H=(e=>(e.ITERATIVE="ITERATIVE",e.RECURSIVE="RECURSIVE",e))(H||{}),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 De=(e=>(e[e.RED=1]="RED",e[e.BLACK=0]="BLACK",e))(De||{});var pe=(r=>(r.lt="lt",r.eq="eq",r.gt="gt",r))(pe||{});var O=class{constructor(t,e){u(this,"key");u(this,"value");u(this,"parent");u(this,"_left");u(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"}},te=class h{constructor(t){u(this,"options");u(this,"_root");u(this,"_size");u(this,"_defaultOneParamCallback",t=>t.key);t?this.options=k({iterationType:"ITERATIVE"},t):this.options={iterationType:"ITERATIVE"},this._size=0}get root(){return this._root}get size(){return this._size}createNode(t,e){return new O(t,e)}createTree(t){return new h(k(k({},this.options),t))}add(t,e){let r=(s,o)=>{let l=new K([s]);for(;l.size>0;){let a=l.shift();if(o&&a.key===o.key){a.value=o.value;return}let d=this._addTo(o,a);if(d!==void 0)return d;a.left&&l.push(a.left),a.right&&l.push(a.right)}},i,n;if(t===null)n=null;else if(this.isNodeKey(t))n=this.createNode(t,e);else if(t instanceof O)n=t;else return;return this.root?i=r(this.root,n):(this._setRoot(n),n?this._size=1:this._size=0,i=this.root),i}addMany(t,e){return t.map((r,i)=>{if(r instanceof O)return this.add(r.key,r.value);if(r===null)return this.add(null);let n=e==null?void 0:e[i];return this.add(r,n)})}refill(t,e){return this.clear(),t.length===this.addMany(t,e).length}delete(t,e=this._defaultOneParamCallback){let r=[];if(!this.root)return r;(!e||e===this._defaultOneParamCallback)&&t instanceof O&&(e=l=>l);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 l=this.getRightMost(i.left);if(l){let a=l.parent;o=this._swap(i,l),a&&(a.right===l?a.right=l.left:a.left=l.left,s=a)}}}else if(!n)this._setRoot(null);else{let{familyPosition:l}=i;l==="LEFT"||l==="ROOT_LEFT"?n.left=i.right:(l==="RIGHT"||l==="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.ensureNotKey(t),e=this.ensureNotKey(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.options.iterationType){if(t=this.ensureNotKey(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.options.iterationType){var r,i,n;if(t=this.ensureNotKey(t),!t)return-1;if(e==="RECURSIVE"){let s=o=>{if(!o||!o.left&&!o.right)return 0;let l=s(o.left),a=s(o.right);return Math.min(l,a)+1};return s(t)}else{let s=[],o=t,l=null,a=new Map;for(;s.length>0||o;)if(o)s.push(o),o=o.left;else if(o=s[s.length-1],!o.right||l===o.right){if(o=s.pop(),o){let d=o.left&&(r=a.get(o.left))!=null?r:-1,p=o.right&&(i=a.get(o.right))!=null?i:-1;a.set(o,1+Math.min(d,p)),l=o,o=null}}else o=o.right;return(n=a.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.options.iterationType){if((!e||e===this._defaultOneParamCallback)&&t instanceof O&&(e=o=>o),i=this.ensureNotKey(i),!i)return[];let s=[];if(n==="RECURSIVE"){let o=l=>{e(l)===t&&(s.push(l),r)||!l.left&&!l.right||(l.left&&o(l.left),l.right&&o(l.right))};o(i)}else{let o=new K([i]);for(;o.size>0;){let l=o.shift();if(l){if(e(l)===t&&(s.push(l),r))return s;l.left&&o.push(l.left),l.right&&o.push(l.right)}}}return s}has(t,e=this._defaultOneParamCallback,r=this.root,i=this.options.iterationType){return(!e||e===this._defaultOneParamCallback)&&t instanceof O&&(e=n=>n),this.getNodes(t,e,!0,r,i).length>0}getNode(t,e=this._defaultOneParamCallback,r=this.root,i=this.options.iterationType){var n;return(!e||e===this._defaultOneParamCallback)&&t instanceof O&&(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 K([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)}}}}ensureNotKey(t,e="ITERATIVE"){return this.isNodeKey(t)?this.getNodeByKey(t,e):t}get(t,e=this._defaultOneParamCallback,r=this.root,i=this.options.iterationType){var n,s;return(!e||e===this._defaultOneParamCallback)&&t instanceof O&&(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.ensureNotKey(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.options.iterationType){if(t=this.ensureNotKey(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.options.iterationType){if(t=this.ensureNotKey(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.options.iterationType){if(t=this.ensureNotKey(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.options.iterationType){return this.root===null?!0:this.isSubtreeBST(this.root,t)}subTreeTraverse(t=this._defaultOneParamCallback,e=this.root,r=this.options.iterationType,i=!1){e=this.ensureNotKey(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 O&&t.key.toString()!=="NaN"}isNIL(t){return t instanceof O&&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.ensureNotKey(r),!r)return[];let s=[];if(i==="RECURSIVE"){let o=l=>{switch(e){case"in":n?(l&&this.isNodeOrNull(l.left)&&o(l.left),this.isNodeOrNull(l)&&s.push(t(l)),l&&this.isNodeOrNull(l.right)&&o(l.right)):(l&&l.left&&o(l.left),this.isRealNode(l)&&s.push(t(l)),l&&l.right&&o(l.right));break;case"pre":n?(this.isNodeOrNull(l)&&s.push(t(l)),l&&this.isNodeOrNull(l.left)&&o(l.left),l&&this.isNodeOrNull(l.right)&&o(l.right)):(this.isRealNode(l)&&s.push(t(l)),l&&l.left&&o(l.left),l&&l.right&&o(l.right));break;case"post":n?(l&&this.isNodeOrNull(l.left)&&o(l.left),l&&this.isNodeOrNull(l.right)&&o(l.right),this.isNodeOrNull(l)&&s.push(t(l))):(l&&l.left&&o(l.left),l&&l.right&&o(l.right),this.isRealNode(l)&&s.push(t(l)));break}};o(r)}else{let o=[{opt:0,node:r}];for(;o.length>0;){let l=o.pop();if(!(l===void 0||this.isNIL(l.node))){if(n){if(l.node===void 0)continue}else if(l.node===null||l.node===void 0)continue;if(l.opt===1)s.push(t(l.node));else switch(e){case"in":l.node&&o.push({opt:0,node:l.node.right}),o.push({opt:1,node:l.node}),l.node&&o.push({opt:0,node:l.node.left});break;case"pre":l.node&&o.push({opt:0,node:l.node.right}),l.node&&o.push({opt:0,node:l.node.left}),o.push({opt:1,node:l.node});break;case"post":o.push({opt:1,node:l.node}),l.node&&o.push({opt:0,node:l.node.right}),l.node&&o.push({opt:0,node:l.node.left});break;default:l.node&&o.push({opt:0,node:l.node.right}),o.push({opt:1,node:l.node}),l.node&&o.push({opt:0,node:l.node.left});break}}}}return s}bfs(t=this._defaultOneParamCallback,e=this.root,r=this.options.iterationType,i=!1){if(e=this.ensureNotKey(e),!e)return[];let n=[];if(r==="RECURSIVE"){let s=new K([e]),o=l=>{if(s.size===0)return;let a=s.shift();n.push(t(a)),i?(a&&this.isNodeOrNull(a.left)&&s.push(a.left),a&&this.isNodeOrNull(a.right)&&s.push(a.right)):(a.left&&s.push(a.left),a.right&&s.push(a.right)),o(l+1)};o(0)}else{let s=new K([e]);for(;s.size>0;){let o=s.size;for(let l=0;l<o;l++){let a=s.shift();n.push(t(a)),i?(a&&this.isNodeOrNull(a.left)&&s.push(a.left),a&&this.isNodeOrNull(a.right)&&s.push(a.right)):(a.left&&s.push(a.left),a.right&&s.push(a.right))}}}return n}listLevels(t=this._defaultOneParamCallback,e=this.root,r=this.options.iterationType,i=!1){e=this.ensureNotKey(e);let n=[];if(!e)return n;if(r==="RECURSIVE"){let s=(o,l)=>{n[l]||(n[l]=[]),n[l].push(t(o)),i?(o&&this.isNodeOrNull(o.left)&&s(o.left,l+1),o&&this.isNodeOrNull(o.right)&&s(o.right,l+1)):(o&&o.left&&s(o.left,l+1),o&&o.right&&s(o.right,l+1))};s(e,0)}else{let s=[[e,0]];for(;s.length>0;){let o=s.pop(),[l,a]=o;n[a]||(n[a]=[]),n[a].push(t(l)),i?(l&&this.isNodeOrNull(l.right)&&s.push([l.right,a+1]),l&&this.isNodeOrNull(l.left)&&s.push([l.left,a+1])):(l&&l.right&&s.push([l.right,a+1]),l&&l.left&&s.push([l.left,a+1]))}}return n}getPredecessor(t){if(t=this.ensureNotKey(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.ensureNotKey(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.ensureNotKey(r),r===null)return[];let i=[],n=r,s=l=>{let a=null,d=null;for(;l;)d=l.right,l.right=a,a=l,l=d;return a},o=l=>{let a=s(l),d=a;for(;d;)i.push(t(d)),d=d.right;s(a)};switch(e){case"in":for(;n;){if(n.left){let l=this.getPredecessor(n);if(l.right)l.right=null;else{l.right=n,n=n.left;continue}}i.push(t(n)),n=n.right}break;case"pre":for(;n;){if(n.left){let l=this.getPredecessor(n);if(l.right)l.right=null;else{l.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 l=this.getPredecessor(n);if(l.right===null){l.right=n,n=n.left;continue}else l.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.options.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*j(this[Symbol.iterator](t.left))),yield[t.key,t.value],t.right&&!isNaN(t.key)&&(yield*j(this[Symbol.iterator](t.right)))}print(t=this.root,e){let r=k({isShowUndefined:!1,isShowNull:!1,isShowRedBlackNIL:!1},e);if(t=this.ensureNotKey(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 l=t.key,a=isNaN(l)?"S":l.toString(),d=a.length;return o(a,d,this._displayAux(t.left,e),this._displayAux(t.right,e))}else{let l=t===void 0?"U":"N",a=l.length;return o(l,a,[[""],1,0,0],[[""],1,0,0])}function o(l,a,d,p){let[T,_,b,x]=d,[m,f,c,N]=p,g=" ".repeat(Math.max(0,x+1))+"_".repeat(Math.max(0,_-x-1))+l+"_".repeat(Math.max(0,N))+" ".repeat(Math.max(0,f-N)),y=(b>0?" ".repeat(x)+"/"+" ".repeat(_-x-1):" ".repeat(_))+" ".repeat(a)+(c>0?" ".repeat(N)+"\\"+" ".repeat(f-N-1):" ".repeat(f)),E=[g,y];for(let V=0;V<Math.max(b,c);V++){let v=V<b?T[V]:" ".repeat(_),ie=V<c?m[V]:" ".repeat(f);E.push(v+" ".repeat(a)+ie)}return[E,_+a+f,Math.max(b,c)+2,_+Math.floor(a/2)]}}_swap(t,e){if(t=this.ensureNotKey(t),e=this.ensureNotKey(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}}_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 R=class extends O{constructor(e,r){super(e,r);u(this,"parent");u(this,"_left");u(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){super(e);u(this,"options");u(this,"_root");e?this.options=k({iterationType:"ITERATIVE",comparator:(r,i)=>r-i},e):this.options={iterationType:"ITERATIVE",comparator:(r,i)=>r-i},this._root=void 0}get root(){return this._root}createNode(e,r){return new R(e,r)}createTree(e){return new h(k(k({},this.options),e))}add(e,r){if(e===null)return;let i,n;if(e instanceof R?n=e:this.isNodeKey(e)?n=this.createNode(e,r):n=void 0,this.root===void 0)this._setRoot(n),this._size=this.size+1,i=this.root;else{let s=this.root,o=!0;for(;o;)s!==void 0&&n!==void 0?this._compare(s.key,n.key)==="eq"?(n&&(s.value=n.value),o=!1,i=s):this._compare(s.key,n.key)==="gt"?s.left===void 0?(n&&(n.parent=s),s.left=n,this._size=this.size+1,o=!1,i=s.left):s.left&&(s=s.left):this._compare(s.key,n.key)==="lt"&&(s.right===void 0?(n&&(n.parent=s),s.right=n,this._size=this.size+1,o=!1,i=s.right):s.right&&(s=s.right)):o=!1}return i}addMany(e,r,i=!0,n=this.options.iterationType){function s(m){return m.indexOf(void 0)===-1}if(!i||!s(e))return super.addMany(e,r).map(m=>m!=null?m:void 0);let o=[],l=e.map((m,f)=>[m,r==null?void 0:r[f]]),a=[];function d(m){for(let[f]of m)if(f instanceof R)return!0;return!1}let p=m=>{for(let[f]of m)if(this.isNodeKey(f))return!0;return!1},T=[],_=[];if(d(l))a=l.sort((m,f)=>m[0].key-f[0].key);else if(p(l))a=l.sort((m,f)=>m[0]-f[0]);else throw new Error("Invalid input keysOrNodes");T=a.map(([m])=>m),_=a.map(([,m])=>m);let b=(m,f)=>{if(m.length===0)return;let c=Math.floor((m.length-1)/2),N=this.add(m[c],f==null?void 0:f[c]);o.push(N),b(m.slice(0,c),f==null?void 0:f.slice(0,c)),b(m.slice(c+1),f==null?void 0:f.slice(c+1))},x=()=>{let f=[[0,a.length-1]];for(;f.length>0;){let c=f.pop();if(c){let[N,g]=c;if(N<=g){let y=N+Math.floor((g-N)/2),E=this.add(T[y],_==null?void 0:_[y]);o.push(E),f.push([y+1,g]),f.push([N,y-1])}}}};return n==="RECURSIVE"?b(T,_):x(),o}lastKey(e=this.root,r=this.options.iterationType){var i,n,s,o,l,a;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:(a=(l=this.getRightMost(e,r))==null?void 0:l.key)!=null?a: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 C([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)}}}}ensureNotKey(e,r="ITERATIVE"){return this.isNodeKey(e)?this.getNodeByKey(e,r):e}getNodes(e,r=this._defaultOneParamCallback,i=!1,n=this.root,s=this.options.iterationType){if(n=this.ensureNotKey(n),!n)return[];let o=[];if(s==="RECURSIVE"){let l=a=>{r(a)===e&&(o.push(a),i)||!a.left&&!a.right||(r===this._defaultOneParamCallback?(this._compare(a.key,e)==="gt"&&a.left&&l(a.left),this._compare(a.key,e)==="lt"&&a.right&&l(a.right)):(a.left&&l(a.left),a.right&&l(a.right)))};l(n)}else{let l=new C([n]);for(;l.size>0;){let a=l.shift();if(a){if(r(a)===e&&(o.push(a),i))return o;r===this._defaultOneParamCallback?(this._compare(a.key,e)==="gt"&&a.left&&l.push(a.left),this._compare(a.key,e)==="lt"&&a.right&&l.push(a.right)):(a.left&&l.push(a.left),a.right&&l.push(a.right))}}}return o}lesserOrGreaterTraverse(e=this._defaultOneParamCallback,r="lt",i=this.root,n=this.options.iterationType){i=this.ensureNotKey(i);let s=[];if(!i||!this.root)return s;let o=i.key;if(n==="RECURSIVE"){let l=a=>{this._compare(a.key,o)===r&&s.push(e(a)),!(!a.left&&!a.right)&&(a.left&&this._compare(a.left.key,o)===r&&l(a.left),a.right&&this._compare(a.right.key,o)===r&&l(a.right))};return l(this.root),s}else{let l=new C([this.root]);for(;l.size>0;){let a=l.shift();a&&(this._compare(a.key,o)===r&&s.push(e(a)),a.left&&this._compare(a.left.key,o)===r&&l.push(a.left),a.right&&this._compare(a.right.key,o)===r&&l.push(a.right))}return s}}perfectlyBalance(e=this.options.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 l=s+Math.floor((o-s)/2),a=r[l];this.add(a.key,a.value),n(s,l-1),n(l+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,l]=s;if(o<=l){let a=o+Math.floor((l-o)/2),d=r[a];debugger;this.add(d.key,d.value),n.push([a+1,l]),n.push([o,a-1])}}}return!0}}isAVLBalanced(e=this.options.iterationType){var i,n;if(!this.root)return!0;let r=!0;if(e==="RECURSIVE"){let s=o=>{if(!o)return 0;let l=s(o.left),a=s(o.right);return Math.abs(l-a)>1&&(r=!1),Math.max(l,a)+1};s(this.root)}else{let s=[],o=this.root,l,a=new Map;for(;s.length>0||o;)if(o)s.push(o),o=o.left;else if(o=s[s.length-1],!o.right||l===o.right){if(o=s.pop(),o){let d=o.left&&(i=a.get(o.left))!=null?i:-1,p=o.right&&(n=a.get(o.right))!=null?n:-1;if(Math.abs(d-p)>1)return!1;a.set(o,1+Math.max(d,p)),l=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.options.comparator(e,r);return i>0?"gt":i<0?"lt":"eq"}};var De=class{constructor({frequency:t=0,max:e}){u(this,"_freq");u(this,"_max");u(this,"_freqMap");u(this,"_msb");u(this,"_negativeCount");this._freq=t,this._max=e,this._freqMap={0:0},this._msb=Ve(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 j=class{constructor(t,e,r,i){u(this,"start",0);u(this,"end",0);u(this,"value",null);u(this,"sum",0);u(this,"left",null);u(this,"right",null);this.start=t,this.end=e,this.sum=r,this.value=i||null}},Fe=class{constructor(t,e,r){u(this,"_values",[]);u(this,"_start",0);u(this,"_end");u(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=null,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 j(t,e,0);if(t===e)return new j(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 j(t,e,i.sum+n.sum);return s.left=i,s.right=n,s}updateNode(t,e,r){let i=this.root||null;if(!i)return;let n=(s,o,l,a)=>{if(s.start===s.end&&s.start===o){s.sum=l,a!==void 0&&(s.value=a);return}let d=s.start+Math.floor((s.end-s.start)/2);o<=d?s.left&&n(s.left,o,l,a):s.right&&n(s.right,o,l,a),s.left&&s.right&&(s.sum=s.left.sum+s.right.sum)};n(i,t,e,r)}querySumByRange(t,e){let r=this.root||null;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 l=n.start+Math.floor((n.end-n.start)/2);if(o<=l)return n.left?i(n.left,s,o):NaN;if(s>l)return n.right?i(n.right,s,o):NaN;{let a=0,d=0;return n.left&&(a=i(n.left,s,l)),n.right&&(d=i(n.right,l+1,o)),a+d}};return i(r,t,e)}};var q=class extends R{constructor(e,r){super(e,r);u(this,"height");this.height=0}},te=class h extends P{constructor(e){super(e);u(this,"options");e?this.options=k({iterationType:"ITERATIVE",comparator:(r,i)=>r-i},e):this.options={iterationType:"ITERATIVE",comparator:(r,i)=>r-i}}createNode(e,r){return new q(e,r)}createTree(e){return new h(k(k({},this.options),e))}add(e,r){if(e===null)return;let i=super.add(e,r);return i&&this._balancePath(i),i}delete(e,r=this._defaultOneParamCallback){e instanceof q&&(r=n=>n);let i=super.delete(e,r);for(let{needBalanced:n}of i)n&&this._balancePath(n);return i}_swap(e,r){if(e=this.ensureNotKey(e),r=this.ensureNotKey(r),e&&r){let{key:i,value:n,height:s}=r,o=this.createNode(i,n);return o&&(o.height=s,r.key=e.key,r.value=e.value,r.height=e.height,e.key=o.key,e.value=o.value,e.height=o.height),r}}_balanceFactor(e){return e.right?e.left?e.right.height-e.left.height:+e.height:-e.height}_updateHeight(e){if(!e.left&&!e.right)e.height=0;else if(e.left)e.right?e.height=1+Math.max(e.right.height,e.left.height):e.height=1+e.left.height;else{let r=e.right?e.right.height:0;e.height=1+r}}_balancePath(e){let r=this.getPathToRoot(e,!1);for(let i=0;i<r.length;i++){let n=r[i];switch(this._updateHeight(n),this._balanceFactor(n)){case-2:n&&n.left&&(this._balanceFactor(n.left)<=0?this._balanceLL(n):this._balanceLR(n));break;case 2:n&&n.right&&(this._balanceFactor(n.right)>=0?this._balanceRR(n):this._balanceRL(n))}}}_balanceLL(e){let r=e.parent,i=e.left;e.parent=i,i&&i.right&&(i.right.parent=e),i&&(i.parent=r),e===this.root?i&&this._setRoot(i):(r==null?void 0:r.left)===e?r.left=i:r&&(r.right=i),i&&(e.left=i.right,i.right=e),this._updateHeight(e),i&&this._updateHeight(i)}_balanceLR(e){let r=e.parent,i=e.left,n;i&&(n=i.right),e&&(e.parent=n),i&&(i.parent=n),n&&(n.left&&(n.left.parent=i),n.right&&(n.right.parent=e),n.parent=r),e===this.root?n&&this._setRoot(n):r&&(r.left===e?r.left=n:r.right=n),n&&(e.left=n.right,i&&(i.right=n.left),n.left=i,n.right=e),this._updateHeight(e),i&&this._updateHeight(i),n&&this._updateHeight(n)}_balanceRR(e){let r=e.parent,i=e.right;e.parent=i,i&&(i.left&&(i.left.parent=e),i.parent=r),e===this.root?i&&this._setRoot(i):r&&(r.left===e?r.left=i:r.right=i),i&&(e.right=i.left,i.left=e),this._updateHeight(e),i&&this._updateHeight(i)}_balanceRL(e){let r=e.parent,i=e.right,n;i&&(n=i.left),e.parent=n,i&&(i.parent=n),n&&(n.left&&(n.left.parent=e),n.right&&(n.right.parent=i),n.parent=r),e===this.root?n&&this._setRoot(n):r&&(r.left===e?r.left=n:r.right=n),n&&(e.right=n.left),i&&n&&(i.left=n.right),n&&(n.left=e),n&&(n.right=i),this._updateHeight(e),i&&this._updateHeight(i),n&&this._updateHeight(n)}};var G=class extends R{constructor(e,r,i=0){super(e,r);u(this,"color");this.color=i}},He=class h extends P{constructor(e){super(e);u(this,"Sentinel",new G(NaN));u(this,"options");u(this,"_root");u(this,"_size",0);e?this.options=k({iterationType:"ITERATIVE",comparator:(r,i)=>r-i},e):this.options={iterationType:"ITERATIVE",comparator:(r,i)=>r-i},this._root=this.Sentinel}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(k(k({},this.options),e))}add(e,r){let i;if(this.isNodeKey(e))i=this.createNode(e,r,1);else if(e instanceof G)i=e;else return void 0;i.left=this.Sentinel,i.right=this.Sentinel;let n,s=this.root;for(;s!==this.Sentinel;)if(n=s,s)if(i.key<s.key)s=s.left;else if(i.key>s.key)s=s==null?void 0:s.right;else return;if(i.parent=n,n===void 0?this._setRoot(i):i.key<n.key?n.left=i:n.right=i,i.parent===void 0){i.color=0,this._size++;return}if(i.parent.parent===void 0){this._size++;return}this._fixInsert(i),this._size++}delete(e,r=this._defaultOneParamCallback){let i=[];return e===null||(s=>{let o=this.Sentinel,l,a;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}a=o;let d=a.color;o.left===this.Sentinel?(l=o.right,this._rbTransplant(o,o.right)):o.right===this.Sentinel?(l=o.left,this._rbTransplant(o,o.left)):(a=this.getLeftMost(o.right),d=a.color,l=a.right,a.parent===o?l.parent=a:(this._rbTransplant(a,a.right),a.right=o.right,a.right.parent=a),this._rbTransplant(o,a),a.left=o.left,a.left.parent=a,a.color=o.color),d===0&&this._fixDelete(l),this._size--})(this.root),i}isRealNode(e){return e!==this.Sentinel&&e!==void 0}getNode(e,r=this._defaultOneParamCallback,i=this.root,n=this.options.iterationType){var s;return e instanceof O&&(r=o=>o),i=this.ensureNotKey(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}};var W=class extends q{constructor(e,r,i=1){super(e,r);u(this,"count");this.count=i}},Pe=class h extends te{constructor(e={iterationType:"ITERATIVE"}){super(e);u(this,"options");u(this,"_count",0);e?this.options=k({iterationType:"ITERATIVE",comparator:(r,i)=>r-i},e):this.options={iterationType:"ITERATIVE",comparator:(r,i)=>r-i}}get count(){return this._count}createNode(e,r,i){return new W(e,r,i)}createTree(e){return new h(k(k({},this.options),e))}add(e,r,i=1){if(e===null)return;let n,s;if(e instanceof W?s=this.createNode(e.key,e.value,e.count):e===void 0?s=void 0:s=this.createNode(e,r,i),!this.root)this._setRoot(s),this._size=this.size+1,s&&(this._count+=s.count),n=this.root;else{let o=this.root,l=!0;for(;l;)o?s&&(this._compare(o.key,s.key)==="eq"?(o.value=s.value,o.count+=s.count,this._count+=s.count,l=!1,n=o):this._compare(o.key,s.key)==="gt"?o.left===void 0?(o.left=s,this._size=this.size+1,this._count+=s.count,l=!1,n=o.left):o.left&&(o=o.left):this._compare(o.key,s.key)==="lt"&&(o.right===void 0?(o.right=s,this._size=this.size+1,this._count+=s.count,l=!1,n=o.right):o.right&&(o=o.right))):l=!1}return n&&this._balancePath(n),n}addMany(e,r){let i=[];for(let n=0;n<e.length;n++){let s=e[n];if(s instanceof W){i.push(this.add(s.key,s.value,s.count));continue}if(s===void 0){i.push(this.add(NaN,void 0,0));continue}i.push(this.add(s,r==null?void 0:r[n],1))}return i}perfectlyBalance(e=this.options.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 l=s+Math.floor((o-s)/2),a=r[l];this.add(a.key,a.value,a.count),n(s,l-1),n(l+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,l]=s;if(o<=l){let a=o+Math.floor((l-o)/2),d=r[a];this.add(d.key,d.value,d.count),n.push([a+1,l]),n.push([o,a-1])}}}return!0}}delete(e,r=this._defaultOneParamCallback,i=!1){var d;let n=[];if(!this.root)return n;let s=(d=this.getNode(e,r))!=null?d:void 0;if(!s)return n;let o=s!=null&&s.parent?s.parent:void 0,l,a=s;if(s.count>1&&!i)s.count--,this._count--;else{if(s.left){let p=s.left?this.getRightMost(s.left):void 0;if(p){let T=p.parent;a=this._swap(s,p),T&&(T.right===p?T.right=p.left:T.left=p.left,l=T)}}else if(!o)s.right!==void 0&&this._setRoot(s.right);else{let{familyPosition:p}=s;p==="LEFT"||p==="ROOT_LEFT"?o.left=s.right:(p==="RIGHT"||p==="ROOT_RIGHT")&&(o.right=s.right),l=o}this._size=this.size-1,a&&(this._count-=a.count)}return n.push({deleted:a,needBalanced:l}),l&&this._balancePath(l),n}clear(){super.clear(),this._count=0}_addTo(e,r){if(r=this.ensureNotKey(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}_swap(e,r){if(e=this.ensureNotKey(e),r=this.ensureNotKey(r),e&&r){let{key:i,value:n,count:s,height:o}=r,l=this.createNode(i,n,s);return l&&(l.height=o,r.key=e.key,r.value=e.value,r.count=e.count,r.height=e.height,e.key=l.key,e.value=l.value,e.count=l.count,e.height=l.height),r}}};var qe=class h{constructor(t,e,r){u(this,"key");u(this,"value");u(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 Ue=class{constructor(t){u(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 Q=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 je=class h{constructor(t){u(this,"_matrix");typeof t=="undefined"?this._matrix=h.identity:t instanceof Q?(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 Q(this._matrix[0][0],this._matrix[1][0])}};var pe=class h{constructor(t,e){u(this,"direction");u(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}}){u(this,"onMove");u(this,"_matrix");u(this,"_cur");u(this,"_character");u(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 re=class{constructor(t){u(this,"key");u(this,"children");u(this,"isEnd");this.key=t,this.isEnd=!1,this.children=new Map}},We=class{constructor(t,e=!0){u(this,"_caseSensitive");u(this,"_root");if(this._root=new re(""),this._caseSensitive=e,t)for(let r of t)this.add(r)}get caseSensitive(){return this._caseSensitive}get root(){return this._root}add(t){t=this._caseProcess(t);let e=this.root;for(let r of t){let i=e.children.get(r);i||(i=new re(r),e.children.set(r,i)),e=i}return e.isEnd=!0,!0}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}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(l,a){for(let d of l.children.keys()){let p=l.children.get(d);p!==void 0&&s(p,a.concat(d))}if(l.isEnd){if(n>e-1)return;i.push(a),n++}}let o=this.root;if(t)for(let l of t){let a=o.children.get(l);a&&(o=a)}return(r||o!==this.root)&&s(o,t),i}_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 l=t.key,a=isNaN(l)?"S":l.toString(),d=a.length;return o(a,d,this._displayAux(t.left,e),this._displayAux(t.right,e))}else{let l=t===void 0?"U":"N",a=l.length;return o(l,a,[[""],1,0,0],[[""],1,0,0])}function o(l,a,d,p){let[g,b,_,V]=d,[N,f,c,T]=p,m=" ".repeat(Math.max(0,V+1))+"_".repeat(Math.max(0,b-V-1))+l+"_".repeat(Math.max(0,T))+" ".repeat(Math.max(0,f-T)),y=(_>0?" ".repeat(V)+"/"+" ".repeat(b-V-1):" ".repeat(b))+" ".repeat(a)+(c>0?" ".repeat(T)+"\\"+" ".repeat(f-T-1):" ".repeat(f)),E=[m,y];for(let x=0;x<Math.max(_,c);x++){let v=x<_?g[x]:" ".repeat(b),ne=x<c?N[x]:" ".repeat(f);E.push(v+" ".repeat(a)+ne)}return[E,b+a+f,Math.max(_,c)+2,b+Math.floor(a/2)]}}_swap(t,e){if(t=this.ensureNotKey(t),e=this.ensureNotKey(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}}_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 R=class extends O{constructor(e,r){super(e,r);u(this,"parent");u(this,"_left");u(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 te{constructor(e){super(e);u(this,"options");u(this,"_root");e?this.options=k({iterationType:"ITERATIVE",comparator:(r,i)=>r-i},e):this.options={iterationType:"ITERATIVE",comparator:(r,i)=>r-i},this._root=void 0}get root(){return this._root}createNode(e,r){return new R(e,r)}createTree(e){return new h(k(k({},this.options),e))}add(e,r){if(e===null)return;let i,n;if(e instanceof R?n=e:this.isNodeKey(e)?n=this.createNode(e,r):n=void 0,this.root===void 0)this._setRoot(n),this._size=this.size+1,i=this.root;else{let s=this.root,o=!0;for(;o;)s!==void 0&&n!==void 0?this._compare(s.key,n.key)==="eq"?(n&&(s.value=n.value),o=!1,i=s):this._compare(s.key,n.key)==="gt"?s.left===void 0?(n&&(n.parent=s),s.left=n,this._size=this.size+1,o=!1,i=s.left):s.left&&(s=s.left):this._compare(s.key,n.key)==="lt"&&(s.right===void 0?(n&&(n.parent=s),s.right=n,this._size=this.size+1,o=!1,i=s.right):s.right&&(s=s.right)):o=!1}return i}addMany(e,r,i=!0,n=this.options.iterationType){function s(N){return N.indexOf(void 0)===-1}if(!i||!s(e))return super.addMany(e,r).map(N=>N!=null?N:void 0);let o=[],l=e.map((N,f)=>[N,r==null?void 0:r[f]]),a=[];function d(N){for(let[f]of N)if(f instanceof R)return!0;return!1}let p=N=>{for(let[f]of N)if(this.isNodeKey(f))return!0;return!1},g=[],b=[];if(d(l))a=l.sort((N,f)=>N[0].key-f[0].key);else if(p(l))a=l.sort((N,f)=>N[0]-f[0]);else throw new Error("Invalid input keysOrNodes");g=a.map(([N])=>N),b=a.map(([,N])=>N);let _=(N,f)=>{if(N.length===0)return;let c=Math.floor((N.length-1)/2),T=this.add(N[c],f==null?void 0:f[c]);o.push(T),_(N.slice(0,c),f==null?void 0:f.slice(0,c)),_(N.slice(c+1),f==null?void 0:f.slice(c+1))},V=()=>{let f=[[0,a.length-1]];for(;f.length>0;){let c=f.pop();if(c){let[T,m]=c;if(T<=m){let y=T+Math.floor((m-T)/2),E=this.add(g[y],b==null?void 0:b[y]);o.push(E),f.push([y+1,m]),f.push([T,y-1])}}}};return n==="RECURSIVE"?_(g,b):V(),o}lastKey(e=this.root,r=this.options.iterationType){var i,n,s,o,l,a;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:(a=(l=this.getRightMost(e,r))==null?void 0:l.key)!=null?a: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 K([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)}}}}ensureNotKey(e,r="ITERATIVE"){return this.isNodeKey(e)?this.getNodeByKey(e,r):e}getNodes(e,r=this._defaultOneParamCallback,i=!1,n=this.root,s=this.options.iterationType){if(n=this.ensureNotKey(n),!n)return[];let o=[];if(s==="RECURSIVE"){let l=a=>{r(a)===e&&(o.push(a),i)||!a.left&&!a.right||(r===this._defaultOneParamCallback?(this._compare(a.key,e)==="gt"&&a.left&&l(a.left),this._compare(a.key,e)==="lt"&&a.right&&l(a.right)):(a.left&&l(a.left),a.right&&l(a.right)))};l(n)}else{let l=new K([n]);for(;l.size>0;){let a=l.shift();if(a){if(r(a)===e&&(o.push(a),i))return o;r===this._defaultOneParamCallback?(this._compare(a.key,e)==="gt"&&a.left&&l.push(a.left),this._compare(a.key,e)==="lt"&&a.right&&l.push(a.right)):(a.left&&l.push(a.left),a.right&&l.push(a.right))}}}return o}lesserOrGreaterTraverse(e=this._defaultOneParamCallback,r="lt",i=this.root,n=this.options.iterationType){i=this.ensureNotKey(i);let s=[];if(!i||!this.root)return s;let o=i.key;if(n==="RECURSIVE"){let l=a=>{this._compare(a.key,o)===r&&s.push(e(a)),!(!a.left&&!a.right)&&(a.left&&this._compare(a.left.key,o)===r&&l(a.left),a.right&&this._compare(a.right.key,o)===r&&l(a.right))};return l(this.root),s}else{let l=new K([this.root]);for(;l.size>0;){let a=l.shift();a&&(this._compare(a.key,o)===r&&s.push(e(a)),a.left&&this._compare(a.left.key,o)===r&&l.push(a.left),a.right&&this._compare(a.right.key,o)===r&&l.push(a.right))}return s}}perfectlyBalance(e=this.options.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 l=s+Math.floor((o-s)/2),a=r[l];this.add(a.key,a.value),n(s,l-1),n(l+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,l]=s;if(o<=l){let a=o+Math.floor((l-o)/2),d=r[a];debugger;this.add(d.key,d.value),n.push([a+1,l]),n.push([o,a-1])}}}return!0}}isAVLBalanced(e=this.options.iterationType){var i,n;if(!this.root)return!0;let r=!0;if(e==="RECURSIVE"){let s=o=>{if(!o)return 0;let l=s(o.left),a=s(o.right);return Math.abs(l-a)>1&&(r=!1),Math.max(l,a)+1};s(this.root)}else{let s=[],o=this.root,l,a=new Map;for(;s.length>0||o;)if(o)s.push(o),o=o.left;else if(o=s[s.length-1],!o.right||l===o.right){if(o=s.pop(),o){let d=o.left&&(i=a.get(o.left))!=null?i:-1,p=o.right&&(n=a.get(o.right))!=null?n:-1;if(Math.abs(d-p)>1)return!1;a.set(o,1+Math.max(d,p)),l=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.options.comparator(e,r);return i>0?"gt":i<0?"lt":"eq"}};var Ae=class{constructor({frequency:t=0,max:e}){u(this,"_freq");u(this,"_max");u(this,"_freqMap");u(this,"_msb");u(this,"_negativeCount");this._freq=t,this._max=e,this._freqMap={0:0},this._msb=xe(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 G=class{constructor(t,e,r,i){u(this,"start",0);u(this,"end",0);u(this,"value",null);u(this,"sum",0);u(this,"left",null);u(this,"right",null);this.start=t,this.end=e,this.sum=r,this.value=i||null}},Fe=class{constructor(t,e,r){u(this,"_values",[]);u(this,"_start",0);u(this,"_end");u(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=null,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 G(t,e,0);if(t===e)return new G(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 G(t,e,i.sum+n.sum);return s.left=i,s.right=n,s}updateNode(t,e,r){let i=this.root||null;if(!i)return;let n=(s,o,l,a)=>{if(s.start===s.end&&s.start===o){s.sum=l,a!==void 0&&(s.value=a);return}let d=s.start+Math.floor((s.end-s.start)/2);o<=d?s.left&&n(s.left,o,l,a):s.right&&n(s.right,o,l,a),s.left&&s.right&&(s.sum=s.left.sum+s.right.sum)};n(i,t,e,r)}querySumByRange(t,e){let r=this.root||null;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 l=n.start+Math.floor((n.end-n.start)/2);if(o<=l)return n.left?i(n.left,s,o):NaN;if(s>l)return n.right?i(n.right,s,o):NaN;{let a=0,d=0;return n.left&&(a=i(n.left,s,l)),n.right&&(d=i(n.right,l+1,o)),a+d}};return i(r,t,e)}};var q=class extends R{constructor(e,r){super(e,r);u(this,"height");this.height=0}},re=class h extends P{constructor(e){super(e);u(this,"options");e?this.options=k({iterationType:"ITERATIVE",comparator:(r,i)=>r-i},e):this.options={iterationType:"ITERATIVE",comparator:(r,i)=>r-i}}createNode(e,r){return new q(e,r)}createTree(e){return new h(k(k({},this.options),e))}add(e,r){if(e===null)return;let i=super.add(e,r);return i&&this._balancePath(i),i}delete(e,r=this._defaultOneParamCallback){e instanceof q&&(r=n=>n);let i=super.delete(e,r);for(let{needBalanced:n}of i)n&&this._balancePath(n);return i}_swap(e,r){if(e=this.ensureNotKey(e),r=this.ensureNotKey(r),e&&r){let{key:i,value:n,height:s}=r,o=this.createNode(i,n);return o&&(o.height=s,r.key=e.key,r.value=e.value,r.height=e.height,e.key=o.key,e.value=o.value,e.height=o.height),r}}_balanceFactor(e){return e.right?e.left?e.right.height-e.left.height:+e.height:-e.height}_updateHeight(e){if(!e.left&&!e.right)e.height=0;else if(e.left)e.right?e.height=1+Math.max(e.right.height,e.left.height):e.height=1+e.left.height;else{let r=e.right?e.right.height:0;e.height=1+r}}_balancePath(e){let r=this.getPathToRoot(e,!1);for(let i=0;i<r.length;i++){let n=r[i];switch(this._updateHeight(n),this._balanceFactor(n)){case-2:n&&n.left&&(this._balanceFactor(n.left)<=0?this._balanceLL(n):this._balanceLR(n));break;case 2:n&&n.right&&(this._balanceFactor(n.right)>=0?this._balanceRR(n):this._balanceRL(n))}}}_balanceLL(e){let r=e.parent,i=e.left;e.parent=i,i&&i.right&&(i.right.parent=e),i&&(i.parent=r),e===this.root?i&&this._setRoot(i):(r==null?void 0:r.left)===e?r.left=i:r&&(r.right=i),i&&(e.left=i.right,i.right=e),this._updateHeight(e),i&&this._updateHeight(i)}_balanceLR(e){let r=e.parent,i=e.left,n;i&&(n=i.right),e&&(e.parent=n),i&&(i.parent=n),n&&(n.left&&(n.left.parent=i),n.right&&(n.right.parent=e),n.parent=r),e===this.root?n&&this._setRoot(n):r&&(r.left===e?r.left=n:r.right=n),n&&(e.left=n.right,i&&(i.right=n.left),n.left=i,n.right=e),this._updateHeight(e),i&&this._updateHeight(i),n&&this._updateHeight(n)}_balanceRR(e){let r=e.parent,i=e.right;e.parent=i,i&&(i.left&&(i.left.parent=e),i.parent=r),e===this.root?i&&this._setRoot(i):r&&(r.left===e?r.left=i:r.right=i),i&&(e.right=i.left,i.left=e),this._updateHeight(e),i&&this._updateHeight(i)}_balanceRL(e){let r=e.parent,i=e.right,n;i&&(n=i.left),e.parent=n,i&&(i.parent=n),n&&(n.left&&(n.left.parent=e),n.right&&(n.right.parent=i),n.parent=r),e===this.root?n&&this._setRoot(n):r&&(r.left===e?r.left=n:r.right=n),n&&(e.right=n.left),i&&n&&(i.left=n.right),n&&(n.left=e),n&&(n.right=i),this._updateHeight(e),i&&this._updateHeight(i),n&&this._updateHeight(n)}};var W=class extends R{constructor(e,r,i=0){super(e,r);u(this,"color");this.color=i}},He=class h extends P{constructor(e){super(e);u(this,"Sentinel",new W(NaN));u(this,"options");u(this,"_root");u(this,"_size",0);e?this.options=k({iterationType:"ITERATIVE",comparator:(r,i)=>r-i},e):this.options={iterationType:"ITERATIVE",comparator:(r,i)=>r-i},this._root=this.Sentinel}get root(){return this._root}get size(){return this._size}createNode(e,r,i=0){return new W(e,r,i)}createTree(e){return new h(k(k({},this.options),e))}add(e,r){let i;if(this.isNodeKey(e))i=this.createNode(e,r,1);else if(e instanceof W)i=e;else return void 0;i.left=this.Sentinel,i.right=this.Sentinel;let n,s=this.root;for(;s!==this.Sentinel;)if(n=s,s)if(i.key<s.key)s=s.left;else if(i.key>s.key)s=s==null?void 0:s.right;else return;if(i.parent=n,n===void 0?this._setRoot(i):i.key<n.key?n.left=i:n.right=i,i.parent===void 0){i.color=0,this._size++;return}if(i.parent.parent===void 0){this._size++;return}this._fixInsert(i),this._size++}delete(e,r=this._defaultOneParamCallback){let i=[];return e===null||(s=>{let o=this.Sentinel,l,a;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}a=o;let d=a.color;o.left===this.Sentinel?(l=o.right,this._rbTransplant(o,o.right)):o.right===this.Sentinel?(l=o.left,this._rbTransplant(o,o.left)):(a=this.getLeftMost(o.right),d=a.color,l=a.right,a.parent===o?l.parent=a:(this._rbTransplant(a,a.right),a.right=o.right,a.right.parent=a),this._rbTransplant(o,a),a.left=o.left,a.left.parent=a,a.color=o.color),d===0&&this._fixDelete(l),this._size--})(this.root),i}isRealNode(e){return e!==this.Sentinel&&e!==void 0}getNode(e,r=this._defaultOneParamCallback,i=this.root,n=this.options.iterationType){var s;return e instanceof O&&(r=o=>o),i=this.ensureNotKey(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}};var Q=class extends q{constructor(e,r,i=1){super(e,r);u(this,"count");this.count=i}},Pe=class h extends re{constructor(e={iterationType:"ITERATIVE"}){super(e);u(this,"options");u(this,"_count",0);e?this.options=k({iterationType:"ITERATIVE",comparator:(r,i)=>r-i},e):this.options={iterationType:"ITERATIVE",comparator:(r,i)=>r-i}}get count(){return this._count}createNode(e,r,i){return new Q(e,r,i)}createTree(e){return new h(k(k({},this.options),e))}add(e,r,i=1){if(e===null)return;let n,s;if(e instanceof Q?s=this.createNode(e.key,e.value,e.count):e===void 0?s=void 0:s=this.createNode(e,r,i),!this.root)this._setRoot(s),this._size=this.size+1,s&&(this._count+=s.count),n=this.root;else{let o=this.root,l=!0;for(;l;)o?s&&(this._compare(o.key,s.key)==="eq"?(o.value=s.value,o.count+=s.count,this._count+=s.count,l=!1,n=o):this._compare(o.key,s.key)==="gt"?o.left===void 0?(o.left=s,this._size=this.size+1,this._count+=s.count,l=!1,n=o.left):o.left&&(o=o.left):this._compare(o.key,s.key)==="lt"&&(o.right===void 0?(o.right=s,this._size=this.size+1,this._count+=s.count,l=!1,n=o.right):o.right&&(o=o.right))):l=!1}return n&&this._balancePath(n),n}addMany(e,r){let i=[];for(let n=0;n<e.length;n++){let s=e[n];if(s instanceof Q){i.push(this.add(s.key,s.value,s.count));continue}if(s===void 0){i.push(this.add(NaN,void 0,0));continue}i.push(this.add(s,r==null?void 0:r[n],1))}return i}perfectlyBalance(e=this.options.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 l=s+Math.floor((o-s)/2),a=r[l];this.add(a.key,a.value,a.count),n(s,l-1),n(l+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,l]=s;if(o<=l){let a=o+Math.floor((l-o)/2),d=r[a];this.add(d.key,d.value,d.count),n.push([a+1,l]),n.push([o,a-1])}}}return!0}}delete(e,r=this._defaultOneParamCallback,i=!1){var d;let n=[];if(!this.root)return n;let s=(d=this.getNode(e,r))!=null?d:void 0;if(!s)return n;let o=s!=null&&s.parent?s.parent:void 0,l,a=s;if(s.count>1&&!i)s.count--,this._count--;else{if(s.left){let p=s.left?this.getRightMost(s.left):void 0;if(p){let g=p.parent;a=this._swap(s,p),g&&(g.right===p?g.right=p.left:g.left=p.left,l=g)}}else if(!o)s.right!==void 0&&this._setRoot(s.right);else{let{familyPosition:p}=s;p==="LEFT"||p==="ROOT_LEFT"?o.left=s.right:(p==="RIGHT"||p==="ROOT_RIGHT")&&(o.right=s.right),l=o}this._size=this.size-1,a&&(this._count-=a.count)}return n.push({deleted:a,needBalanced:l}),l&&this._balancePath(l),n}clear(){super.clear(),this._count=0}_addTo(e,r){if(r=this.ensureNotKey(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}_swap(e,r){if(e=this.ensureNotKey(e),r=this.ensureNotKey(r),e&&r){let{key:i,value:n,count:s,height:o}=r,l=this.createNode(i,n,s);return l&&(l.height=o,r.key=e.key,r.value=e.value,r.count=e.count,r.height=e.height,e.key=l.key,e.value=l.value,e.count=l.count,e.height=l.height),r}}};var qe=class h{constructor(t,e,r){u(this,"key");u(this,"value");u(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){u(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 X=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){u(this,"_matrix");typeof t=="undefined"?this._matrix=h.identity:t instanceof X?(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 X(this._matrix[0][0],this._matrix[1][0])}};var Te=class h{constructor(t,e){u(this,"direction");u(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}}){u(this,"onMove");u(this,"_matrix");u(this,"_cur");u(this,"_character");u(this,"_VISITED");this._matrix=t,this._cur=i,this._character=new Te(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){u(this,"key");u(this,"children");u(this,"isEnd");this.key=t,this.isEnd=!1,this.children=new Map}},We=class h{constructor(t,e=!0){u(this,"_caseSensitive");u(this,"_root");if(this._root=new ie(""),this._caseSensitive=e,t)for(let r of t)this.add(r)}get caseSensitive(){return this._caseSensitive}get root(){return this._root}add(t){t=this._caseProcess(t);let e=this.root;for(let r of t){let i=e.children.get(r);i||(i=new ie(r),e.children.set(r,i)),e=i}return e.isEnd=!0,!0}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}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(l,a){for(let d of l.children.keys()){let p=l.children.get(d);p!==void 0&&s(p,a.concat(d))}if(l.isEnd){if(n>e-1)return;i.push(a),n++}}let o=this.root;if(t)for(let l of t){let a=o.children.get(l);a&&(o=a)}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*j(t(n,r+i))}yield*j(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}_caseProcess(t){return this._caseSensitive||(t=t.toLowerCase()),t}};return rt(ot);})();
5
5
  /**
6
6
  * data-structure-typed
7
7
  *