data-structure-typed 1.49.0 → 1.49.2

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 (195) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +16 -16
  3. package/README_zh-CN.md +2 -2
  4. package/benchmark/report.html +46 -1
  5. package/benchmark/report.json +457 -22
  6. package/dist/cjs/data-structures/base/iterable-base.d.ts +11 -0
  7. package/dist/cjs/data-structures/base/iterable-base.js +21 -0
  8. package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
  9. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +10 -12
  10. package/dist/cjs/data-structures/binary-tree/avl-tree.js +3 -4
  11. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  12. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +58 -58
  13. package/dist/cjs/data-structures/binary-tree/binary-tree.js +6 -6
  14. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  15. package/dist/cjs/data-structures/binary-tree/bst.d.ts +15 -15
  16. package/dist/cjs/data-structures/binary-tree/bst.js +3 -3
  17. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  18. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +11 -11
  19. package/dist/cjs/data-structures/binary-tree/rb-tree.js +5 -6
  20. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  21. package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +14 -14
  22. package/dist/cjs/data-structures/binary-tree/tree-multimap.js +3 -3
  23. package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
  24. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +9 -3
  25. package/dist/cjs/data-structures/graph/abstract-graph.js +27 -31
  26. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  27. package/dist/cjs/data-structures/graph/directed-graph.d.ts +8 -1
  28. package/dist/cjs/data-structures/graph/directed-graph.js +1 -8
  29. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  30. package/dist/cjs/data-structures/graph/map-graph.d.ts +1 -1
  31. package/dist/cjs/data-structures/graph/undirected-graph.d.ts +8 -1
  32. package/dist/cjs/data-structures/graph/undirected-graph.js +1 -8
  33. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  34. package/dist/cjs/data-structures/hash/hash-map.d.ts +22 -10
  35. package/dist/cjs/data-structures/hash/hash-map.js +28 -16
  36. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  37. package/dist/cjs/data-structures/hash/hash-table.d.ts +2 -2
  38. package/dist/cjs/data-structures/hash/hash-table.js.map +1 -1
  39. package/dist/cjs/data-structures/heap/heap.d.ts +20 -38
  40. package/dist/cjs/data-structures/heap/heap.js +22 -42
  41. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  42. package/dist/cjs/data-structures/heap/max-heap.d.ts +11 -1
  43. package/dist/cjs/data-structures/heap/max-heap.js +10 -7
  44. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  45. package/dist/cjs/data-structures/heap/min-heap.d.ts +11 -1
  46. package/dist/cjs/data-structures/heap/min-heap.js +10 -7
  47. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  48. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +95 -95
  49. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +132 -136
  50. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  51. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +18 -23
  52. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +42 -49
  53. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  54. package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
  55. package/dist/cjs/data-structures/linked-list/skip-linked-list.js +2 -2
  56. package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
  57. package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +1 -1
  58. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +0 -7
  59. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  60. package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +1 -1
  61. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +0 -7
  62. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  63. package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +9 -1
  64. package/dist/cjs/data-structures/priority-queue/priority-queue.js +8 -7
  65. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  66. package/dist/cjs/data-structures/queue/deque.d.ts +76 -80
  67. package/dist/cjs/data-structures/queue/deque.js +106 -122
  68. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  69. package/dist/cjs/data-structures/queue/queue.d.ts +30 -16
  70. package/dist/cjs/data-structures/queue/queue.js +31 -24
  71. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  72. package/dist/cjs/data-structures/stack/stack.d.ts +17 -8
  73. package/dist/cjs/data-structures/stack/stack.js +9 -9
  74. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  75. package/dist/cjs/data-structures/trie/trie.d.ts +14 -5
  76. package/dist/cjs/data-structures/trie/trie.js +13 -13
  77. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  78. package/dist/cjs/interfaces/binary-tree.d.ts +4 -4
  79. package/dist/cjs/types/common.d.ts +32 -8
  80. package/dist/cjs/types/common.js +22 -1
  81. package/dist/cjs/types/common.js.map +1 -1
  82. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -24
  83. package/dist/cjs/types/data-structures/binary-tree/binary-tree.js +0 -22
  84. package/dist/cjs/types/data-structures/binary-tree/binary-tree.js.map +1 -1
  85. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -1
  86. package/dist/cjs/types/data-structures/binary-tree/tree-multimap.d.ts +1 -1
  87. package/dist/mjs/data-structures/base/iterable-base.d.ts +11 -0
  88. package/dist/mjs/data-structures/base/iterable-base.js +21 -0
  89. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +10 -12
  90. package/dist/mjs/data-structures/binary-tree/avl-tree.js +3 -4
  91. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +58 -58
  92. package/dist/mjs/data-structures/binary-tree/binary-tree.js +6 -6
  93. package/dist/mjs/data-structures/binary-tree/bst.d.ts +15 -15
  94. package/dist/mjs/data-structures/binary-tree/bst.js +3 -3
  95. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +11 -11
  96. package/dist/mjs/data-structures/binary-tree/rb-tree.js +5 -6
  97. package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +14 -14
  98. package/dist/mjs/data-structures/binary-tree/tree-multimap.js +3 -3
  99. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +9 -3
  100. package/dist/mjs/data-structures/graph/abstract-graph.js +27 -31
  101. package/dist/mjs/data-structures/graph/directed-graph.d.ts +8 -1
  102. package/dist/mjs/data-structures/graph/directed-graph.js +1 -8
  103. package/dist/mjs/data-structures/graph/map-graph.d.ts +1 -1
  104. package/dist/mjs/data-structures/graph/undirected-graph.d.ts +8 -1
  105. package/dist/mjs/data-structures/graph/undirected-graph.js +1 -8
  106. package/dist/mjs/data-structures/hash/hash-map.d.ts +22 -10
  107. package/dist/mjs/data-structures/hash/hash-map.js +27 -15
  108. package/dist/mjs/data-structures/hash/hash-table.d.ts +2 -2
  109. package/dist/mjs/data-structures/heap/heap.d.ts +20 -38
  110. package/dist/mjs/data-structures/heap/heap.js +23 -43
  111. package/dist/mjs/data-structures/heap/max-heap.d.ts +11 -1
  112. package/dist/mjs/data-structures/heap/max-heap.js +9 -6
  113. package/dist/mjs/data-structures/heap/min-heap.d.ts +11 -1
  114. package/dist/mjs/data-structures/heap/min-heap.js +9 -6
  115. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +95 -95
  116. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +132 -136
  117. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +18 -23
  118. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +43 -50
  119. package/dist/mjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
  120. package/dist/mjs/data-structures/linked-list/skip-linked-list.js +2 -2
  121. package/dist/mjs/data-structures/priority-queue/max-priority-queue.d.ts +1 -1
  122. package/dist/mjs/data-structures/priority-queue/max-priority-queue.js +0 -7
  123. package/dist/mjs/data-structures/priority-queue/min-priority-queue.d.ts +1 -1
  124. package/dist/mjs/data-structures/priority-queue/min-priority-queue.js +0 -7
  125. package/dist/mjs/data-structures/priority-queue/priority-queue.d.ts +9 -1
  126. package/dist/mjs/data-structures/priority-queue/priority-queue.js +7 -6
  127. package/dist/mjs/data-structures/queue/deque.d.ts +76 -80
  128. package/dist/mjs/data-structures/queue/deque.js +106 -122
  129. package/dist/mjs/data-structures/queue/queue.d.ts +30 -16
  130. package/dist/mjs/data-structures/queue/queue.js +31 -24
  131. package/dist/mjs/data-structures/stack/stack.d.ts +17 -8
  132. package/dist/mjs/data-structures/stack/stack.js +10 -10
  133. package/dist/mjs/data-structures/trie/trie.d.ts +14 -5
  134. package/dist/mjs/data-structures/trie/trie.js +14 -14
  135. package/dist/mjs/interfaces/binary-tree.d.ts +4 -4
  136. package/dist/mjs/types/common.d.ts +32 -8
  137. package/dist/mjs/types/common.js +21 -0
  138. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -24
  139. package/dist/mjs/types/data-structures/binary-tree/binary-tree.js +1 -21
  140. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -1
  141. package/dist/mjs/types/data-structures/binary-tree/tree-multimap.d.ts +1 -1
  142. package/dist/umd/data-structure-typed.js +533 -558
  143. package/dist/umd/data-structure-typed.min.js +2 -2
  144. package/dist/umd/data-structure-typed.min.js.map +1 -1
  145. package/package.json +1 -1
  146. package/src/data-structures/base/iterable-base.ts +24 -0
  147. package/src/data-structures/binary-tree/avl-tree.ts +14 -14
  148. package/src/data-structures/binary-tree/binary-tree.ts +74 -77
  149. package/src/data-structures/binary-tree/bst.ts +18 -17
  150. package/src/data-structures/binary-tree/rb-tree.ts +17 -18
  151. package/src/data-structures/binary-tree/tree-multimap.ts +22 -20
  152. package/src/data-structures/graph/abstract-graph.ts +35 -25
  153. package/src/data-structures/graph/directed-graph.ts +2 -2
  154. package/src/data-structures/graph/map-graph.ts +1 -1
  155. package/src/data-structures/graph/undirected-graph.ts +2 -2
  156. package/src/data-structures/hash/hash-map.ts +40 -24
  157. package/src/data-structures/hash/hash-table.ts +3 -3
  158. package/src/data-structures/heap/heap.ts +33 -60
  159. package/src/data-structures/heap/max-heap.ts +11 -2
  160. package/src/data-structures/heap/min-heap.ts +11 -2
  161. package/src/data-structures/linked-list/doubly-linked-list.ts +147 -145
  162. package/src/data-structures/linked-list/singly-linked-list.ts +52 -52
  163. package/src/data-structures/linked-list/skip-linked-list.ts +2 -2
  164. package/src/data-structures/priority-queue/max-priority-queue.ts +1 -1
  165. package/src/data-structures/priority-queue/min-priority-queue.ts +1 -1
  166. package/src/data-structures/priority-queue/priority-queue.ts +9 -2
  167. package/src/data-structures/queue/deque.ts +129 -144
  168. package/src/data-structures/queue/queue.ts +37 -26
  169. package/src/data-structures/stack/stack.ts +20 -14
  170. package/src/data-structures/trie/trie.ts +18 -13
  171. package/src/interfaces/binary-tree.ts +5 -5
  172. package/src/types/common.ts +37 -12
  173. package/src/types/data-structures/binary-tree/avl-tree.ts +0 -1
  174. package/src/types/data-structures/binary-tree/binary-tree.ts +1 -26
  175. package/src/types/data-structures/binary-tree/bst.ts +0 -1
  176. package/src/types/data-structures/binary-tree/rb-tree.ts +1 -1
  177. package/src/types/data-structures/binary-tree/tree-multimap.ts +1 -1
  178. package/test/performance/data-structures/comparison/comparison.test.ts +6 -6
  179. package/test/performance/data-structures/heap/heap.test.ts +2 -2
  180. package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +2 -2
  181. package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +2 -2
  182. package/test/performance/data-structures/priority-queue/priority-queue.test.ts +2 -2
  183. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +2 -2
  184. package/test/unit/data-structures/graph/directed-graph.test.ts +21 -1
  185. package/test/unit/data-structures/graph/undirected-graph.test.ts +39 -1
  186. package/test/unit/data-structures/hash/hash-map.test.ts +2 -2
  187. package/test/unit/data-structures/heap/heap.test.ts +1 -1
  188. package/test/unit/data-structures/heap/min-heap.test.ts +1 -1
  189. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +30 -30
  190. package/test/unit/data-structures/linked-list/linked-list.test.ts +1 -1
  191. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +21 -21
  192. package/test/unit/data-structures/linked-list/skip-list.test.ts +2 -2
  193. package/test/unit/data-structures/queue/deque.test.ts +5 -5
  194. package/test/unit/data-structures/queue/queue.test.ts +4 -4
  195. package/test/unit/data-structures/trie/trie.test.ts +1 -1
@@ -1,7 +1,7 @@
1
- "use strict";var dataStructureTyped=(()=>{var le=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var rt=Object.getOwnPropertyNames,Ze=Object.getOwnPropertySymbols;var $e=Object.prototype.hasOwnProperty,it=Object.prototype.propertyIsEnumerable;var me=(d,n)=>{if(n=Symbol[d])return n;throw Error("Symbol."+d+" is not defined")};var be=(d,n,e)=>n in d?le(d,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):d[n]=e,w=(d,n)=>{for(var e in n||(n={}))$e.call(n,e)&&be(d,e,n[e]);if(Ze)for(var e of Ze(n))it.call(n,e)&&be(d,e,n[e]);return d};var nt=(d,n)=>{for(var e in n)le(d,e,{get:n[e],enumerable:!0})},st=(d,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of rt(n))!$e.call(d,r)&&r!==e&&le(d,r,{get:()=>n[r],enumerable:!(t=tt(n,r))||t.enumerable});return d};var ot=d=>st(le({},"__esModule",{value:!0}),d);var h=(d,n,e)=>(be(d,typeof n!="symbol"?n+"":n,e),e);var et=(d,n,e)=>new Promise((t,r)=>{var i=l=>{try{o(e.next(l))}catch(a){r(a)}},s=l=>{try{o(e.throw(l))}catch(a){r(a)}},o=l=>l.done?t(l.value):Promise.resolve(l.value).then(i,s);o((e=e.apply(d,n)).next())}),at=function(d,n){this[0]=d,this[1]=n};var L=d=>{var n=d[me("asyncIterator")],e=!1,t,r={};return n==null?(n=d[me("iterator")](),t=i=>r[i]=s=>n[i](s)):(n=n.call(d),t=i=>r[i]=s=>{if(e){if(e=!1,i==="throw")throw s;return s}return e=!0,{done:!1,value:new at(new Promise(o=>{var l=n[i](s);if(!(l instanceof Object))throw TypeError("Object expected");o(l)}),1)}}),r[me("iterator")]=()=>r,t("next"),"throw"in n?t("throw"):r.throw=i=>{throw i},"return"in n&&t("return"),r};var ht={};nt(ht,{AVLTree:()=>se,AVLTreeNode:()=>P,AbstractEdge:()=>j,AbstractGraph:()=>U,AbstractVertex:()=>B,BST:()=>W,BSTNode:()=>S,BSTVariant:()=>He,BinaryIndexedTree:()=>je,BinaryTree:()=>ne,BinaryTreeNode:()=>O,CP:()=>Pe,Character:()=>ye,Deque:()=>Re,DirectedEdge:()=>X,DirectedGraph:()=>re,DirectedVertex:()=>G,DoublyLinkedList:()=>Oe,DoublyLinkedListNode:()=>M,FamilyPosition:()=>ge,FibonacciHeap:()=>Me,FibonacciHeapNode:()=>ue,HashMap:()=>ke,HashTable:()=>Ve,HashTableNode:()=>$,Heap:()=>A,IterableElementBase:()=>k,IterableEntryBase:()=>I,IterationType:()=>ie,LinkedHashMap:()=>Be,LinkedListQueue:()=>we,MapEdge:()=>Ne,MapGraph:()=>Fe,MapVertex:()=>pe,Matrix2D:()=>Xe,MatrixNTI2D:()=>Qe,MaxHeap:()=>Ie,MaxPriorityQueue:()=>ze,MinHeap:()=>Se,MinPriorityQueue:()=>Le,Navigator:()=>Ye,PriorityQueue:()=>H,Queue:()=>C,RBTNColor:()=>Ae,RedBlackTree:()=>Ue,RedBlackTreeNode:()=>q,SegmentTree:()=>qe,SegmentTreeNode:()=>Y,SinglyLinkedList:()=>ee,SinglyLinkedListNode:()=>R,SkipList:()=>Ce,SkipListNode:()=>te,Stack:()=>ve,THUNK_SYMBOL:()=>Te,TreeMultimap:()=>Ge,TreeMultimapNode:()=>J,TreeNode:()=>We,Trie:()=>Je,TrieNode:()=>oe,UndirectedEdge:()=>ce,UndirectedGraph:()=>De,UndirectedVertex:()=>fe,Vector2D:()=>Z,arrayRemove:()=>D,calcMinUnitsRequired:()=>he,getMSB:()=>Ke,isThunk:()=>Ee,isWeakKey:()=>Q,rangeCheck:()=>F,throwRangeError:()=>dt,toThunk:()=>xe,trampoline:()=>de,trampolineAsync:()=>lt,uuidV4:()=>_e});var $=class{constructor(n,e){h(this,"key");h(this,"value");h(this,"next");this.key=n,this.value=e,this.next=void 0}},z=class z{constructor(n=z.DEFAULT_CAPACITY,e){h(this,"_capacity");h(this,"_size");h(this,"_buckets");h(this,"_hashFn");this._hashFn=e||this._defaultHashFn,this._capacity=Math.max(n,z.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(n,e){let t=this._hash(n),r=new $(n,e);if(!this._buckets[t])this._buckets[t]=r;else{let i=this._buckets[t];for(;i;){if(i.key===n){i.value=e;return}if(!i.next)break;i=i.next}i.next=r}this._size++,this._size/this._capacity>=z.LOAD_FACTOR&&this._expand()}get(n){let e=this._hash(n),t=this._buckets[e];for(;t;){if(t.key===n)return t.value;t=t.next}}delete(n){let e=this._hash(n),t=this._buckets[e],r;for(;t;){if(t.key===n){r?r.next=t.next:this._buckets[e]=t.next,this._size--,t.next=void 0;return}r=t,t=t.next}}*[Symbol.iterator](){for(let n of this._buckets){let e=n;for(;e;)yield[e.key,e.value],e=e.next}}forEach(n){let e=0;for(let t of this)n(t,e,this),e++}filter(n){let e=new z,t=0;for(let[r,i]of this)n([r,i],t,this)&&e.set(r,i),t++;return e}map(n){let e=new z,t=0;for(let[r,i]of this)e.set(r,n([r,i],t,this)),t++;return e}reduce(n,e){let t=e,r=0;for(let i of this)t=n(t,i,r,this),r++;return t}_defaultHashFn(n){return(typeof n=="string"?this._murmurStringHashFn(n):this._objectHash(n))%this._capacity}_multiplicativeStringHashFn(n){let e=String(n),t=0;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r),s=.618033988749895,o=1<<30;t=(t*s+i)%o}return Math.abs(t)}_murmurStringHashFn(n){let e=String(n),r=0;for(let i=0;i<e.length;i++){let s=e.charCodeAt(i);r=(r^s)*1540483477,r=(r^r>>>15)*668265261,r=r^r>>>15}return Math.abs(r)}_hash(n){return this.hashFn(n)}_stringHash(n){let e=0;for(let t=0;t<n.length;t++)e=e*31+n.charCodeAt(t)&4294967295;return e}_objectHash(n){return this._stringHash(JSON.stringify(n))}_expand(){let n=this._capacity*2,e=new Array(n).fill(void 0);for(let t of this._buckets){let r=t;for(;r;){let i=this._hash(r.key),s=new $(r.key,r.value);if(!e[i])e[i]=s;else{let o=e[i];for(;o.next;)o=o.next;o.next=s}r=r.next}}this._buckets=e,this._capacity=n}};h(z,"DEFAULT_CAPACITY",16),h(z,"LOAD_FACTOR",.75);var Ve=z;var _e=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(d){let n=Math.random()*16|0;return(d=="x"?n:n&3|8).toString(16)})},D=function(d,n){let e=-1,t=d?d.length:0,r=[];for(;++e<t;){let i=d[e];n(i,e,d)&&(r.push(i),Array.prototype.splice.call(d,e--,1),t--)}return r},Te=Symbol("thunk"),Ee=d=>typeof d=="function"&&d.__THUNK__===Te,xe=d=>{let n=()=>d();return n.__THUNK__=Te,n},de=d=>Object.assign((...e)=>{let t=d(...e);for(;Ee(t)&&typeof t=="function";)t=t();return t},{cont:(...e)=>xe(()=>d(...e))}),lt=d=>Object.assign((...e)=>et(void 0,null,function*(){let t=yield d(...e);for(;Ee(t)&&typeof t=="function";)t=yield t();return t}),{cont:(...e)=>xe(()=>d(...e))}),Ke=d=>d<=0?0:1<<31-Math.clz32(d),F=(d,n,e,t="Index out of bounds.")=>{if(d<n||d>e)throw new RangeError(t)},dt=(d="The value is off-limits.")=>{throw new RangeError(d)},Q=d=>{let n=typeof d;return n==="object"&&d!==null||n==="function"},he=(d,n)=>Math.floor((d+n-1)/n);var I=class{*[Symbol.iterator](...n){yield*L(this._getIterator(...n))}*entries(){for(let n of this)yield n}*keys(){for(let n of this)yield n[0]}*values(){for(let n of this)yield n[1]}every(n,e){let t=0;for(let r of this)if(!n.call(e,r[1],r[0],t++,this))return!1;return!0}some(n,e){let t=0;for(let r of this)if(n.call(e,r[1],r[0],t++,this))return!0;return!1}forEach(n,e){let t=0;for(let r of this){let[i,s]=r;n.call(e,s,i,t++,this)}}reduce(n,e){let t=e,r=0;for(let i of this){let[s,o]=i;t=n(t,o,s,r++,this)}return t}},k=class{*[Symbol.iterator](...n){yield*L(this._getIterator(...n))}*values(){for(let n of this)yield n}every(n,e){let t=0;for(let r of this)if(!n.call(e,r,t++,this))return!1;return!0}some(n,e){let t=0;for(let r of this)if(n.call(e,r,t++,this))return!0;return!1}forEach(n,e){let t=0;for(let r of this)n.call(e,r,t++,this)}reduce(n,e){let t=e,r=0;for(let i of this)t=n(t,i,r++,this);return t}};var ke=class d extends I{constructor(e=[],t){super();h(this,"_store",{});h(this,"_objMap",new Map);h(this,"_size",0);h(this,"_hashFn",e=>String(e));if(t){let{hashFn:r}=t;r&&(this._hashFn=r)}e&&this.setMany(e)}get size(){return this._size}isEmpty(){return this.size===0}clear(){this._store={},this._objMap.clear(),this._size=0}set(e,t){if(this._isObjKey(e))this._objMap.has(e)||this._size++,this._objMap.set(e,t);else{let r=this._getNoObjKey(e);this._store[r]===void 0&&this._size++,this._store[r]={key:e,value:t}}}setMany(e){for(let[t,r]of e)this.set(t,r)}get(e){var t;if(this._isObjKey(e))return this._objMap.get(e);{let r=this._getNoObjKey(e);return(t=this._store[r])==null?void 0:t.value}}has(e){return this._isObjKey(e)?this._objMap.has(e):this._getNoObjKey(e)in this._store}delete(e){if(this._isObjKey(e))return this._objMap.has(e)&&this._size--,this._objMap.delete(e);{let t=this._getNoObjKey(e);return t in this._store?(delete this._store[t],this._size--,!0):!1}}map(e,t){let r=new d,i=0;for(let[s,o]of this)r.set(s,e.call(t,o,s,i++,this));return r}filter(e,t){let r=new d,i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&r.set(s,o);return r}print(){console.log([...this.entries()])}*_getIterator(){for(let e of Object.values(this._store))yield[e.key,e.value];for(let e of this._objMap)yield e}_isObjKey(e){let t=typeof e;return(t==="object"||t==="function")&&e!==null}_getNoObjKey(e){let t=typeof e,r;return t!=="string"&&t!=="number"&&t!=="symbol"?r=this._hashFn(e):r=e,r}},Be=class d extends I{constructor(e,t={hashFn:r=>String(r),objHashFn:r=>r}){super();h(this,"_noObjMap",{});h(this,"_objMap",new WeakMap);h(this,"_head");h(this,"_tail");h(this,"_sentinel");h(this,"_hashFn");h(this,"_objHashFn");h(this,"_size",0);this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel;let{hashFn:r,objHashFn:i}=t;if(this._hashFn=r,this._objHashFn=i,e)for(let s of e)this.set(s[0],s[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 e=this._head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}*reverseBegin(){let e=this._tail;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.prev}set(e,t){let r,i=!this.has(e);if(Q(e)){let s=this._objHashFn(e);r=this._objMap.get(s),!r&&i?(r={key:s,value:t,prev:this._tail,next:this._sentinel},this._objMap.set(s,r)):r&&(r.value=t)}else{let s=this._hashFn(e);r=this._noObjMap[s],!r&&i?this._noObjMap[s]=r={key:e,value:t,prev:this._tail,next:this._sentinel}:r&&(r.value=t)}return r&&i&&(this._size===0?(this._head=r,this._sentinel.next=r):(this._tail.next=r,r.prev=this._tail),this._tail=r,this._sentinel.prev=r,this._size++),this._size}has(e){if(Q(e)){let t=this._objHashFn(e);return this._objMap.has(t)}else return this._hashFn(e)in this._noObjMap}setMany(e){for(let t of e){let[r,i]=t;this.set(r,i)}}get(e){if(Q(e)){let t=this._objHashFn(e),r=this._objMap.get(t);return r?r.value:void 0}else{let t=this._hashFn(e),r=this._noObjMap[t];return r?r.value:void 0}}getAt(e){F(e,0,this._size-1);let t=this._head;for(;e--;)t=t.next;return[t.key,t.value]}delete(e){let t;if(Q(e)){let r=this._objHashFn(e);if(t=this._objMap.get(r),!t)return!1;this._objMap.delete(r)}else{let r=this._hashFn(e);if(t=this._noObjMap[r],!t)return!1;delete this._noObjMap[r]}return this._deleteNode(t),!0}deleteAt(e){F(e,0,this._size-1);let t=this._head;for(;e--;)t=t.next;return this._deleteNode(t),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}clone(){let e=new d([],{hashFn:this._hashFn,objHashFn:this._objHashFn});for(let t of this){let[r,i]=t;e.set(r,i)}return e}filter(e,t){let r=new d,i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&r.set(s,o),i++;return r}map(e,t){let r=new d,i=0;for(let[s,o]of this){let l=e.call(t,o,s,i,this);r.set(s,l),i++}return r}print(){console.log([...this])}*_getIterator(){let e=this._head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}_deleteNode(e){let{prev:t,next:r}=e;t.next=r,r.prev=t,e===this._head&&(this._head=r),e===this._tail&&(this._tail=t),this._size-=1}};var R=class{constructor(n){h(this,"value");h(this,"next");this.value=n,this.next=void 0}},ee=class d extends k{constructor(e){super();h(this,"_head");h(this,"_tail");h(this,"_length");if(this._head=void 0,this._tail=void 0,this._length=0,e)for(let t of e)this.push(t)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}static fromArray(e){let t=new d;for(let r of e)t.push(r);return t}push(e){let t=new R(e);this.head?(this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._length++}addLast(e){this.push(e)}pop(){if(!this.head)return;if(this.head===this.tail){let r=this.head.value;return this._head=void 0,this._tail=void 0,this._length--,r}let e=this.head;for(;e.next!==this.tail;)e=e.next;let t=this.tail.value;return e.next=void 0,this._tail=e,this._length--,t}pollLast(){return this.pop()}shift(){if(!this.head)return;let e=this.head;return this._head=this.head.next,this._length--,e.value}pollFirst(){return this.shift()}unshift(e){let t=new R(e);this.head?(t.next=this.head,this._head=t):(this._head=t,this._tail=t),this._length++}addFirst(e){this.unshift(e)}getAt(e){if(e<0||e>=this.length)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t.value}getNodeAt(e){let t=this.head;for(let r=0;r<e;r++)t=t.next;return t}deleteAt(e){if(e<0||e>=this.length)return;if(e===0)return this.shift();if(e===this.length-1)return this.pop();let t=this.getNodeAt(e-1),r=t.next;return t.next=r.next,this._length--,r.value}delete(e){if(!e)return!1;let t;e instanceof R?t=e.value:t=e;let r=this.head,i;for(;r;){if(r.value===t)return i===void 0?(this._head=r.next,r===this.tail&&(this._tail=void 0)):(i.next=r.next,r===this.tail&&(this._tail=i)),this._length--,!0;i=r,r=r.next}return!1}insertAt(e,t){if(e<0||e>this.length)return!1;if(e===0)return this.unshift(t),!0;if(e===this.length)return this.push(t),!0;let r=new R(t),i=this.getNodeAt(e-1);return r.next=i.next,i.next=r,this._length++,!0}isEmpty(){return this.length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}toArray(){let e=[],t=this.head;for(;t;)e.push(t.value),t=t.next;return e}reverse(){if(!this.head||this.head===this.tail)return;let e,t=this.head,r;for(;t;)r=t.next,t.next=e,e=t,t=r;[this._head,this._tail]=[this.tail,this.head]}find(e){let t=this.head;for(;t;){if(e(t.value))return t.value;t=t.next}}indexOf(e){let t=0,r=this.head;for(;r;){if(r.value===e)return t;t++,r=r.next}return-1}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}}insertBefore(e,t){if(!this.head)return!1;let r;if(e instanceof R?r=e.value:r=e,this.head.value===r)return this.unshift(t),!0;let i=this.head;for(;i.next;){if(i.next.value===r){let s=new R(t);return s.next=i.next,i.next=s,this._length++,!0}i=i.next}return!1}insertAfter(e,t){let r;if(e instanceof R?r=e:r=this.getNode(e),r){let i=new R(t);return i.next=r.next,r.next=i,r===this.tail&&(this._tail=i),this._length++,!0}return!1}countOccurrences(e){let t=0,r=this.head;for(;r;)r.value===e&&t++,r=r.next;return t}filter(e,t){let r=new d,i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new d,i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}print(){console.log([...this])}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}};var M=class{constructor(n){h(this,"value");h(this,"next");h(this,"prev");this.value=n,this.next=void 0,this.prev=void 0}},Oe=class d extends k{constructor(e){super();h(this,"_head");h(this,"_tail");h(this,"_length");if(this._head=void 0,this._tail=void 0,this._length=0,e)for(let t of e)this.push(t)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}get size(){return this.length}static fromArray(e){let t=new d;for(let r of e)t.push(r);return t}push(e){let t=new M(e);this.head?(t.prev=this.tail,this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._length++}addLast(e){this.push(e)}pop(){if(!this.tail)return;let e=this.tail;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._tail=e.prev,this.tail.next=void 0),this._length--,e.value}pollLast(){return this.pop()}shift(){if(!this.head)return;let e=this.head;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._head=e.next,this.head.prev=void 0),this._length--,e.value}pollFirst(){return this.shift()}unshift(e){let t=new M(e);this.head?(t.next=this.head,this.head.prev=t,this._head=t):(this._head=t,this._tail=t),this._length++}addFirst(e){this.unshift(e)}getFirst(){var e;return(e=this.head)==null?void 0:e.value}getLast(){var e;return(e=this.tail)==null?void 0:e.value}getAt(e){if(e<0||e>=this.length)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t.value}getNodeAt(e){if(e<0||e>=this.length)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}}insertAt(e,t){if(e<0||e>this.length)return!1;if(e===0)return this.unshift(t),!0;if(e===this.length)return this.push(t),!0;let r=new M(t),i=this.getNodeAt(e-1),s=i.next;return r.prev=i,r.next=s,i.next=r,s.prev=r,this._length++,!0}insertBefore(e,t){let r;if(e instanceof M?r=e:r=this.getNode(e),r){let i=new M(t);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(e,t){let r;if(e instanceof M?r=e:r=this.getNode(e),r){let i=new M(t);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(e){if(e<0||e>=this.length)return;if(e===0)return this.shift();if(e===this.length-1)return this.pop();let t=this.getNodeAt(e),r=t.prev,i=t.next;return r.next=i,i.prev=r,this._length--,t.value}delete(e){let t;if(e instanceof M?t=e:t=this.getNode(e),t){if(t===this.head)this.shift();else if(t===this.tail)this.pop();else{let r=t.prev,i=t.next;r.next=i,i.prev=r,this._length--}return!0}return!1}isEmpty(){return this.length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}find(e){let t=this.head;for(;t;){if(e(t.value))return t.value;t=t.next}}indexOf(e){let t=0,r=this.head;for(;r;){if(r.value===e)return t;t++,r=r.next}return-1}findBackward(e){let t=this.tail;for(;t;){if(e(t.value))return t.value;t=t.prev}}reverse(){let e=this.head;for([this._head,this._tail]=[this.tail,this.head];e;){let t=e.next;[e.prev,e.next]=[e.next,e.prev],e=t}}toArray(){let e=[],t=this.head;for(;t;)e.push(t.value),t=t.next;return e}toReversedArray(){let e=[],t=this.tail;for(;t;)e.push(t.value),t=t.prev;return e}filter(e,t){let r=new d,i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new d,i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}print(){console.log([...this])}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}};var te=class{constructor(n,e,t){h(this,"key");h(this,"value");h(this,"forward");this.key=n,this.value=e,this.forward=new Array(t)}},Ce=class{constructor(n=16,e=.5){h(this,"_head");h(this,"_level");h(this,"_maxLevel");h(this,"_probability");this._head=new te(void 0,void 0,n),this._level=0,this._maxLevel=n,this._probability=e}get head(){return this._head}get level(){return this._level}get maxLevel(){return this._maxLevel}get probability(){return this._probability}add(n,e){let t=new te(n,e,this._randomLevel()),r=new Array(this.maxLevel).fill(this.head),i=this.head;for(let s=this.level-1;s>=0;s--){for(;i.forward[s]&&i.forward[s].key<n;)i=i.forward[s];r[s]=i}for(let s=0;s<t.forward.length;s++)t.forward[s]=r[s].forward[s],r[s].forward[s]=t;t.forward[0]||(this._level=Math.max(this.level,t.forward.length))}get(n){let e=this.head;for(let t=this.level-1;t>=0;t--)for(;e.forward[t]&&e.forward[t].key<n;)e=e.forward[t];if(e=e.forward[0],e&&e.key===n)return e.value}has(n){return this.get(n)!==void 0}delete(n){let e=new Array(this.maxLevel).fill(this.head),t=this.head;for(let r=this.level-1;r>=0;r--){for(;t.forward[r]&&t.forward[r].key<n;)t=t.forward[r];e[r]=t}if(t=t.forward[0],t&&t.key===n){for(let r=0;r<this.level&&e[r].forward[r]===t;r++)e[r].forward[r]=t.forward[r];for(;this.level>0&&!this.head.forward[this.level-1];)this._level--;return!0}return!1}getFirst(){let n=this.head.forward[0];return n?n.value:void 0}getLast(){let n=this.head;for(let e=this.level-1;e>=0;e--)for(;n.forward[e];)n=n.forward[e];return n.value}higher(n){let e=this.head;for(let r=this.level-1;r>=0;r--)for(;e.forward[r]&&e.forward[r].key<=n;)e=e.forward[r];let t=e.forward[0];return t?t.value:void 0}lower(n){let e=this.head,t;for(let r=this.level-1;r>=0;r--){for(;e.forward[r]&&e.forward[r].key<n;)e=e.forward[r];e.key<n&&(t=e)}return t?t.value:void 0}_randomLevel(){let n=1;for(;Math.random()<this.probability&&n<this.maxLevel;)n++;return n}};var ve=class d extends k{constructor(e){super();h(this,"_elements");if(this._elements=[],e)for(let t of e)this.push(t)}get elements(){return this._elements}get size(){return this.elements.length}static fromArray(e){return new d(e)}isEmpty(){return this.elements.length===0}peek(){if(!this.isEmpty())return this.elements[this.elements.length-1]}push(e){return this.elements.push(e),this}pop(){if(!this.isEmpty())return this.elements.pop()||void 0}toArray(){return this.elements.slice()}clear(){this._elements=[]}clone(){return new d(this.elements.slice())}filter(e,t){let r=new d,i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new d,i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}print(){console.log([...this])}*_getIterator(){for(let e=0;e<this.elements.length;e++)yield this.elements[e]}};var C=class d extends k{constructor(e){super();h(this,"_nodes");h(this,"_offset");this._nodes=e||[],this._offset=0}get nodes(){return this._nodes}get offset(){return this._offset}get size(){return this.nodes.length-this.offset}static fromArray(e){return new d(e)}push(e){return this.nodes.push(e),this}shift(){if(this.size===0)return;let e=this.getFirst();return this._offset+=1,this.offset*2<this.nodes.length||(this._nodes=this.nodes.slice(this.offset),this._offset=0),e}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(e){this.push(e)}dequeue(){return this.shift()}getAt(e){return this.nodes[e]}isEmpty(){return this.size===0}toArray(){return this.nodes.slice(this.offset)}clear(){this._nodes=[],this._offset=0}clone(){return new d(this.nodes.slice(this.offset))}print(){console.log([...this])}filter(e,t){let r=new d([]),i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new d([]),i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}*_getIterator(){for(let e of this.nodes)yield e}},we=class extends ee{enqueue(n){this.push(n)}dequeue(){return this.shift()}getFirst(){var n;return(n=this.head)==null?void 0:n.value}peek(){return this.getFirst()}};var Re=class d extends k{constructor(e=[],t=4096){super();h(this,"_bucketFirst",0);h(this,"_firstInBucket",0);h(this,"_bucketLast",0);h(this,"_lastInBucket",0);h(this,"_bucketCount",0);h(this,"_bucketSize");h(this,"_buckets",[]);h(this,"_size",0);let r;"length"in e?e.length instanceof Function?r=e.length():r=e.length:e.size instanceof Function?r=e.size():r=e.size,this._bucketSize=t,this._bucketCount=he(r,this._bucketSize)||1;for(let s=0;s<this._bucketCount;++s)this._buckets.push(new Array(this._bucketSize));let i=he(r,this._bucketSize);this._bucketFirst=this._bucketLast=(this._bucketCount>>1)-(i>>1),this._firstInBucket=this._lastInBucket=this._bucketSize-r%this._bucketSize>>1;for(let s of e)this.push(s)}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(e){this.push(e)}pollLast(){return this.pop()}addFirst(e){this.unshift(e)}pollFirst(){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 e=0;for(;e<this.size;)yield this.getAt(e),e++}*reverseBegin(){let e=this.size-1;for(;e>=0;)yield this.getAt(e),e--}push(e){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]=e,this.size}pop(){if(this.size===0)return;let e=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,e}unshift(e){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]=e,this.size}shift(){if(this.size===0)return;let e=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,e}getAt(e){F(e,0,this.size-1);let{bucketIndex:t,indexInBucket:r}=this._getBucketAndPosition(e);return this._buckets[t][r]}setAt(e,t){F(e,0,this.size-1);let{bucketIndex:r,indexInBucket:i}=this._getBucketAndPosition(e);this._buckets[r][i]=t}insertAt(e,t,r=1){let i=this.size;if(F(e,0,i),e===0)for(;r--;)this.unshift(t);else if(e===this.size)for(;r--;)this.push(t);else{let s=[];for(let o=e;o<this.size;++o)s.push(this.getAt(o));this.cut(e-1);for(let o=0;o<r;++o)this.push(t);for(let o=0;o<s.length;++o)this.push(s[o])}return this.size}cut(e){if(e<0)return this.clear(),0;let{bucketIndex:t,indexInBucket:r}=this._getBucketAndPosition(e);return this._bucketLast=t,this._lastInBucket=r,this._size=e+1,this.size}deleteAt(e){if(F(e,0,this.size-1),e===0)this.shift();else if(e===this.size-1)this.pop();else{let t=this.size-1,{bucketIndex:r,indexInBucket:i}=this._getBucketAndPosition(e);for(let s=e;s<t;++s){let{bucketIndex:o,indexInBucket:l}=this._getBucketAndPosition(e+1);this._buckets[r][i]=this._buckets[o][l],r=o,i=l}this.pop()}return this.size}delete(e){let t=this.size;if(t===0)return 0;let r=0,i=0;for(;r<t;){let s=this.getAt(r);s!==e&&(this.setAt(i,s),i+=1),r+=1}return this.cut(i-1),this.size}reverse(){this._buckets.reverse().forEach(function(s){s.reverse()});let{_bucketFirst:e,_bucketLast:t,_firstInBucket:r,_lastInBucket:i}=this;return this._bucketFirst=this._bucketCount-t-1,this._bucketLast=this._bucketCount-e-1,this._firstInBucket=this._bucketSize-i-1,this._lastInBucket=this._bucketSize-r-1,this}unique(){if(this.size<=1)return this.size;let e=1,t=this.getAt(0);for(let r=1;r<this.size;++r){let i=this.getAt(r);i!==t&&(t=i,this.setAt(e++,i))}return this.cut(e-1),this.size}sort(e){let t=[];for(let r=0;r<this.size;++r)t.push(this.getAt(r));t.sort(e);for(let r=0;r<this.size;++r)this.setAt(r,t[r]);return this}shrinkToFit(){if(this.size===0)return;let e=[];if(this._bucketFirst!==this._bucketLast){if(this._bucketFirst<this._bucketLast)for(let t=this._bucketFirst;t<=this._bucketLast;++t)e.push(this._buckets[t]);else{for(let t=this._bucketFirst;t<this._bucketCount;++t)e.push(this._buckets[t]);for(let t=0;t<=this._bucketLast;++t)e.push(this._buckets[t])}this._bucketFirst=0,this._bucketLast=e.length-1,this._buckets=e}}find(e){for(let t=0;t<this.size;++t){let r=this.getAt(t);if(e(r,t,this))return r}}indexOf(e){for(let t=0;t<this.size;++t)if(this.getAt(t)===e)return t;return-1}toArray(){let e=[];for(let t=0;t<this.size;++t)e.push(this.getAt(t));return e}filter(e,t){let r=new d([],this._bucketSize),i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new d([],this._bucketSize),i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}print(){console.log([...this])}*_getIterator(){for(let e=0;e<this.size;++e)yield this.getAt(e)}_reallocate(e){let t=[],r=e||this._bucketCount>>1||1;for(let i=0;i<r;++i)t[i]=new Array(this._bucketSize);for(let i=this._bucketFirst;i<this._bucketCount;++i)t[t.length]=this._buckets[i];for(let i=0;i<this._bucketLast;++i)t[t.length]=this._buckets[i];t[t.length]=[...this._buckets[this._bucketLast]],this._bucketFirst=r,this._bucketLast=t.length-1;for(let i=0;i<r;++i)t[t.length]=new Array(this._bucketSize);this._buckets=t,this._bucketCount=t.length}_getBucketAndPosition(e){let t,r,i=this._firstInBucket+e;return t=this._bucketFirst+Math.floor(i/this._bucketSize),t>=this._bucketCount&&(t-=this._bucketCount),r=(i+1)%this._bucketSize-1,r<0&&(r=this._bucketSize-1),{bucketIndex:t,indexInBucket:r}}};var A=class d extends k{constructor(e,t){super();h(this,"options");h(this,"_elements",[]);let r=(i,s)=>{if(typeof i=="number"&&typeof s=="number")return i-s;throw new Error("The a, b params of compare function must be number")};if(t?this.options=t:this.options={comparator:r},e)for(let i of e)this.push(i)}get elements(){return this._elements}get size(){return this.elements.length}get leaf(){var e;return(e=this.elements[this.size-1])!=null?e:void 0}static heapify(e,t){return new d(e,t)}add(e){return this.push(e)}push(e){return this._elements.push(e),this._bubbleUp(this.elements.length-1),this}poll(){if(this.elements.length===0)return;let e=this.elements[0],t=this.elements.pop();return this.elements.length&&(this.elements[0]=t,this._sinkDown(0,this.elements.length>>1)),e}pop(){return this.poll()}peek(){return this.elements[0]}isEmpty(){return this.size===0}clear(){this._elements=[]}refill(e){this._elements=e,this.fix()}has(e){return this.elements.includes(e)}delete(e){let t=this.elements.indexOf(e);return t<0?!1:(t===0?this.pop():t===this.elements.length-1?this.elements.pop():(this.elements.splice(t,1,this.elements.pop()),this._bubbleUp(t),this._sinkDown(t,this.elements.length>>1)),!0)}dfs(e="pre"){let t=[],r=i=>{let s=2*i+1,o=s+1;i<this.size&&(e==="in"?(r(s),t.push(this.elements[i]),r(o)):e==="pre"?(t.push(this.elements[i]),r(s),r(o)):e==="post"&&(r(s),r(o),t.push(this.elements[i])))};return r(0),t}toArray(){return[...this.elements]}clone(){let e=new d([],this.options);return e._elements=[...this.elements],e}sort(){let e=[],t=this.clone();for(;t.size!==0;){let r=t.poll();r&&e.push(r)}return e}fix(){for(let e=Math.floor(this.size/2);e>=0;e--)this._sinkDown(e,this.elements.length>>1)}filter(e,t){let r=new d,i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t,r){let i=new d([],{comparator:t}),s=0;for(let o of this)i.add(e.call(r,o,s,this)),s++;return i}print(){console.log([...this])}*_getIterator(){for(let e of this.elements)yield e}_bubbleUp(e){let t=this.elements[e];for(;e>0;){let r=e-1>>1,i=this.elements[r];if(this.options.comparator(i,t)<=0)break;this.elements[e]=i,e=r}this.elements[e]=t}_sinkDown(e,t){let r=this.elements[e];for(;e<t;){let i=e<<1|1,s=i+1,o=this.elements[i];if(s<this.elements.length&&this.options.comparator(o,this.elements[s])>0&&(i=s,o=this.elements[s]),this.options.comparator(o,r)>=0)break;this.elements[e]=o,e=i}this.elements[e]=r}},ue=class{constructor(n,e=0){h(this,"element");h(this,"degree");h(this,"left");h(this,"right");h(this,"child");h(this,"parent");h(this,"marked");this.element=n,this.degree=e,this.marked=!1}},Me=class{constructor(n){h(this,"_root");h(this,"_size",0);h(this,"_min");h(this,"_comparator");if(this.clear(),this._comparator=n||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(n){return this.push(n)}push(n){let e=this.createNode(n);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(n){let e=[];if(!n)return e;let t=n,r=!1;for(;!(t===n&&r);)t===n&&(r=!0),t&&(e.push(t),t=t.right);return e}mergeWithChild(n,e){n.child?(e.right=n.child.right,e.left=n.child,n.child.right.left=e,n.child.right=e):n.child=e}poll(){return this.pop()}pop(){if(this.size===0)return;let n=this.min;if(n.child){let e=this.consumeLinkedList(n.child);for(let t of e)this.mergeWithRoot(t),t.parent=void 0}return this.removeFromRoot(n),n===n.right?(this._min=void 0,this._root=void 0):(this._min=n.right,this._consolidate()),this._size--,n.element}merge(n){if(n.size!==0){if(this.root&&n.root){let e=this.root,t=n.root,r=e.right,i=t.left;e.right=t,t.left=e,r.left=i,i.right=r}(!this.min||n.min&&this.comparator(n.min.element,this.min.element)<0)&&(this._min=n.min),this._size+=n.size,n.clear()}}createNode(n){return new ue(n)}_defaultComparator(n,e){return n<e?-1:n>e?1:0}mergeWithRoot(n){this.root?(n.right=this.root.right,n.left=this.root,this.root.right.left=n,this.root.right=n):this._root=n}removeFromRoot(n){this.root===n&&(this._root=n.right),n.left&&(n.left.right=n.right),n.right&&(n.right.left=n.left)}_link(n,e){this.removeFromRoot(n),n.left=n,n.right=n,this.mergeWithChild(e,n),e.degree++,n.parent=e}_consolidate(){let n=new Array(this.size),e=this.consumeLinkedList(this.root),t,r,i,s;for(let o of e){for(t=o,i=t.degree;n[i];)r=n[i],this.comparator(t.element,r.element)>0&&(s=t,t=r,r=s),this._link(r,t),n[i]=void 0,i++;n[i]=t}for(let o=0;o<this.size;o++)n[o]&&this.comparator(n[o].element,this.min.element)<=0&&(this._min=n[o])}};var Ie=class extends A{constructor(n,e={comparator:(t,r)=>{if(typeof t=="number"&&typeof r=="number")return r-t;throw new Error("The a, b params of compare function must be number")}}){super(n,e)}};var Se=class extends A{constructor(n,e={comparator:(t,r)=>{if(typeof t=="number"&&typeof r=="number")return t-r;throw new Error("The a, b params of compare function must be number")}}){super(n,e)}};var H=class extends A{constructor(n,e){super(n,e)}};var Le=class extends H{constructor(n,e={comparator:(t,r)=>{if(typeof t=="number"&&typeof r=="number")return t-r;throw new Error("The a, b params of compare function must be number")}}){super(n,e)}};var ze=class extends H{constructor(n,e={comparator:(t,r)=>{if(typeof t=="number"&&typeof r=="number")return r-t;throw new Error("The a, b params of compare function must be number")}}){super(n,e)}};var B=class{constructor(n,e){h(this,"key");h(this,"value");this.key=n,this.value=e}},j=class{constructor(n,e){h(this,"value");h(this,"weight");h(this,"_hashCode");this.weight=n!==void 0?n:1,this.value=e,this._hashCode=_e()}get hashCode(){return this._hashCode}},U=class extends I{constructor(){super();h(this,"_vertexMap",new Map)}get vertexMap(){return this._vertexMap}getVertex(e){return this._vertexMap.get(e)||void 0}hasVertex(e){return this._vertexMap.has(this._getVertexKey(e))}addVertex(e,t){if(e instanceof B)return this._addVertexOnly(e);{let r=this.createVertex(e,t);return this._addVertexOnly(r)}}isVertexKey(e){let t=typeof e;return t==="string"||t==="number"}deleteVertex(e){let t=this._getVertexKey(e);return this._vertexMap.delete(t)}removeManyVertices(e){let t=[];for(let r of e)t.push(this.deleteVertex(r));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,r,i){if(e instanceof j)return this._addEdgeOnly(e);if(t instanceof B||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof B&&(e=e.key),t instanceof B&&(t=t.key);let s=this.createEdge(e,t,r,i);return this._addEdgeOnly(s)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(e,t,r){let i=this.getEdge(e,t);return i?(i.weight=r,!0):!1}getAllPathsBetween(e,t,r=1e3){let i=[],s=this._getVertex(e),o=this._getVertex(t);if(!(s&&o))return[];let l=[];for(l.push({vertex:s,path:[s]});l.length>0;){let{vertex:a,path:u}=l.pop();if(a===o&&(i.push(u),i.length>=r))return i;let f=this.getNeighbors(a);for(let g of f)if(!u.includes(g)){let N=[...u,g];l.push({vertex:g,path:N})}}return i}getPathSumWeight(e){var r;let t=0;for(let i=0;i<e.length;i++)t+=((r=this.getEdge(e[i],e[i+1]))==null?void 0:r.weight)||0;return t}getMinCostBetween(e,t,r){if(r===void 0&&(r=!1),r){let i=this.getAllPathsBetween(e,t),s=1/0;for(let o of i)s=Math.min(this.getPathSumWeight(o),s);return s}else{let i=this._getVertex(t),s=this._getVertex(e);if(!(s&&i))return;let o=new Map,l=new C([s]);o.set(s,!0);let a=0;for(;l.size>0;){for(let u=0;u<l.size;u++){let f=l.shift();if(f===i)return a;if(f!==void 0){let g=this.getNeighbors(f);for(let N of g)o.has(N)||(o.set(N,!0),l.push(N))}}a++}return}}getMinPathBetween(e,t,r,i=!1){var s,o;if(r===void 0&&(r=!1),r)if(i){let l=this.getAllPathsBetween(e,t,1e4),a=1/0,u=-1,f=0;for(let g of l){let N=this.getPathSumWeight(g);N<a&&(a=N,u=f),f++}return l[u]||void 0}else return(o=(s=this.dijkstra(e,t,!0,!0))==null?void 0:s.minPath)!=null?o:[];else{let l=[],a=this._getVertex(e),u=this._getVertex(t);if(!(a&&u))return[];let f=(g,N,y,V)=>{if(y.add(g),g===N){l=[a,...V];return}let E=this.getNeighbors(g);for(let K of E)y.has(K)||(V.push(K),f(K,N,y,V),V.pop());y.delete(g)};return f(a,u,new Set,[]),l}}dijkstraWithoutHeap(e,t,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1),t===void 0&&(t=void 0);let s=1/0,o,l=[],a=[],u=this._vertexMap,f=new Map,g=new Set,N=new Map,y=this._getVertex(e),V=t?this._getVertex(t):void 0;if(!y)return;for(let p of u){let c=p[1];c instanceof B&&f.set(c,1/0)}f.set(y,0),N.set(y,void 0);let E=()=>{let p=1/0,c;for(let[m,b]of f)g.has(m)||b<p&&(p=b,c=m);return c},K=p=>{for(let c of u){let m=c[1];if(m instanceof B){let b=[m],_=N.get(m);for(;_;)b.push(_),_=N.get(_);let T=b.reverse();c[1]===p&&(l=T),a.push(T)}}};for(let p=1;p<u.size;p++){let c=E();if(c){if(g.add(c),V&&V===c)return r&&(s=f.get(V)||1/0),i&&K(V),{distMap:f,preMap:N,seen:g,paths:a,minDist:s,minPath:l};let m=this.getNeighbors(c);for(let b of m)if(!g.has(b)){let _=this.getEdge(c,b);if(_){let T=f.get(c),x=f.get(b);T!==void 0&&x!==void 0&&_.weight+T<x&&(f.set(b,_.weight+T),N.set(b,c))}}}}return r&&f.forEach((p,c)=>{c!==y&&p<s&&(s=p,i&&(o=c))}),i&&K(o),{distMap:f,preMap:N,seen:g,paths:a,minDist:s,minPath:l}}dijkstra(e,t,r,i){var p;r===void 0&&(r=!1),i===void 0&&(i=!1),t===void 0&&(t=void 0);let s=1/0,o,l=[],a=[],u=this._vertexMap,f=new Map,g=new Set,N=new Map,y=this._getVertex(e),V=t?this._getVertex(t):void 0;if(!y)return;for(let c of u){let m=c[1];m instanceof B&&f.set(m,1/0)}let E=new H([],{comparator:(c,m)=>c.key-m.key});E.add({key:0,value:y}),f.set(y,0),N.set(y,void 0);let K=c=>{for(let m of u){let b=m[1];if(b instanceof B){let _=[b],T=N.get(b);for(;T;)_.push(T),T=N.get(T);let x=_.reverse();m[1]===c&&(l=x),a.push(x)}}};for(;E.size>0;){let c=E.poll(),m=c==null?void 0:c.key,b=c==null?void 0:c.value;if(m!==void 0&&b){if(g.add(b),V&&V===b)return r&&(s=f.get(V)||1/0),i&&K(V),{distMap:f,preMap:N,seen:g,paths:a,minDist:s,minPath:l};let _=this.getNeighbors(b);for(let T of _)if(!g.has(T)){let x=(p=this.getEdge(b,T))==null?void 0:p.weight;if(typeof x=="number"){let v=f.get(T);v&&m+x<v&&(E.add({key:m+x,value:T}),N.set(T,b),f.set(T,m+x))}}}}return r&&f.forEach((c,m)=>{m!==y&&c<s&&(s=c,i&&(o=m))}),i&&K(o),{distMap:f,preMap:N,seen:g,paths:a,minDist:s,minPath:l}}bellmanFord(e,t,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1);let s=this._getVertex(e),o=[],l=new Map,a=new Map,u=1/0,f=[],g;if(t&&(g=!1),!s)return{hasNegativeCycle:g,distMap:l,preMap:a,paths:o,min:u,minPath:f};let N=this._vertexMap,y=N.size,V=this.edgeSet(),E=V.length;this._vertexMap.forEach(p=>{l.set(p,1/0)}),l.set(s,0);for(let p=1;p<y;++p)for(let c=0;c<E;++c){let m=this.getEndsOfEdge(V[c]);if(m){let[b,_]=m,T=V[c].weight,x=l.get(b),v=l.get(_);x!==void 0&&v!==void 0&&l.get(b)!==1/0&&x+T<v&&(l.set(_,x+T),i&&a.set(_,b))}}let K;if(r&&l.forEach((p,c)=>{c!==s&&p<u&&(u=p,i&&(K=c))}),i)for(let p of N){let c=p[1];if(c instanceof B){let m=[c],b=a.get(c);for(;b!==void 0;)m.push(b),b=a.get(b);let _=m.reverse();p[1]===K&&(f=_),o.push(_)}}for(let p=0;p<E;++p){let c=this.getEndsOfEdge(V[p]);if(c){let[m]=c,b=V[p].weight,_=l.get(m);_&&_!==1/0&&_+b<_&&(g=!0)}}return{hasNegativeCycle:g,distMap:l,preMap:a,paths:o,min:u,minPath:f}}floydWarshall(){var s;let e=[...this._vertexMap],t=e.length,r=[],i=[];for(let o=0;o<t;o++){r[o]=[],i[o]=[];for(let l=0;l<t;l++)i[o][l]=void 0}for(let o=0;o<t;o++)for(let l=0;l<t;l++)r[o][l]=((s=this.getEdge(e[o][1],e[l][1]))==null?void 0:s.weight)||1/0;for(let o=0;o<t;o++)for(let l=0;l<t;l++)for(let a=0;a<t;a++)r[l][a]>r[l][o]+r[o][a]&&(r[l][a]=r[l][o]+r[o][a],i[l][a]=e[o][1]);return{costs:r,predecessor:i}}tarjan(e=!1,t=!1,r=!0,i=!1){e===void 0&&(e=!1),t===void 0&&(t=!1),r===void 0&&(r=!1),i===void 0&&(i=!1);let o=new Map,l=new Map,a=this._vertexMap;a.forEach(p=>{o.set(p,-1),l.set(p,1/0)});let[u]=a.values(),f=[],g=[],N=0,y=(p,c)=>{N++,o.set(p,N),l.set(p,N);let m=this.getNeighbors(p),b=0;for(let _ of m)if(_!==c){o.get(_)===-1&&(b++,y(_,p));let T=l.get(_),x=l.get(p);x!==void 0&&T!==void 0&&l.set(p,Math.min(x,T));let v=o.get(p);if(T!==void 0&&v!==void 0&&(e&&(p===u&&b>=2||p!==u&&T>=v)&&f.push(p),t&&T>v)){let ae=this.getEdge(p,_);ae&&g.push(ae)}}};y(u,void 0);let V=new Map,E=()=>{let p=new Map;return l.forEach((c,m)=>{var b;p.has(c)?(b=p.get(c))==null||b.push(m):p.set(c,[m])}),p};r&&(V=E());let K=new Map;if(i){let p=new Map;p.size<1&&(p=E()),p.forEach((c,m)=>{c.length>1&&K.set(m,c)})}return{dfnMap:o,lowMap:l,bridges:g,cutVertexes:f,SCCs:V,cycles:K}}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}filter(e,t){let r=[],i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&r.push([s,o]),i++;return r}map(e,t){let r=[],i=0;for(let[s,o]of this)r.push(e.call(t,o,s,i,this)),i++;return r}*_getIterator(){for(let e of this._vertexMap.values())yield[e.key,e.value]}_addVertexOnly(e){return this.hasVertex(e)?!1:(this._vertexMap.set(e.key,e),!0)}_getVertex(e){let t=this._getVertexKey(e);return this._vertexMap.get(t)||void 0}_getVertexKey(e){return e instanceof B?e.key:e}};var G=class extends B{constructor(n,e){super(n,e)}},X=class extends j{constructor(e,t,r,i){super(r,i);h(this,"src");h(this,"dest");this.src=e,this.dest=t}},re=class extends U{constructor(){super();h(this,"_outEdgeMap",new Map);h(this,"_inEdgeMap",new Map)}get outEdgeMap(){return this._outEdgeMap}get inEdgeMap(){return this._inEdgeMap}createVertex(e,t){return new G(e,t)}createEdge(e,t,r,i){return new X(e,t,r!=null?r:1,i)}getEdge(e,t){let r=[];if(e!==void 0&&t!==void 0){let i=this._getVertex(e),s=this._getVertex(t);if(i&&s){let o=this._outEdgeMap.get(i);o&&(r=o.filter(l=>l.dest===s.key))}}return r[0]||void 0}deleteEdgeSrcToDest(e,t){let r=this._getVertex(e),i=this._getVertex(t),s;if(!r||!i)return;let o=this._outEdgeMap.get(r);o&&D(o,a=>a.dest===i.key);let l=this._inEdgeMap.get(i);return l&&(s=D(l,a=>a.src===r.key)[0]||void 0),s}deleteEdge(e,t){let r,i,s;if(this.isVertexKey(e))if(this.isVertexKey(t))i=this._getVertex(e),s=this._getVertex(t);else return;else i=this._getVertex(e.src),s=this._getVertex(e.dest);if(i&&s){let o=this._outEdgeMap.get(i);o&&o.length>0&&D(o,a=>a.src===i.key&&a.dest===(s==null?void 0:s.key));let l=this._inEdgeMap.get(s);l&&l.length>0&&(r=D(l,a=>a.src===i.key&&a.dest===s.key)[0])}return r}deleteVertex(e){let t,r;return this.isVertexKey(e)?(r=this.getVertex(e),t=e):(r=e,t=this._getVertexKey(e)),r&&(this._outEdgeMap.delete(r),this._inEdgeMap.delete(r)),this._vertexMap.delete(t)}deleteEdgesBetween(e,t){let r=[];if(e&&t){let i=this.deleteEdgeSrcToDest(e,t),s=this.deleteEdgeSrcToDest(t,e);i&&r.push(i),s&&r.push(s)}return r}incomingEdgesOf(e){let t=this._getVertex(e);return t?this.inEdgeMap.get(t)||[]:[]}outgoingEdgesOf(e){let t=this._getVertex(e);return t?this._outEdgeMap.get(t)||[]:[]}degreeOf(e){return this.outDegreeOf(e)+this.inDegreeOf(e)}inDegreeOf(e){return this.incomingEdgesOf(e).length}outDegreeOf(e){return this.outgoingEdgesOf(e).length}edgesOf(e){return[...this.outgoingEdgesOf(e),...this.incomingEdgesOf(e)]}getEdgeSrc(e){return this._getVertex(e.src)}getEdgeDest(e){return this._getVertex(e.dest)}getDestinations(e){if(e===void 0)return[];let t=[],r=this.outgoingEdgesOf(e);for(let i of r){let s=this.getEdgeDest(i);s&&t.push(s)}return t}topologicalSort(e){e=e!=null?e:"key";let t=new Map;for(let o of this.vertexMap)t.set(o[1],0);let r=[],i=!1,s=o=>{t.set(o,1);let l=this.getDestinations(o);for(let a of l){let u=t.get(a);u===0?s(a):u===1&&(i=!0)}t.set(o,2),r.push(o)};for(let o of this.vertexMap)t.get(o[1])===0&&s(o[1]);if(!i)return e==="key"&&(r=r.map(o=>o instanceof G?o.key:o)),r.reverse()}edgeSet(){let e=[];return this._outEdgeMap.forEach(t=>{e=[...e,...t]}),e}getNeighbors(e){let t=[],r=this._getVertex(e);if(r){let i=this.outgoingEdgesOf(r);for(let s of i){let o=this._getVertex(s.dest);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.src,e.dest))return;let t=this._getVertex(e.src),r=this._getVertex(e.dest);if(t&&r)return[t,r]}_addEdgeOnly(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let t=this._getVertex(e.src),r=this._getVertex(e.dest);if(t&&r){let i=this._outEdgeMap.get(t);i?i.push(e):this._outEdgeMap.set(t,[e]);let s=this._inEdgeMap.get(r);return s?s.push(e):this._inEdgeMap.set(r,[e]),!0}else return!1}};var fe=class extends B{constructor(n,e){super(n,e)}},ce=class extends j{constructor(e,t,r,i){super(r,i);h(this,"vertexMap");this.vertexMap=[e,t]}},De=class extends U{constructor(){super();h(this,"_edgeMap");this._edgeMap=new Map}get edgeMap(){return this._edgeMap}createVertex(e,t){return new fe(e,t!=null?t:e)}createEdge(e,t,r,i){return new ce(e,t,r!=null?r:1,i)}getEdge(e,t){var i;let r=[];if(e!==void 0&&t!==void 0){let s=this._getVertex(e),o=this._getVertex(t);s&&o&&(r=(i=this._edgeMap.get(s))==null?void 0:i.filter(l=>l.vertexMap.includes(o.key)))}return r&&r[0]||void 0}deleteEdgeBetween(e,t){let r=this._getVertex(e),i=this._getVertex(t);if(!r||!i)return;let s=this._edgeMap.get(r),o;s&&(o=D(s,a=>a.vertexMap.includes(i.key))[0]||void 0);let l=this._edgeMap.get(i);return l&&D(l,a=>a.vertexMap.includes(r.key)),o}deleteEdge(e,t){let r,i;if(this.isVertexKey(e))if(this.isVertexKey(t))r=this._getVertex(e),i=this._getVertex(t);else return;else r=this._getVertex(e.vertexMap[0]),i=this._getVertex(e.vertexMap[1]);if(r&&i)return this.deleteEdgeBetween(r,i)}deleteVertex(e){let t,r;this.isVertexKey(e)?(r=this.getVertex(e),t=e):(r=e,t=this._getVertexKey(e));let i=this.getNeighbors(e);return r&&(i.forEach(s=>{let o=this._edgeMap.get(s);if(o){let l=o.filter(a=>!a.vertexMap.includes(t));this._edgeMap.set(s,l)}}),this._edgeMap.delete(r)),this._vertexMap.delete(t)}degreeOf(e){var r;let t=this._getVertex(e);return t&&((r=this._edgeMap.get(t))==null?void 0:r.length)||0}edgesOf(e){let t=this._getVertex(e);return t?this._edgeMap.get(t)||[]:[]}edgeSet(){let e=new Set;return this._edgeMap.forEach(t=>{t.forEach(r=>{e.add(r)})}),[...e]}getNeighbors(e){let t=[],r=this._getVertex(e);if(r){let i=this.edgesOf(r);for(let s of i){let o=this._getVertex(s.vertexMap.filter(l=>l!==r.key)[0]);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.vertexMap[0],e.vertexMap[1]))return;let t=this._getVertex(e.vertexMap[0]),r=this._getVertex(e.vertexMap[1]);if(t&&r)return[t,r]}_addEdgeOnly(e){for(let t of e.vertexMap){let r=this._getVertex(t);if(r===void 0)return!1;if(r){let i=this._edgeMap.get(r);i?i.push(e):this._edgeMap.set(r,[e])}}return!0}};var pe=class extends G{constructor(e,t,r,i){super(e,t);h(this,"lat");h(this,"long");this.lat=r,this.long=i}},Ne=class extends X{constructor(n,e,t,r){super(n,e,t,r)}},Fe=class extends re{constructor(e,t){super();h(this,"_originCoord",[0,0]);h(this,"_bottomRight");this._originCoord=e,this._bottomRight=t}get originCoord(){return this._originCoord}get bottomRight(){return this._bottomRight}createVertex(e,t,r=this.originCoord[0],i=this.originCoord[1]){return new pe(e,t,r,i)}createEdge(e,t,r,i){return new Ne(e,t,r,i)}};var ie=(e=>(e.ITERATIVE="ITERATIVE",e.RECURSIVE="RECURSIVE",e))(ie||{}),ge=(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))(ge||{});var Ae=(e=>(e[e.RED=1]="RED",e[e.BLACK=0]="BLACK",e))(Ae||{});var He=(e=>(e.MIN="MIN",e.MAX="MAX",e))(He||{}),Pe=(t=>(t.lt="lt",t.eq="eq",t.gt="gt",t))(Pe||{});var O=class{constructor(n,e){h(this,"key");h(this,"value");h(this,"parent");h(this,"_left");h(this,"_right");this.key=n,this.value=e}get left(){return this._left}set left(n){n&&(n.parent=this),this._left=n}get right(){return this._right}set right(n){n&&(n.parent=this),this._right=n}get familyPosition(){let n=this;return this.parent?this.parent.left===n?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===n?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},ne=class d extends I{constructor(e,t){super();h(this,"iterationType","ITERATIVE");h(this,"_extractor",e=>Number(e));h(this,"_root");h(this,"_size");h(this,"_defaultOneParamCallback",e=>e.key);if(t){let{iterationType:r,extractor:i}=t;r&&(this.iterationType=r),i&&(this._extractor=i)}this._size=0,e&&this.addMany(e)}get extractor(){return this._extractor}get root(){return this._root}get size(){return this._size}createNode(e,t){return new O(e,t)}createTree(e){return new d([],w({iterationType:this.iterationType},e))}isNode(e){return e instanceof O}exemplarToNode(e,t){if(e===void 0)return;let r;if(e===null)r=null;else if(this.isEntry(e)){let[i,s]=e;if(i===void 0)return;i===null?r=null:r=this.createNode(i,s)}else if(this.isNode(e))r=e;else if(this.isNotNodeInstance(e))r=this.createNode(e,t);else return;return r}isEntry(e){return Array.isArray(e)&&e.length===2}add(e,t){let r=this.exemplarToNode(e,t);if(r===void 0)return;if(!this.root)return this._root=r,this._size=1,r;let i=new C([this.root]),s;for(;i.size>0;){let o=i.shift();if(o){if(r!==null&&o.key===r.key)return this._replaceNode(o,r),r;s===void 0&&(o.left===void 0||o.right===void 0)&&(s=o),o.left!==null&&o.left&&i.push(o.left),o.right!==null&&o.right&&i.push(o.right)}}if(s)return s.left===void 0?s.left=r:s.right===void 0&&(s.right=r),this._size++,r}addMany(e,t){let r=[],i;t&&(i=t[Symbol.iterator]());for(let s of e){let o;if(i){let l=i.next();l.done||(o=l.value)}r.push(this.add(s,o))}return r}refill(e,t){this.clear(),this.addMany(e,t)}delete(e,t=this._defaultOneParamCallback){let r=[];if(!this.root)return r;(!t||t===this._defaultOneParamCallback)&&e instanceof O&&(t=a=>a);let i=this.getNode(e,t);if(!i)return r;let s=i!=null&&i.parent?i.parent:null,o,l=i;if(i.left){if(i.left){let a=this.getRightMost(i.left);if(a){let u=a.parent;l=this._swapProperties(i,a),u&&(u.right===a?u.right=a.left:u.left=a.left,o=u)}}}else if(!s)this._setRoot(null);else{let{familyPosition:a}=i;a==="LEFT"||a==="ROOT_LEFT"?s.left=i.right:(a==="RIGHT"||a==="ROOT_RIGHT")&&(s.right=i.right),o=s}return this._size=this.size-1,r.push({deleted:l,needBalanced:o}),r}getDepth(e,t=this.root){e=this.ensureNode(e),t=this.ensureNode(t);let r=0;for(;e!=null&&e.parent;){if(e===t)return r;r++,e=e.parent}return r}getHeight(e=this.root,t=this.iterationType){if(e=this.ensureNode(e),!e)return-1;if(t==="RECURSIVE"){let r=i=>{if(!i)return-1;let s=r(i.left),o=r(i.right);return Math.max(s,o)+1};return r(e)}else{let r=[{node:e,depth:0}],i=0;for(;r.length>0;){let{node:s,depth:o}=r.pop();s.left&&r.push({node:s.left,depth:o+1}),s.right&&r.push({node:s.right,depth:o+1}),i=Math.max(i,o)}return i}}getMinHeight(e=this.root,t=this.iterationType){var r,i,s;if(e=this.ensureNode(e),!e)return-1;if(t==="RECURSIVE"){let o=l=>{if(!l||!l.left&&!l.right)return 0;let a=o(l.left),u=o(l.right);return Math.min(a,u)+1};return o(e)}else{let o=[],l=e,a=null,u=new Map;for(;o.length>0||l;)if(l)o.push(l),l=l.left;else if(l=o[o.length-1],!l.right||a===l.right){if(l=o.pop(),l){let f=l.left&&(r=u.get(l.left))!=null?r:-1,g=l.right&&(i=u.get(l.right))!=null?i:-1;u.set(l,1+Math.min(f,g)),a=l,l=null}}else l=l.right;return(s=u.get(e))!=null?s:-1}}isPerfectlyBalanced(e=this.root){return this.getMinHeight(e)+1>=this.getHeight(e)}getNodes(e,t=this._defaultOneParamCallback,r=!1,i=this.root,s=this.iterationType){if((!t||t===this._defaultOneParamCallback)&&e instanceof O&&(t=l=>l),i=this.ensureNode(i),!i)return[];let o=[];if(s==="RECURSIVE"){let l=a=>{t(a)===e&&(o.push(a),r)||!a.left&&!a.right||(a.left&&l(a.left),a.right&&l(a.right))};l(i)}else{let l=new C([i]);for(;l.size>0;){let a=l.shift();if(a){if(t(a)===e&&(o.push(a),r))return o;a.left&&l.push(a.left),a.right&&l.push(a.right)}}}return o}has(e,t=this._defaultOneParamCallback,r=this.root,i=this.iterationType){return(!t||t===this._defaultOneParamCallback)&&e instanceof O&&(t=s=>s),this.getNodes(e,t,!0,r,i).length>0}getNode(e,t=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var s;return(!t||t===this._defaultOneParamCallback)&&e instanceof O&&(t=o=>o),(s=this.getNodes(e,t,!0,r,i)[0])!=null?s:null}getNodeByKey(e,t="ITERATIVE"){if(this.root)if(t==="RECURSIVE"){let r=i=>{if(i.key===e)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===e)return i;i.left&&r.push(i.left),i.right&&r.push(i.right)}}}}ensureNode(e,t="ITERATIVE"){return this.isNotNodeInstance(e)?this.getNodeByKey(e,t):e}get(e,t=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var s,o;return(!t||t===this._defaultOneParamCallback)&&e instanceof O&&(t=l=>l),(o=(s=this.getNode(e,t,r,i))==null?void 0:s.value)!=null?o:void 0}clear(){this._setRoot(void 0),this._size=0}isEmpty(){return this.size===0}getPathToRoot(e,t=!0){let r=[];if(e=this.ensureNode(e),!e)return r;for(;e.parent;)r.push(e),e=e.parent;return r.push(e),t?r.reverse():r}getLeftMost(e=this.root,t=this.iterationType){if(e=this.ensureNode(e),!e)return e;if(t==="RECURSIVE"){let r=i=>this.isRealNode(i.left)?r(i.left):i;return r(e)}else{let r=de(i=>this.isRealNode(i.left)?r.cont(i.left):i);return r(e)}}getRightMost(e=this.root,t=this.iterationType){if(e=this.ensureNode(e),!e)return e;if(t==="RECURSIVE"){let r=i=>this.isRealNode(i.right)?r(i.right):i;return r(e)}else{let r=de(i=>this.isRealNode(i.right)?r.cont(i.right):i);return r(e)}}isSubtreeBST(e,t=this.iterationType){if(e=this.ensureNode(e),!e)return!0;if(t==="RECURSIVE"){let r=(i,s,o)=>{if(!i)return!0;let l=this.extractor(i.key);return l<=s||l>=o?!1:r(i.left,s,l)&&r(i.right,l,o)};return r(e,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER)}else{let r=[],i=Number.MIN_SAFE_INTEGER,s=e;for(;s||r.length>0;){for(;s;)r.push(s),s=s.left;s=r.pop();let o=this.extractor(s.key);if(!s||i>=o)return!1;i=o,s=s.right}return!0}}isBST(e=this.iterationType){return this.root===null?!0:this.isSubtreeBST(this.root,e)}subTreeTraverse(e=this._defaultOneParamCallback,t=this.root,r=this.iterationType,i=!1){t=this.ensureNode(t);let s=[];if(!t)return s;if(r==="RECURSIVE"){let o=l=>{l!==void 0&&(s.push(e(l)),i?(l&&this.isNodeOrNull(l.left)&&o(l.left),l&&this.isNodeOrNull(l.right)&&o(l.right)):(l&&l.left&&o(l.left),l&&l.right&&o(l.right)))};o(t)}else{let o=[t];for(;o.length>0;){let l=o.pop();l!==void 0&&(s.push(e(l)),i?(l&&this.isNodeOrNull(l.right)&&o.push(l.right),l&&this.isNodeOrNull(l.left)&&o.push(l.left)):(l&&l.right&&o.push(l.right),l&&l.left&&o.push(l.left)))}}return s}isRealNode(e){return e instanceof O&&String(e.key)!=="NaN"}isNIL(e){return e instanceof O&&String(e.key)==="NaN"}isNodeOrNull(e){return this.isRealNode(e)||e===null}isNotNodeInstance(e){return!(e instanceof O)}dfs(e=this._defaultOneParamCallback,t="in",r=this.root,i="ITERATIVE",s=!1){if(r=this.ensureNode(r),!r)return[];let o=[];if(i==="RECURSIVE"){let l=a=>{switch(t){case"in":s?(a&&this.isNodeOrNull(a.left)&&l(a.left),this.isNodeOrNull(a)&&o.push(e(a)),a&&this.isNodeOrNull(a.right)&&l(a.right)):(a&&a.left&&l(a.left),this.isRealNode(a)&&o.push(e(a)),a&&a.right&&l(a.right));break;case"pre":s?(this.isNodeOrNull(a)&&o.push(e(a)),a&&this.isNodeOrNull(a.left)&&l(a.left),a&&this.isNodeOrNull(a.right)&&l(a.right)):(this.isRealNode(a)&&o.push(e(a)),a&&a.left&&l(a.left),a&&a.right&&l(a.right));break;case"post":s?(a&&this.isNodeOrNull(a.left)&&l(a.left),a&&this.isNodeOrNull(a.right)&&l(a.right),this.isNodeOrNull(a)&&o.push(e(a))):(a&&a.left&&l(a.left),a&&a.right&&l(a.right),this.isRealNode(a)&&o.push(e(a)));break}};l(r)}else{let l=[{opt:0,node:r}];for(;l.length>0;){let a=l.pop();if(!(a===void 0||this.isNIL(a.node))){if(s){if(a.node===void 0)continue}else if(a.node===null||a.node===void 0)continue;if(a.opt===1)o.push(e(a.node));else switch(t){case"in":a.node&&l.push({opt:0,node:a.node.right}),l.push({opt:1,node:a.node}),a.node&&l.push({opt:0,node:a.node.left});break;case"pre":a.node&&l.push({opt:0,node:a.node.right}),a.node&&l.push({opt:0,node:a.node.left}),l.push({opt:1,node:a.node});break;case"post":l.push({opt:1,node:a.node}),a.node&&l.push({opt:0,node:a.node.right}),a.node&&l.push({opt:0,node:a.node.left});break;default:a.node&&l.push({opt:0,node:a.node.right}),l.push({opt:1,node:a.node}),a.node&&l.push({opt:0,node:a.node.left});break}}}}return o}bfs(e=this._defaultOneParamCallback,t=this.root,r=this.iterationType,i=!1){if(t=this.ensureNode(t),!t)return[];let s=[];if(r==="RECURSIVE"){let o=new C([t]),l=a=>{if(o.size===0)return;let u=o.shift();s.push(e(u)),i?(u&&this.isNodeOrNull(u.left)&&o.push(u.left),u&&this.isNodeOrNull(u.right)&&o.push(u.right)):(u.left&&o.push(u.left),u.right&&o.push(u.right)),l(a+1)};l(0)}else{let o=new C([t]);for(;o.size>0;){let l=o.size;for(let a=0;a<l;a++){let u=o.shift();s.push(e(u)),i?(u&&this.isNodeOrNull(u.left)&&o.push(u.left),u&&this.isNodeOrNull(u.right)&&o.push(u.right)):(u.left&&o.push(u.left),u.right&&o.push(u.right))}}}return s}listLevels(e=this._defaultOneParamCallback,t=this.root,r=this.iterationType,i=!1){t=this.ensureNode(t);let s=[];if(!t)return s;if(r==="RECURSIVE"){let o=(l,a)=>{s[a]||(s[a]=[]),s[a].push(e(l)),i?(l&&this.isNodeOrNull(l.left)&&o(l.left,a+1),l&&this.isNodeOrNull(l.right)&&o(l.right,a+1)):(l&&l.left&&o(l.left,a+1),l&&l.right&&o(l.right,a+1))};o(t,0)}else{let o=[[t,0]];for(;o.length>0;){let l=o.pop(),[a,u]=l;s[u]||(s[u]=[]),s[u].push(e(a)),i?(a&&this.isNodeOrNull(a.right)&&o.push([a.right,u+1]),a&&this.isNodeOrNull(a.left)&&o.push([a.left,u+1])):(a&&a.right&&o.push([a.right,u+1]),a&&a.left&&o.push([a.left,u+1]))}}return s}getPredecessor(e){if(this.isRealNode(e.left)){let t=e.left;for(;!this.isRealNode(t)||this.isRealNode(t.right)&&t.right!==e;)this.isRealNode(t)&&(t=t.right);return t}else return e}getSuccessor(e){if(e=this.ensureNode(e),!this.isRealNode(e))return;if(this.isRealNode(e.right))return this.getLeftMost(e.right);let t=e.parent;for(;this.isRealNode(t)&&e===t.right;)e=t,t=t.parent;return t}morris(e=this._defaultOneParamCallback,t="in",r=this.root){if(r=this.ensureNode(r),r===null)return[];let i=[],s=r,o=a=>{let u=null,f=null;for(;a;)f=a.right,a.right=u,u=a,a=f;return u},l=a=>{let u=o(a),f=u;for(;f;)i.push(e(f)),f=f.right;o(u)};switch(t){case"in":for(;s;){if(s.left){let a=this.getPredecessor(s);if(a.right)a.right=null;else{a.right=s,s=s.left;continue}}i.push(e(s)),s=s.right}break;case"pre":for(;s;){if(s.left){let a=this.getPredecessor(s);if(a.right)a.right=null;else{a.right=s,i.push(e(s)),s=s.left;continue}}else i.push(e(s));s=s.right}break;case"post":for(;s;){if(s.left){let a=this.getPredecessor(s);if(a.right===null){a.right=s,s=s.left;continue}else a.right=null,l(s.left)}s=s.right}l(r);break}return i}clone(){let e=this.createTree();return this.bfs(t=>e.add([t.key,t.value])),e}filter(e,t){let r=this.createTree(),i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&r.add([s,o]);return r}map(e,t){let r=this.createTree(),i=0;for(let[s,o]of this)r.add([s,e.call(t,o,s,i++,this)]);return r}print(e=this.root,t){let r=w({isShowUndefined:!1,isShowNull:!1,isShowRedBlackNIL:!1},t);if(e=this.ensureNode(e),!e)return;r.isShowUndefined&&console.log(`U for undefined
1
+ "use strict";var dataStructureTyped=(()=>{var le=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames,Ze=Object.getOwnPropertySymbols;var $e=Object.prototype.hasOwnProperty,st=Object.prototype.propertyIsEnumerable;var ye=(h,n)=>{if(n=Symbol[h])return n;throw Error("Symbol."+h+" is not defined")};var be=(h,n,e)=>n in h?le(h,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[n]=e,w=(h,n)=>{for(var e in n||(n={}))$e.call(n,e)&&be(h,e,n[e]);if(Ze)for(var e of Ze(n))st.call(n,e)&&be(h,e,n[e]);return h};var ot=(h,n)=>{for(var e in n)le(h,e,{get:n[e],enumerable:!0})},at=(h,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of nt(n))!$e.call(h,r)&&r!==e&&le(h,r,{get:()=>n[r],enumerable:!(t=it(n,r))||t.enumerable});return h};var lt=h=>at(le({},"__esModule",{value:!0}),h);var u=(h,n,e)=>(be(h,typeof n!="symbol"?n+"":n,e),e);var et=(h,n,e)=>new Promise((t,r)=>{var i=l=>{try{o(e.next(l))}catch(a){r(a)}},s=l=>{try{o(e.throw(l))}catch(a){r(a)}},o=l=>l.done?t(l.value):Promise.resolve(l.value).then(i,s);o((e=e.apply(h,n)).next())}),ht=function(h,n){this[0]=h,this[1]=n};var z=h=>{var n=h[ye("asyncIterator")],e=!1,t,r={};return n==null?(n=h[ye("iterator")](),t=i=>r[i]=s=>n[i](s)):(n=n.call(h),t=i=>r[i]=s=>{if(e){if(e=!1,i==="throw")throw s;return s}return e=!0,{done:!1,value:new ht(new Promise(o=>{var l=n[i](s);if(!(l instanceof Object))throw TypeError("Object expected");o(l)}),1)}}),r[ye("iterator")]=()=>r,t("next"),"throw"in n?t("throw"):r.throw=i=>{throw i},"return"in n&&t("return"),r};var ft={};ot(ft,{AVLTree:()=>oe,AVLTreeNode:()=>H,AbstractEdge:()=>j,AbstractGraph:()=>U,AbstractVertex:()=>O,BST:()=>W,BSTNode:()=>L,BSTVariant:()=>Fe,BinaryIndexedTree:()=>He,BinaryTree:()=>se,BinaryTreeNode:()=>C,CP:()=>Ae,Character:()=>me,Deque:()=>Re,DirectedEdge:()=>Y,DirectedGraph:()=>ie,DirectedVertex:()=>G,DoublyLinkedList:()=>Be,DoublyLinkedListNode:()=>M,FamilyPosition:()=>ge,FibonacciHeap:()=>Me,FibonacciHeapNode:()=>de,HashMap:()=>ke,HashTable:()=>_e,HashTableNode:()=>ee,Heap:()=>I,IterableElementBase:()=>k,IterableEntryBase:()=>S,IterationType:()=>ne,LinkedHashMap:()=>Oe,LinkedListQueue:()=>we,MapEdge:()=>Ne,MapGraph:()=>ze,MapVertex:()=>pe,Matrix2D:()=>Xe,MatrixNTI2D:()=>Qe,MaxHeap:()=>Ie,MaxPriorityQueue:()=>We,MinHeap:()=>Se,MinPriorityQueue:()=>Ge,Navigator:()=>Ye,PriorityQueue:()=>Q,Queue:()=>B,RBTNColor:()=>De,RedBlackTree:()=>je,RedBlackTreeNode:()=>P,SegmentTree:()=>Pe,SegmentTreeNode:()=>J,SinglyLinkedList:()=>te,SinglyLinkedListNode:()=>R,SkipList:()=>Ce,SkipListNode:()=>re,Stack:()=>ve,THUNK_SYMBOL:()=>Ee,TreeMultimap:()=>qe,TreeMultimapNode:()=>Z,TreeNode:()=>Ue,Trie:()=>Je,TrieNode:()=>ae,UndirectedEdge:()=>ce,UndirectedGraph:()=>Le,UndirectedVertex:()=>fe,Vector2D:()=>$,arrayRemove:()=>F,calcMinUnitsRequired:()=>ue,getMSB:()=>Ke,isThunk:()=>xe,isWeakKey:()=>X,rangeCheck:()=>A,throwRangeError:()=>dt,toThunk:()=>Te,trampoline:()=>he,trampolineAsync:()=>ut,uuidV4:()=>Ve});var ee=class{constructor(n,e){u(this,"key");u(this,"value");u(this,"next");this.key=n,this.value=e,this.next=void 0}},D=class D{constructor(n=D.DEFAULT_CAPACITY,e){u(this,"_capacity");u(this,"_size");u(this,"_buckets");u(this,"_hashFn");this._hashFn=e||this._defaultHashFn,this._capacity=Math.max(n,D.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(n,e){let t=this._hash(n),r=new ee(n,e);if(!this._buckets[t])this._buckets[t]=r;else{let i=this._buckets[t];for(;i;){if(i.key===n){i.value=e;return}if(!i.next)break;i=i.next}i.next=r}this._size++,this._size/this._capacity>=D.LOAD_FACTOR&&this._expand()}get(n){let e=this._hash(n),t=this._buckets[e];for(;t;){if(t.key===n)return t.value;t=t.next}}delete(n){let e=this._hash(n),t=this._buckets[e],r;for(;t;){if(t.key===n){r?r.next=t.next:this._buckets[e]=t.next,this._size--,t.next=void 0;return}r=t,t=t.next}}*[Symbol.iterator](){for(let n of this._buckets){let e=n;for(;e;)yield[e.key,e.value],e=e.next}}forEach(n){let e=0;for(let t of this)n(t,e,this),e++}filter(n){let e=new D,t=0;for(let[r,i]of this)n([r,i],t,this)&&e.set(r,i),t++;return e}map(n){let e=new D,t=0;for(let[r,i]of this)e.set(r,n([r,i],t,this)),t++;return e}reduce(n,e){let t=e,r=0;for(let i of this)t=n(t,i,r,this),r++;return t}_defaultHashFn(n){return(typeof n=="string"?this._murmurStringHashFn(n):this._objectHash(n))%this._capacity}_multiplicativeStringHashFn(n){let e=String(n),t=0;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r),s=.618033988749895,o=1<<30;t=(t*s+i)%o}return Math.abs(t)}_murmurStringHashFn(n){let e=String(n),r=0;for(let i=0;i<e.length;i++){let s=e.charCodeAt(i);r=(r^s)*1540483477,r=(r^r>>>15)*668265261,r=r^r>>>15}return Math.abs(r)}_hash(n){return this.hashFn(n)}_stringHash(n){let e=0;for(let t=0;t<n.length;t++)e=e*31+n.charCodeAt(t)&4294967295;return e}_objectHash(n){return this._stringHash(JSON.stringify(n))}_expand(){let n=this._capacity*2,e=new Array(n).fill(void 0);for(let t of this._buckets){let r=t;for(;r;){let i=this._hash(r.key),s=new ee(r.key,r.value);if(!e[i])e[i]=s;else{let o=e[i];for(;o.next;)o=o.next;o.next=s}r=r.next}}this._buckets=e,this._capacity=n}};u(D,"DEFAULT_CAPACITY",16),u(D,"LOAD_FACTOR",.75);var _e=D;var S=class{*[Symbol.iterator](...n){yield*z(this._getIterator(...n))}*entries(){for(let n of this)yield n}*keys(){for(let n of this)yield n[0]}*values(){for(let n of this)yield n[1]}every(n,e){let t=0;for(let r of this)if(!n.call(e,r[1],r[0],t++,this))return!1;return!0}some(n,e){let t=0;for(let r of this)if(n.call(e,r[1],r[0],t++,this))return!0;return!1}forEach(n,e){let t=0;for(let r of this){let[i,s]=r;n.call(e,s,i,t++,this)}}reduce(n,e){let t=e,r=0;for(let i of this){let[s,o]=i;t=n(t,o,s,r++,this)}return t}hasValue(n){for(let[,e]of this)if(e===n)return!0;return!1}print(){console.log([...this])}},k=class{*[Symbol.iterator](...n){yield*z(this._getIterator(...n))}*values(){for(let n of this)yield n}every(n,e){let t=0;for(let r of this)if(!n.call(e,r,t++,this))return!1;return!0}some(n,e){let t=0;for(let r of this)if(n.call(e,r,t++,this))return!0;return!1}forEach(n,e){let t=0;for(let r of this)n.call(e,r,t++,this)}reduce(n,e){let t=e,r=0;for(let i of this)t=n(t,i,r++,this);return t}print(){console.log([...this])}};var Ve=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(h){let n=Math.random()*16|0;return(h=="x"?n:n&3|8).toString(16)})},F=function(h,n){let e=-1,t=h?h.length:0,r=[];for(;++e<t;){let i=h[e];n(i,e,h)&&(r.push(i),Array.prototype.splice.call(h,e--,1),t--)}return r},Ee=Symbol("thunk"),xe=h=>typeof h=="function"&&h.__THUNK__===Ee,Te=h=>{let n=()=>h();return n.__THUNK__=Ee,n},he=h=>Object.assign((...e)=>{let t=h(...e);for(;xe(t)&&typeof t=="function";)t=t();return t},{cont:(...e)=>Te(()=>h(...e))}),ut=h=>Object.assign((...e)=>et(void 0,null,function*(){let t=yield h(...e);for(;xe(t)&&typeof t=="function";)t=yield t();return t}),{cont:(...e)=>Te(()=>h(...e))}),Ke=h=>h<=0?0:1<<31-Math.clz32(h),A=(h,n,e,t="Index out of bounds.")=>{if(h<n||h>e)throw new RangeError(t)},dt=(h="The value is off-limits.")=>{throw new RangeError(h)},X=h=>{let n=typeof h;return n==="object"&&h!==null||n==="function"},ue=(h,n)=>Math.floor((h+n-1)/n);var ke=class h extends S{constructor(e=[],t){super();u(this,"_store",{});u(this,"_objMap",new Map);u(this,"_size",0);u(this,"_hashFn",e=>String(e));if(t){let{hashFn:r}=t;r&&(this._hashFn=r)}e&&this.setMany(e)}get size(){return this._size}isEmpty(){return this.size===0}clear(){this._store={},this._objMap.clear(),this._size=0}set(e,t){if(this._isObjKey(e))this._objMap.has(e)||this._size++,this._objMap.set(e,t);else{let r=this._getNoObjKey(e);this._store[r]===void 0&&this._size++,this._store[r]={key:e,value:t}}return!0}setMany(e){let t=[];for(let[r,i]of e)t.push(this.set(r,i));return t}get(e){var t;if(this._isObjKey(e))return this._objMap.get(e);{let r=this._getNoObjKey(e);return(t=this._store[r])==null?void 0:t.value}}has(e){return this._isObjKey(e)?this._objMap.has(e):this._getNoObjKey(e)in this._store}delete(e){if(this._isObjKey(e))return this._objMap.has(e)&&this._size--,this._objMap.delete(e);{let t=this._getNoObjKey(e);return t in this._store?(delete this._store[t],this._size--,!0):!1}}map(e,t){let r=new h,i=0;for(let[s,o]of this)r.set(s,e.call(t,o,s,i++,this));return r}filter(e,t){let r=new h,i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&r.set(s,o);return r}print(){console.log([...this.entries()])}put(e,t){return this.set(e,t)}*_getIterator(){for(let e of Object.values(this._store))yield[e.key,e.value];for(let e of this._objMap)yield e}_isObjKey(e){let t=typeof e;return(t==="object"||t==="function")&&e!==null}_getNoObjKey(e){let t=typeof e,r;return t!=="string"&&t!=="number"&&t!=="symbol"?r=this._hashFn(e):r=e,r}},Oe=class h extends S{constructor(e,t={hashFn:r=>String(r),objHashFn:r=>r}){super();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{hashFn:r,objHashFn:i}=t;if(this._hashFn=r,this._objHashFn=i,e)for(let s of e)this.set(s[0],s[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 e=this._head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}*reverseBegin(){let e=this._tail;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.prev}set(e,t){let r,i=!this.has(e);if(X(e)){let s=this._objHashFn(e);r=this._objMap.get(s),!r&&i?(r={key:s,value:t,prev:this._tail,next:this._sentinel},this._objMap.set(s,r)):r&&(r.value=t)}else{let s=this._hashFn(e);r=this._noObjMap[s],!r&&i?this._noObjMap[s]=r={key:e,value:t,prev:this._tail,next:this._sentinel}:r&&(r.value=t)}return r&&i&&(this._size===0?(this._head=r,this._sentinel.next=r):(this._tail.next=r,r.prev=this._tail),this._tail=r,this._sentinel.prev=r,this._size++),!0}has(e){if(X(e)){let t=this._objHashFn(e);return this._objMap.has(t)}else return this._hashFn(e)in this._noObjMap}setMany(e){let t=[];for(let r of e){let[i,s]=r;t.push(this.set(i,s))}return t}get(e){if(X(e)){let t=this._objHashFn(e),r=this._objMap.get(t);return r?r.value:void 0}else{let t=this._hashFn(e),r=this._noObjMap[t];return r?r.value:void 0}}getAt(e){A(e,0,this._size-1);let t=this._head;for(;e--;)t=t.next;return t.value}delete(e){let t;if(X(e)){let r=this._objHashFn(e);if(t=this._objMap.get(r),!t)return!1;this._objMap.delete(r)}else{let r=this._hashFn(e);if(t=this._noObjMap[r],!t)return!1;delete this._noObjMap[r]}return this._deleteNode(t),!0}deleteAt(e){A(e,0,this._size-1);let t=this._head;for(;e--;)t=t.next;return this._deleteNode(t)}isEmpty(){return this._size===0}clear(){this._noObjMap={},this._size=0,this._head=this._tail=this._sentinel.prev=this._sentinel.next=this._sentinel}clone(){let e=new h([],{hashFn:this._hashFn,objHashFn:this._objHashFn});for(let t of this){let[r,i]=t;e.set(r,i)}return e}filter(e,t){let r=new h,i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&r.set(s,o),i++;return r}map(e,t){let r=new h,i=0;for(let[s,o]of this){let l=e.call(t,o,s,i,this);r.set(s,l),i++}return r}put(e,t){return this.set(e,t)}*_getIterator(){let e=this._head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}_deleteNode(e){let{prev:t,next:r}=e;return t.next=r,r.prev=t,e===this._head&&(this._head=r),e===this._tail&&(this._tail=t),this._size-=1,!0}};var R=class{constructor(n){u(this,"value");u(this,"next");this.value=n,this.next=void 0}},te=class h extends k{constructor(e){super();u(this,"_head");u(this,"_tail");u(this,"_size");if(this._head=void 0,this._tail=void 0,this._size=0,e)for(let t of e)this.push(t)}get head(){return this._head}get tail(){return this._tail}get size(){return this._size}static fromArray(e){let t=new h;for(let r of e)t.push(r);return t}push(e){let t=new R(e);return this.head?(this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._size++,!0}addLast(e){return this.push(e)}pop(){if(!this.head)return;if(this.head===this.tail){let r=this.head.value;return this._head=void 0,this._tail=void 0,this._size--,r}let e=this.head;for(;e.next!==this.tail;)e=e.next;let t=this.tail.value;return e.next=void 0,this._tail=e,this._size--,t}pollLast(){return this.pop()}shift(){if(!this.head)return;let e=this.head;return this._head=this.head.next,this._size--,e.value}pollFirst(){return this.shift()}unshift(e){let t=new R(e);return this.head?(t.next=this.head,this._head=t):(this._head=t,this._tail=t),this._size++,!0}addFirst(e){return this.unshift(e)}getAt(e){if(e<0||e>=this.size)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t.value}getNodeAt(e){let t=this.head;for(let r=0;r<e;r++)t=t.next;return t}deleteAt(e){if(e<0||e>=this.size)return!1;if(e===0)return this.shift(),!0;if(e===this.size-1)return this.pop(),!0;let t=this.getNodeAt(e-1),r=t.next;return t.next=r.next,this._size--,!0}delete(e){if(!e)return!1;let t;e instanceof R?t=e.value:t=e;let r=this.head,i;for(;r;){if(r.value===t)return i===void 0?(this._head=r.next,r===this.tail&&(this._tail=void 0)):(i.next=r.next,r===this.tail&&(this._tail=i)),this._size--,!0;i=r,r=r.next}return!1}addAt(e,t){if(e<0||e>this.size)return!1;if(e===0)return this.unshift(t),!0;if(e===this.size)return this.push(t),!0;let r=new R(t),i=this.getNodeAt(e-1);return r.next=i.next,i.next=r,this._size++,!0}isEmpty(){return this.size===0}clear(){this._head=void 0,this._tail=void 0,this._size=0}toArray(){let e=[],t=this.head;for(;t;)e.push(t.value),t=t.next;return e}reverse(){if(!this.head||this.head===this.tail)return this;let e,t=this.head,r;for(;t;)r=t.next,t.next=e,e=t,t=r;return[this._head,this._tail]=[this.tail,this.head],this}find(e){let t=this.head;for(;t;){if(e(t.value))return t.value;t=t.next}}indexOf(e){let t=0,r=this.head;for(;r;){if(r.value===e)return t;t++,r=r.next}return-1}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}}addBefore(e,t){if(!this.head)return!1;let r;if(e instanceof R?r=e.value:r=e,this.head.value===r)return this.unshift(t),!0;let i=this.head;for(;i.next;){if(i.next.value===r){let s=new R(t);return s.next=i.next,i.next=s,this._size++,!0}i=i.next}return!1}addAfter(e,t){let r;if(e instanceof R?r=e:r=this.getNode(e),r){let i=new R(t);return i.next=r.next,r.next=i,r===this.tail&&(this._tail=i),this._size++,!0}return!1}countOccurrences(e){let t=0,r=this.head;for(;r;)r.value===e&&t++,r=r.next;return t}filter(e,t){let r=new h,i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new h,i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}};var M=class{constructor(n){u(this,"value");u(this,"next");u(this,"prev");this.value=n,this.next=void 0,this.prev=void 0}},Be=class h extends k{constructor(e){super();u(this,"_head");u(this,"_tail");u(this,"_size");if(this._head=void 0,this._tail=void 0,this._size=0,e)for(let t of e)this.push(t)}get head(){return this._head}get tail(){return this._tail}get size(){return this._size}static fromArray(e){let t=new h;for(let r of e)t.push(r);return t}push(e){let t=new M(e);return this.head?(t.prev=this.tail,this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._size++,!0}pop(){if(!this.tail)return;let e=this.tail;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._tail=e.prev,this.tail.next=void 0),this._size--,e.value}shift(){if(!this.head)return;let e=this.head;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._head=e.next,this.head.prev=void 0),this._size--,e.value}unshift(e){let t=new M(e);return this.head?(t.next=this.head,this.head.prev=t,this._head=t):(this._head=t,this._tail=t),this._size++,!0}getAt(e){if(e<0||e>=this.size)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t.value}getNodeAt(e){if(e<0||e>=this.size)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}}addAt(e,t){if(e<0||e>this.size)return!1;if(e===0)return this.unshift(t),!0;if(e===this.size)return this.push(t),!0;let r=new M(t),i=this.getNodeAt(e-1),s=i.next;return r.prev=i,r.next=s,i.next=r,s.prev=r,this._size++,!0}addBefore(e,t){let r;if(e instanceof M?r=e:r=this.getNode(e),r){let i=new M(t);return i.prev=r.prev,r.prev&&(r.prev.next=i),i.next=r,r.prev=i,r===this.head&&(this._head=i),this._size++,!0}return!1}addAfter(e,t){let r;if(e instanceof M?r=e:r=this.getNode(e),r){let i=new M(t);return i.next=r.next,r.next&&(r.next.prev=i),i.prev=r,r.next=i,r===this.tail&&(this._tail=i),this._size++,!0}return!1}deleteAt(e){if(e<0||e>=this.size)return!1;if(e===0)return this.shift(),!0;if(e===this.size-1)return this.pop(),!0;let t=this.getNodeAt(e),r=t.prev,i=t.next;return r.next=i,i.prev=r,this._size--,!0}delete(e){let t;if(e instanceof M?t=e:t=this.getNode(e),t){if(t===this.head)this.shift();else if(t===this.tail)this.pop();else{let r=t.prev,i=t.next;r.next=i,i.prev=r,this._size--}return!0}return!1}isEmpty(){return this.size===0}clear(){this._head=void 0,this._tail=void 0,this._size=0}find(e){let t=this.head;for(;t;){if(e(t.value))return t.value;t=t.next}}indexOf(e){let t=0,r=this.head;for(;r;){if(r.value===e)return t;t++,r=r.next}return-1}findBackward(e){let t=this.tail;for(;t;){if(e(t.value))return t.value;t=t.prev}}reverse(){let e=this.head;for([this._head,this._tail]=[this.tail,this.head];e;){let t=e.next;[e.prev,e.next]=[e.next,e.prev],e=t}return this}toArray(){let e=[],t=this.head;for(;t;)e.push(t.value),t=t.next;return e}toReversedArray(){let e=[],t=this.tail;for(;t;)e.push(t.value),t=t.prev;return e}filter(e,t){let r=new h,i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new h,i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}addLast(e){return this.push(e)}pollLast(){return this.pop()}pollFirst(){return this.shift()}addFirst(e){this.unshift(e)}get first(){var e;return(e=this.head)==null?void 0:e.value}get last(){var e;return(e=this.tail)==null?void 0:e.value}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}};var re=class{constructor(n,e,t){u(this,"key");u(this,"value");u(this,"forward");this.key=n,this.value=e,this.forward=new Array(t)}},Ce=class{constructor(n=16,e=.5){u(this,"_head");u(this,"_level");u(this,"_maxLevel");u(this,"_probability");this._head=new re(void 0,void 0,n),this._level=0,this._maxLevel=n,this._probability=e}get head(){return this._head}get level(){return this._level}get maxLevel(){return this._maxLevel}get probability(){return this._probability}add(n,e){let t=new re(n,e,this._randomLevel()),r=new Array(this.maxLevel).fill(this.head),i=this.head;for(let s=this.level-1;s>=0;s--){for(;i.forward[s]&&i.forward[s].key<n;)i=i.forward[s];r[s]=i}for(let s=0;s<t.forward.length;s++)t.forward[s]=r[s].forward[s],r[s].forward[s]=t;t.forward[0]||(this._level=Math.max(this.level,t.forward.length))}get(n){let e=this.head;for(let t=this.level-1;t>=0;t--)for(;e.forward[t]&&e.forward[t].key<n;)e=e.forward[t];if(e=e.forward[0],e&&e.key===n)return e.value}has(n){return this.get(n)!==void 0}delete(n){let e=new Array(this.maxLevel).fill(this.head),t=this.head;for(let r=this.level-1;r>=0;r--){for(;t.forward[r]&&t.forward[r].key<n;)t=t.forward[r];e[r]=t}if(t=t.forward[0],t&&t.key===n){for(let r=0;r<this.level&&e[r].forward[r]===t;r++)e[r].forward[r]=t.forward[r];for(;this.level>0&&!this.head.forward[this.level-1];)this._level--;return!0}return!1}get first(){let n=this.head.forward[0];return n?n.value:void 0}get last(){let n=this.head;for(let e=this.level-1;e>=0;e--)for(;n.forward[e];)n=n.forward[e];return n.value}higher(n){let e=this.head;for(let r=this.level-1;r>=0;r--)for(;e.forward[r]&&e.forward[r].key<=n;)e=e.forward[r];let t=e.forward[0];return t?t.value:void 0}lower(n){let e=this.head,t;for(let r=this.level-1;r>=0;r--){for(;e.forward[r]&&e.forward[r].key<n;)e=e.forward[r];e.key<n&&(t=e)}return t?t.value:void 0}_randomLevel(){let n=1;for(;Math.random()<this.probability&&n<this.maxLevel;)n++;return n}};var ve=class h extends k{constructor(e){super();u(this,"_elements");if(this._elements=[],e)for(let t of e)this.push(t)}get elements(){return this._elements}get size(){return this.elements.length}static fromArray(e){return new h(e)}isEmpty(){return this.elements.length===0}peek(){if(!this.isEmpty())return this.elements[this.elements.length-1]}push(e){return this.elements.push(e),!0}pop(){if(!this.isEmpty())return this.elements.pop()}toArray(){return this.elements.slice()}clear(){this._elements=[]}clone(){return new h(this.elements.slice())}filter(e,t){let r=new h,i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new h,i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}*_getIterator(){for(let e=0;e<this.elements.length;e++)yield this.elements[e]}};var B=class h extends k{constructor(e){super();u(this,"_nodes");u(this,"_offset");this._nodes=e||[],this._offset=0}get nodes(){return this._nodes}get offset(){return this._offset}get size(){return this.nodes.length-this.offset}static fromArray(e){return new h(e)}push(e){return this.nodes.push(e),!0}shift(){if(this.size===0)return;let e=this.first;return this._offset+=1,this.offset*2<this.nodes.length||(this._nodes=this.nodes.slice(this.offset),this._offset=0),e}get first(){return this.size>0?this.nodes[this.offset]:void 0}peek(){return this.first}get last(){return this.size>0?this.nodes[this.nodes.length-1]:void 0}peekLast(){return this.last}enqueue(e){return this.push(e)}dequeue(){return this.shift()}getAt(e){return this.nodes[e]}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))}filter(e,t){let r=new h([]),i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new h([]),i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}*_getIterator(){for(let e of this.nodes)yield e}},we=class extends te{enqueue(n){return this.push(n)}dequeue(){return this.shift()}get first(){var n;return(n=this.head)==null?void 0:n.value}peek(){return this.first}};var Re=class h extends k{constructor(e=[],t=4096){super();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 e?e.length instanceof Function?r=e.length():r=e.length:e.size instanceof Function?r=e.size():r=e.size,this._bucketSize=t,this._bucketCount=ue(r,this._bucketSize)||1;for(let s=0;s<this._bucketCount;++s)this._buckets.push(new Array(this._bucketSize));let i=ue(r,this._bucketSize);this._bucketFirst=this._bucketLast=(this._bucketCount>>1)-(i>>1),this._firstInBucket=this._lastInBucket=this._bucketSize-r%this._bucketSize>>1;for(let s of e)this.push(s)}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]}push(e){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]=e,!0}pop(){if(this.size===0)return;let e=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,e}unshift(e){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]=e,!0}shift(){if(this.size===0)return;let e=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,e}isEmpty(){return this.size===0}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 e=0;for(;e<this.size;)yield this.getAt(e),e++}*reverseBegin(){let e=this.size-1;for(;e>=0;)yield this.getAt(e),e--}getAt(e){A(e,0,this.size-1);let{bucketIndex:t,indexInBucket:r}=this._getBucketAndPosition(e);return this._buckets[t][r]}setAt(e,t){A(e,0,this.size-1);let{bucketIndex:r,indexInBucket:i}=this._getBucketAndPosition(e);return this._buckets[r][i]=t,!0}addAt(e,t,r=1){let i=this.size;if(A(e,0,i),e===0)for(;r--;)this.unshift(t);else if(e===this.size)for(;r--;)this.push(t);else{let s=[];for(let o=e;o<this.size;++o)s.push(this.getAt(o));this.cut(e-1);for(let o=0;o<r;++o)this.push(t);for(let o=0;o<s.length;++o)this.push(s[o])}return!0}cut(e){if(e<0)return this.clear(),0;let{bucketIndex:t,indexInBucket:r}=this._getBucketAndPosition(e);return this._bucketLast=t,this._lastInBucket=r,this._size=e+1,this.size}deleteAt(e){if(A(e,0,this.size-1),e===0)this.shift();else if(e===this.size-1)this.pop();else{let t=this.size-1,{bucketIndex:r,indexInBucket:i}=this._getBucketAndPosition(e);for(let s=e;s<t;++s){let{bucketIndex:o,indexInBucket:l}=this._getBucketAndPosition(e+1);this._buckets[r][i]=this._buckets[o][l],r=o,i=l}this.pop()}return!0}delete(e){let t=this.size;if(t===0)return!1;let r=0,i=0;for(;r<t;){let s=this.getAt(r);s!==e&&(this.setAt(i,s),i+=1),r+=1}return this.cut(i-1),!0}reverse(){this._buckets.reverse().forEach(function(s){s.reverse()});let{_bucketFirst:e,_bucketLast:t,_firstInBucket:r,_lastInBucket:i}=this;return this._bucketFirst=this._bucketCount-t-1,this._bucketLast=this._bucketCount-e-1,this._firstInBucket=this._bucketSize-i-1,this._lastInBucket=this._bucketSize-r-1,this}unique(){if(this.size<=1)return this;let e=1,t=this.getAt(0);for(let r=1;r<this.size;++r){let i=this.getAt(r);i!==t&&(t=i,this.setAt(e++,i))}return this.cut(e-1),this}sort(e){let t=[];for(let r=0;r<this.size;++r)t.push(this.getAt(r));t.sort(e);for(let r=0;r<this.size;++r)this.setAt(r,t[r]);return this}shrinkToFit(){if(this.size===0)return;let e=[];if(this._bucketFirst!==this._bucketLast){if(this._bucketFirst<this._bucketLast)for(let t=this._bucketFirst;t<=this._bucketLast;++t)e.push(this._buckets[t]);else{for(let t=this._bucketFirst;t<this._bucketCount;++t)e.push(this._buckets[t]);for(let t=0;t<=this._bucketLast;++t)e.push(this._buckets[t])}this._bucketFirst=0,this._bucketLast=e.length-1,this._buckets=e}}find(e){for(let t=0;t<this.size;++t){let r=this.getAt(t);if(e(r,t,this))return r}}indexOf(e){for(let t=0;t<this.size;++t)if(this.getAt(t)===e)return t;return-1}toArray(){return[...this]}filter(e,t){let r=new h([],this._bucketSize),i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new h([],this._bucketSize),i=0;for(let s of this)r.push(e.call(t,s,i,this)),i++;return r}addLast(e){return this.push(e)}pollLast(){return this.pop()}addFirst(e){return this.unshift(e)}pollFirst(){return this.shift()}*_getIterator(){for(let e=0;e<this.size;++e)yield this.getAt(e)}_reallocate(e){let t=[],r=e||this._bucketCount>>1||1;for(let i=0;i<r;++i)t[i]=new Array(this._bucketSize);for(let i=this._bucketFirst;i<this._bucketCount;++i)t[t.length]=this._buckets[i];for(let i=0;i<this._bucketLast;++i)t[t.length]=this._buckets[i];t[t.length]=[...this._buckets[this._bucketLast]],this._bucketFirst=r,this._bucketLast=t.length-1;for(let i=0;i<r;++i)t[t.length]=new Array(this._bucketSize);this._buckets=t,this._bucketCount=t.length}_getBucketAndPosition(e){let t,r,i=this._firstInBucket+e;return t=this._bucketFirst+Math.floor(i/this._bucketSize),t>=this._bucketCount&&(t-=this._bucketCount),r=(i+1)%this._bucketSize-1,r<0&&(r=this._bucketSize-1),{bucketIndex:t,indexInBucket:r}}};var I=class h extends k{constructor(e,t){super();u(this,"options");u(this,"_elements",[]);let r=(i,s)=>{if(typeof i=="number"&&typeof s=="number")return i-s;throw new Error("The a, b params of compare function must be number")};if(t?this.options=t:this.options={comparator:r},e)for(let i of e)this.add(i)}get elements(){return this._elements}get size(){return this.elements.length}get leaf(){var e;return(e=this.elements[this.size-1])!=null?e:void 0}static heapify(e,t){return new h(e,t)}add(e){return this._elements.push(e),this._bubbleUp(this.elements.length-1)}poll(){if(this.elements.length===0)return;let e=this.elements[0],t=this.elements.pop();return this.elements.length&&(this.elements[0]=t,this._sinkDown(0,this.elements.length>>1)),e}peek(){return this.elements[0]}isEmpty(){return this.size===0}clear(){this._elements=[]}refill(e){return this._elements=e,this.fix()}has(e){return this.elements.includes(e)}delete(e){let t=this.elements.indexOf(e);return t<0?!1:(t===0?this.poll():t===this.elements.length-1?this.elements.pop():(this.elements.splice(t,1,this.elements.pop()),this._bubbleUp(t),this._sinkDown(t,this.elements.length>>1)),!0)}dfs(e="pre"){let t=[],r=i=>{let s=2*i+1,o=s+1;i<this.size&&(e==="in"?(r(s),t.push(this.elements[i]),r(o)):e==="pre"?(t.push(this.elements[i]),r(s),r(o)):e==="post"&&(r(s),r(o),t.push(this.elements[i])))};return r(0),t}toArray(){return[...this.elements]}clone(){let e=new h([],this.options);return e._elements=[...this.elements],e}sort(){let e=[],t=this.clone();for(;t.size!==0;){let r=t.poll();r&&e.push(r)}return e}fix(){let e=[];for(let t=Math.floor(this.size/2);t>=0;t--)e.push(this._sinkDown(t,this.elements.length>>1));return e}filter(e,t){let r=new h,i=0;for(let s of this)e.call(t,s,i,this)&&r.add(s),i++;return r}map(e,t,r){let i=new h([],{comparator:t}),s=0;for(let o of this)i.add(e.call(r,o,s,this)),s++;return i}*_getIterator(){for(let e of this.elements)yield e}_bubbleUp(e){let t=this.elements[e];for(;e>0;){let r=e-1>>1,i=this.elements[r];if(this.options.comparator(i,t)<=0)break;this.elements[e]=i,e=r}return this.elements[e]=t,!0}_sinkDown(e,t){let r=this.elements[e];for(;e<t;){let i=e<<1|1,s=i+1,o=this.elements[i];if(s<this.elements.length&&this.options.comparator(o,this.elements[s])>0&&(i=s,o=this.elements[s]),this.options.comparator(o,r)>=0)break;this.elements[e]=o,e=i}return this.elements[e]=r,!0}},de=class{constructor(n,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=n,this.degree=e,this.marked=!1}},Me=class{constructor(n){u(this,"_root");u(this,"_size",0);u(this,"_min");u(this,"_comparator");if(this.clear(),this._comparator=n||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(n){return this.push(n)}push(n){let e=this.createNode(n);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(n){let e=[];if(!n)return e;let t=n,r=!1;for(;!(t===n&&r);)t===n&&(r=!0),t&&(e.push(t),t=t.right);return e}mergeWithChild(n,e){n.child?(e.right=n.child.right,e.left=n.child,n.child.right.left=e,n.child.right=e):n.child=e}poll(){return this.pop()}pop(){if(this.size===0)return;let n=this.min;if(n.child){let e=this.consumeLinkedList(n.child);for(let t of e)this.mergeWithRoot(t),t.parent=void 0}return this.removeFromRoot(n),n===n.right?(this._min=void 0,this._root=void 0):(this._min=n.right,this._consolidate()),this._size--,n.element}merge(n){if(n.size!==0){if(this.root&&n.root){let e=this.root,t=n.root,r=e.right,i=t.left;e.right=t,t.left=e,r.left=i,i.right=r}(!this.min||n.min&&this.comparator(n.min.element,this.min.element)<0)&&(this._min=n.min),this._size+=n.size,n.clear()}}createNode(n){return new de(n)}_defaultComparator(n,e){return n<e?-1:n>e?1:0}mergeWithRoot(n){this.root?(n.right=this.root.right,n.left=this.root,this.root.right.left=n,this.root.right=n):this._root=n}removeFromRoot(n){this.root===n&&(this._root=n.right),n.left&&(n.left.right=n.right),n.right&&(n.right.left=n.left)}_link(n,e){this.removeFromRoot(n),n.left=n,n.right=n,this.mergeWithChild(e,n),e.degree++,n.parent=e}_consolidate(){let n=new Array(this.size),e=this.consumeLinkedList(this.root),t,r,i,s;for(let o of e){for(t=o,i=t.degree;n[i];)r=n[i],this.comparator(t.element,r.element)>0&&(s=t,t=r,r=s),this._link(r,t),n[i]=void 0,i++;n[i]=t}for(let o=0;o<this.size;o++)n[o]&&this.comparator(n[o].element,this.min.element)<=0&&(this._min=n[o])}};var Ie=class extends I{constructor(n,e={comparator:(t,r)=>{if(typeof t=="number"&&typeof r=="number")return r-t;throw new Error("The a, b params of compare function must be number")}}){super(n,e)}};var Se=class extends I{constructor(n,e={comparator:(t,r)=>{if(typeof t=="number"&&typeof r=="number")return t-r;throw new Error("The a, b params of compare function must be number")}}){super(n,e)}};var O=class{constructor(n,e){u(this,"key");u(this,"value");this.key=n,this.value=e}},j=class{constructor(n,e){u(this,"value");u(this,"weight");u(this,"_hashCode");this.weight=n!==void 0?n:1,this.value=e,this._hashCode=Ve()}get hashCode(){return this._hashCode}},U=class extends S{constructor(){super();u(this,"_vertexMap",new Map)}get vertexMap(){return this._vertexMap}getVertex(e){return this._vertexMap.get(e)||void 0}hasVertex(e){return this._vertexMap.has(this._getVertexKey(e))}addVertex(e,t){if(e instanceof O)return this._addVertexOnly(e);{let r=this.createVertex(e,t);return this._addVertexOnly(r)}}isVertexKey(e){let t=typeof e;return t==="string"||t==="number"}deleteVertex(e){let t=this._getVertexKey(e);return this._vertexMap.delete(t)}removeManyVertices(e){let t=[];for(let r of e)t.push(this.deleteVertex(r));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,r,i){if(e instanceof j)return this._addEdgeOnly(e);if(t instanceof O||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof O&&(e=e.key),t instanceof O&&(t=t.key);let s=this.createEdge(e,t,r,i);return this._addEdgeOnly(s)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(e,t,r){let i=this.getEdge(e,t);return i?(i.weight=r,!0):!1}getAllPathsBetween(e,t,r=1e3){let i=[],s=this._getVertex(e),o=this._getVertex(t);if(!(s&&o))return[];let l=[];for(l.push({vertex:s,path:[s]});l.length>0;){let{vertex:a,path:d}=l.pop();if(a===o&&(i.push(d),i.length>=r))return i;let f=this.getNeighbors(a);for(let m of f)if(!d.includes(m)){let N=[...d,m];l.push({vertex:m,path:N})}}return i}getPathSumWeight(e){var r;let t=0;for(let i=0;i<e.length;i++)t+=((r=this.getEdge(e[i],e[i+1]))==null?void 0:r.weight)||0;return t}getMinCostBetween(e,t,r){if(r===void 0&&(r=!1),r){let i=this.getAllPathsBetween(e,t),s=1/0;for(let o of i)s=Math.min(this.getPathSumWeight(o),s);return s}else{let i=this._getVertex(t),s=this._getVertex(e);if(!(s&&i))return;let o=new Map,l=new B([s]);o.set(s,!0);let a=0;for(;l.size>0;){for(let d=0;d<l.size;d++){let f=l.shift();if(f===i)return a;if(f!==void 0){let m=this.getNeighbors(f);for(let N of m)o.has(N)||(o.set(N,!0),l.push(N))}}a++}return}}getMinPathBetween(e,t,r,i=!1){var s,o;if(r===void 0&&(r=!1),r)if(i){let l=this.getAllPathsBetween(e,t,1e4),a=1/0,d=-1,f=0;for(let m of l){let N=this.getPathSumWeight(m);N<a&&(a=N,d=f),f++}return l[d]||void 0}else return(o=(s=this.dijkstra(e,t,!0,!0))==null?void 0:s.minPath)!=null?o:[];else{let l=[],a=this._getVertex(e),d=this._getVertex(t);if(!(a&&d))return[];let f=(m,N,b,_)=>{if(b.add(m),m===N){l=[a,..._];return}let T=this.getNeighbors(m);for(let K of T)b.has(K)||(_.push(K),f(K,N,b,_),_.pop());b.delete(m)};return f(a,d,new Set,[]),l}}dijkstraWithoutHeap(e,t=void 0,r=!1,i=!1){let s=1/0,o,l=[],a=[],d=this._vertexMap,f=new Map,m=new Set,N=new Map,b=this._getVertex(e),_=t?this._getVertex(t):void 0;if(!b)return;for(let p of d){let c=p[1];c instanceof O&&f.set(c,1/0)}f.set(b,0),N.set(b,void 0);let T=()=>{let p=1/0,c;for(let[y,g]of f)m.has(y)||g<p&&(p=g,c=y);return c},K=p=>{for(let c of d){let y=c[1];if(y instanceof O){let g=[y],V=N.get(y);for(;V;)g.push(V),V=N.get(V);let E=g.reverse();c[1]===p&&(l=E),a.push(E)}}};for(let p=1;p<d.size;p++){let c=T();if(c){if(m.add(c),_&&_===c)return r&&(s=f.get(_)||1/0),i&&K(_),{distMap:f,preMap:N,seen:m,paths:a,minDist:s,minPath:l};let y=this.getNeighbors(c);for(let g of y)if(!m.has(g)){let V=this.getEdge(c,g);if(V){let E=f.get(c),x=f.get(g);E!==void 0&&x!==void 0&&V.weight+E<x&&(f.set(g,V.weight+E),N.set(g,c))}}}}return r&&f.forEach((p,c)=>{c!==b&&p<s&&(s=p,i&&(o=c))}),i&&K(o),{distMap:f,preMap:N,seen:m,paths:a,minDist:s,minPath:l}}dijkstra(e,t=void 0,r=!1,i=!1){var p;let s=1/0,o,l=[],a=[],d=this._vertexMap,f=new Map,m=new Set,N=new Map,b=this._getVertex(e),_=t?this._getVertex(t):void 0;if(!b)return;for(let c of d){let y=c[1];y instanceof O&&f.set(y,1/0)}let T=new I([],{comparator:(c,y)=>c.key-y.key});T.add({key:0,value:b}),f.set(b,0),N.set(b,void 0);let K=c=>{for(let y of d){let g=y[1];if(g instanceof O){let V=[g],E=N.get(g);for(;E;)V.push(E),E=N.get(E);let x=V.reverse();y[1]===c&&(l=x),a.push(x)}}};for(;T.size>0;){let c=T.poll(),y=c==null?void 0:c.key,g=c==null?void 0:c.value;if(y!==void 0&&g){if(m.add(g),_&&_===g)return r&&(s=f.get(_)||1/0),i&&K(_),{distMap:f,preMap:N,seen:m,paths:a,minDist:s,minPath:l};let V=this.getNeighbors(g);for(let E of V)if(!m.has(E)){let x=(p=this.getEdge(g,E))==null?void 0:p.weight;if(typeof x=="number"){let v=f.get(E);v&&y+x<v&&(T.add({key:y+x,value:E}),N.set(E,g),f.set(E,y+x))}}}}return r&&f.forEach((c,y)=>{y!==b&&c<s&&(s=c,i&&(o=y))}),i&&K(o),{distMap:f,preMap:N,seen:m,paths:a,minDist:s,minPath:l}}bellmanFord(e,t,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1);let s=this._getVertex(e),o=[],l=new Map,a=new Map,d=1/0,f=[],m;if(t&&(m=!1),!s)return{hasNegativeCycle:m,distMap:l,preMap:a,paths:o,min:d,minPath:f};let N=this._vertexMap,b=N.size,_=this.edgeSet(),T=_.length;this._vertexMap.forEach(p=>{l.set(p,1/0)}),l.set(s,0);for(let p=1;p<b;++p)for(let c=0;c<T;++c){let y=this.getEndsOfEdge(_[c]);if(y){let[g,V]=y,E=_[c].weight,x=l.get(g),v=l.get(V);x!==void 0&&v!==void 0&&l.get(g)!==1/0&&x+E<v&&(l.set(V,x+E),i&&a.set(V,g))}}let K;if(r&&l.forEach((p,c)=>{c!==s&&p<d&&(d=p,i&&(K=c))}),i)for(let p of N){let c=p[1];if(c instanceof O){let y=[c],g=a.get(c);for(;g!==void 0;)y.push(g),g=a.get(g);let V=y.reverse();p[1]===K&&(f=V),o.push(V)}}for(let p=0;p<T;++p){let c=this.getEndsOfEdge(_[p]);if(c){let[y]=c,g=_[p].weight,V=l.get(y);V&&V!==1/0&&V+g<V&&(m=!0)}}return{hasNegativeCycle:m,distMap:l,preMap:a,paths:o,min:d,minPath:f}}floydWarshall(){var s;let e=[...this._vertexMap],t=e.length,r=[],i=[];for(let o=0;o<t;o++){r[o]=[],i[o]=[];for(let l=0;l<t;l++)i[o][l]=void 0}for(let o=0;o<t;o++)for(let l=0;l<t;l++)r[o][l]=((s=this.getEdge(e[o][1],e[l][1]))==null?void 0:s.weight)||1/0;for(let o=0;o<t;o++)for(let l=0;l<t;l++)for(let a=0;a<t;a++)r[l][a]>r[l][o]+r[o][a]&&(r[l][a]=r[l][o]+r[o][a],i[l][a]=e[o][1]);return{costs:r,predecessor:i}}tarjan(e=!1,t=!1,r=!0,i=!1){e===void 0&&(e=!1),t===void 0&&(t=!1),r===void 0&&(r=!1),i===void 0&&(i=!1);let o=new Map,l=new Map,a=this._vertexMap;a.forEach(p=>{o.set(p,-1),l.set(p,1/0)});let[d]=a.values(),f=[],m=[],N=0,b=(p,c)=>{N++,o.set(p,N),l.set(p,N);let y=this.getNeighbors(p),g=0;for(let V of y)if(V!==c){o.get(V)===-1&&(g++,b(V,p));let E=l.get(V),x=l.get(p);x!==void 0&&E!==void 0&&l.set(p,Math.min(x,E));let v=o.get(p);if(E!==void 0&&v!==void 0&&(e&&(p===d&&g>=2||p!==d&&E>=v)&&f.push(p),t&&E>v)){let q=this.getEdge(p,V);q&&m.push(q)}}};b(d,void 0);let _=new Map;r&&(_=(()=>{let p=new Map;return l.forEach((c,y)=>{var g;p.has(c)?(g=p.get(c))==null||g.push(y):p.set(c,[y])}),p})());let K=new Map;if(i){let p=new Map,c=[],y=(g,V)=>{p.set(g,!0),c.push(g);let E=this.getNeighbors(g);for(let x of E)if(!p.get(x))y(x,g);else if(c.includes(x)&&x!==V){let v=c.indexOf(x),q=c.slice(v),tt=Math.min(...q.map(rt=>o.get(rt)||1/0));K.set(tt,q)}c.pop()};a.forEach(g=>{p.get(g)||y(g,void 0)})}return{dfnMap:o,lowMap:l,bridges:m,cutVertexes:f,SCCs:_,cycles:K}}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}filter(e,t){let r=[],i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&r.push([s,o]),i++;return r}map(e,t){let r=[],i=0;for(let[s,o]of this)r.push(e.call(t,o,s,i,this)),i++;return r}*_getIterator(){for(let e of this._vertexMap.values())yield[e.key,e.value]}_addVertexOnly(e){return this.hasVertex(e)?!1:(this._vertexMap.set(e.key,e),!0)}_getVertex(e){let t=this._getVertexKey(e);return this._vertexMap.get(t)||void 0}_getVertexKey(e){return e instanceof O?e.key:e}};var G=class extends O{constructor(n,e){super(n,e)}},Y=class extends j{constructor(e,t,r,i){super(r,i);u(this,"src");u(this,"dest");this.src=e,this.dest=t}},ie=class extends U{constructor(){super();u(this,"_outEdgeMap",new Map);u(this,"_inEdgeMap",new Map)}get outEdgeMap(){return this._outEdgeMap}get inEdgeMap(){return this._inEdgeMap}createVertex(e,t){return new G(e,t)}createEdge(e,t,r,i){return new Y(e,t,r!=null?r:1,i)}getEdge(e,t){let r=[];if(e!==void 0&&t!==void 0){let i=this._getVertex(e),s=this._getVertex(t);if(i&&s){let o=this._outEdgeMap.get(i);o&&(r=o.filter(l=>l.dest===s.key))}}return r[0]||void 0}deleteEdgeSrcToDest(e,t){let r=this._getVertex(e),i=this._getVertex(t),s;if(!r||!i)return;let o=this._outEdgeMap.get(r);o&&F(o,a=>a.dest===i.key);let l=this._inEdgeMap.get(i);return l&&(s=F(l,a=>a.src===r.key)[0]||void 0),s}deleteEdge(e,t){let r,i,s;if(this.isVertexKey(e))if(this.isVertexKey(t))i=this._getVertex(e),s=this._getVertex(t);else return;else i=this._getVertex(e.src),s=this._getVertex(e.dest);if(i&&s){let o=this._outEdgeMap.get(i);o&&o.length>0&&F(o,a=>a.src===i.key&&a.dest===(s==null?void 0:s.key));let l=this._inEdgeMap.get(s);l&&l.length>0&&(r=F(l,a=>a.src===i.key&&a.dest===s.key)[0])}return r}deleteVertex(e){let t,r;return this.isVertexKey(e)?(r=this.getVertex(e),t=e):(r=e,t=this._getVertexKey(e)),r&&(this._outEdgeMap.delete(r),this._inEdgeMap.delete(r)),this._vertexMap.delete(t)}deleteEdgesBetween(e,t){let r=[];if(e&&t){let i=this.deleteEdgeSrcToDest(e,t),s=this.deleteEdgeSrcToDest(t,e);i&&r.push(i),s&&r.push(s)}return r}incomingEdgesOf(e){let t=this._getVertex(e);return t?this.inEdgeMap.get(t)||[]:[]}outgoingEdgesOf(e){let t=this._getVertex(e);return t?this._outEdgeMap.get(t)||[]:[]}degreeOf(e){return this.outDegreeOf(e)+this.inDegreeOf(e)}inDegreeOf(e){return this.incomingEdgesOf(e).length}outDegreeOf(e){return this.outgoingEdgesOf(e).length}edgesOf(e){return[...this.outgoingEdgesOf(e),...this.incomingEdgesOf(e)]}getEdgeSrc(e){return this._getVertex(e.src)}getEdgeDest(e){return this._getVertex(e.dest)}getDestinations(e){if(e===void 0)return[];let t=[],r=this.outgoingEdgesOf(e);for(let i of r){let s=this.getEdgeDest(i);s&&t.push(s)}return t}topologicalSort(e){e=e!=null?e:"key";let t=new Map;for(let o of this.vertexMap)t.set(o[1],0);let r=[],i=!1,s=o=>{t.set(o,1);let l=this.getDestinations(o);for(let a of l){let d=t.get(a);d===0?s(a):d===1&&(i=!0)}t.set(o,2),r.push(o)};for(let o of this.vertexMap)t.get(o[1])===0&&s(o[1]);if(!i)return e==="key"&&(r=r.map(o=>o instanceof G?o.key:o)),r.reverse()}edgeSet(){let e=[];return this._outEdgeMap.forEach(t=>{e=[...e,...t]}),e}getNeighbors(e){let t=[],r=this._getVertex(e);if(r){let i=this.outgoingEdgesOf(r);for(let s of i){let o=this._getVertex(s.dest);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.src,e.dest))return;let t=this._getVertex(e.src),r=this._getVertex(e.dest);if(t&&r)return[t,r]}_addEdgeOnly(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let t=this._getVertex(e.src),r=this._getVertex(e.dest);if(t&&r){let i=this._outEdgeMap.get(t);i?i.push(e):this._outEdgeMap.set(t,[e]);let s=this._inEdgeMap.get(r);return s?s.push(e):this._inEdgeMap.set(r,[e]),!0}else return!1}};var fe=class extends O{constructor(n,e){super(n,e)}},ce=class extends j{constructor(e,t,r,i){super(r,i);u(this,"vertexMap");this.vertexMap=[e,t]}},Le=class extends U{constructor(){super();u(this,"_edgeMap");this._edgeMap=new Map}get edgeMap(){return this._edgeMap}createVertex(e,t){return new fe(e,t!=null?t:e)}createEdge(e,t,r,i){return new ce(e,t,r!=null?r:1,i)}getEdge(e,t){var i;let r=[];if(e!==void 0&&t!==void 0){let s=this._getVertex(e),o=this._getVertex(t);s&&o&&(r=(i=this._edgeMap.get(s))==null?void 0:i.filter(l=>l.vertexMap.includes(o.key)))}return r&&r[0]||void 0}deleteEdgeBetween(e,t){let r=this._getVertex(e),i=this._getVertex(t);if(!r||!i)return;let s=this._edgeMap.get(r),o;s&&(o=F(s,a=>a.vertexMap.includes(i.key))[0]||void 0);let l=this._edgeMap.get(i);return l&&F(l,a=>a.vertexMap.includes(r.key)),o}deleteEdge(e,t){let r,i;if(this.isVertexKey(e))if(this.isVertexKey(t))r=this._getVertex(e),i=this._getVertex(t);else return;else r=this._getVertex(e.vertexMap[0]),i=this._getVertex(e.vertexMap[1]);if(r&&i)return this.deleteEdgeBetween(r,i)}deleteVertex(e){let t,r;this.isVertexKey(e)?(r=this.getVertex(e),t=e):(r=e,t=this._getVertexKey(e));let i=this.getNeighbors(e);return r&&(i.forEach(s=>{let o=this._edgeMap.get(s);if(o){let l=o.filter(a=>!a.vertexMap.includes(t));this._edgeMap.set(s,l)}}),this._edgeMap.delete(r)),this._vertexMap.delete(t)}degreeOf(e){var r;let t=this._getVertex(e);return t&&((r=this._edgeMap.get(t))==null?void 0:r.length)||0}edgesOf(e){let t=this._getVertex(e);return t?this._edgeMap.get(t)||[]:[]}edgeSet(){let e=new Set;return this._edgeMap.forEach(t=>{t.forEach(r=>{e.add(r)})}),[...e]}getNeighbors(e){let t=[],r=this._getVertex(e);if(r){let i=this.edgesOf(r);for(let s of i){let o=this._getVertex(s.vertexMap.filter(l=>l!==r.key)[0]);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.vertexMap[0],e.vertexMap[1]))return;let t=this._getVertex(e.vertexMap[0]),r=this._getVertex(e.vertexMap[1]);if(t&&r)return[t,r]}_addEdgeOnly(e){for(let t of e.vertexMap){let r=this._getVertex(t);if(r===void 0)return!1;if(r){let i=this._edgeMap.get(r);i?i.push(e):this._edgeMap.set(r,[e])}}return!0}};var pe=class extends G{constructor(e,t,r,i){super(e,t);u(this,"lat");u(this,"long");this.lat=r,this.long=i}},Ne=class extends Y{constructor(n,e,t,r){super(n,e,t,r)}},ze=class extends ie{constructor(e,t){super();u(this,"_originCoord",[0,0]);u(this,"_bottomRight");this._originCoord=e,this._bottomRight=t}get originCoord(){return this._originCoord}get bottomRight(){return this._bottomRight}createVertex(e,t,r=this.originCoord[0],i=this.originCoord[1]){return new pe(e,t,r,i)}createEdge(e,t,r,i){return new Ne(e,t,r,i)}};var De=(e=>(e[e.RED=1]="RED",e[e.BLACK=0]="BLACK",e))(De||{});var Fe=(e=>(e.MIN="MIN",e.MAX="MAX",e))(Fe||{}),Ae=(t=>(t.lt="lt",t.eq="eq",t.gt="gt",t))(Ae||{}),ne=(e=>(e.ITERATIVE="ITERATIVE",e.RECURSIVE="RECURSIVE",e))(ne||{}),ge=(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))(ge||{});var C=class{constructor(n,e){u(this,"key");u(this,"value");u(this,"parent");u(this,"_left");u(this,"_right");this.key=n,this.value=e}get left(){return this._left}set left(n){n&&(n.parent=this),this._left=n}get right(){return this._right}set right(n){n&&(n.parent=this),this._right=n}get familyPosition(){let n=this;return this.parent?this.parent.left===n?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===n?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},se=class h extends S{constructor(e,t){super();u(this,"iterationType","ITERATIVE");u(this,"_extractor",e=>Number(e));u(this,"_root");u(this,"_size");u(this,"_defaultOneParamCallback",e=>e.key);if(t){let{iterationType:r,extractor:i}=t;r&&(this.iterationType=r),i&&(this._extractor=i)}this._size=0,e&&this.addMany(e)}get extractor(){return this._extractor}get root(){return this._root}get size(){return this._size}createNode(e,t){return new C(e,t)}createTree(e){return new h([],w({iterationType:this.iterationType},e))}isNode(e){return e instanceof C}exemplarToNode(e,t){if(e===void 0)return;let r;if(e===null)r=null;else if(this.isEntry(e)){let[i,s]=e;if(i===void 0)return;i===null?r=null:r=this.createNode(i,s)}else if(this.isNode(e))r=e;else if(this.isNotNodeInstance(e))r=this.createNode(e,t);else return;return r}isEntry(e){return Array.isArray(e)&&e.length===2}add(e,t){let r=this.exemplarToNode(e,t);if(r===void 0)return;if(!this.root)return this._root=r,this._size=1,r;let i=new B([this.root]),s;for(;i.size>0;){let o=i.shift();if(o){if(r!==null&&o.key===r.key)return this._replaceNode(o,r),r;s===void 0&&(o.left===void 0||o.right===void 0)&&(s=o),o.left!==null&&o.left&&i.push(o.left),o.right!==null&&o.right&&i.push(o.right)}}if(s)return s.left===void 0?s.left=r:s.right===void 0&&(s.right=r),this._size++,r}addMany(e,t){let r=[],i;t&&(i=t[Symbol.iterator]());for(let s of e){let o;if(i){let l=i.next();l.done||(o=l.value)}r.push(this.add(s,o))}return r}refill(e,t){this.clear(),this.addMany(e,t)}delete(e,t=this._defaultOneParamCallback){let r=[];if(!this.root)return r;(!t||t===this._defaultOneParamCallback)&&e instanceof C&&(t=a=>a);let i=this.getNode(e,t);if(!i)return r;let s=i!=null&&i.parent?i.parent:null,o,l=i;if(i.left){if(i.left){let a=this.getRightMost(i.left);if(a){let d=a.parent;l=this._swapProperties(i,a),d&&(d.right===a?d.right=a.left:d.left=a.left,o=d)}}}else if(!s)this._setRoot(null);else{let{familyPosition:a}=i;a==="LEFT"||a==="ROOT_LEFT"?s.left=i.right:(a==="RIGHT"||a==="ROOT_RIGHT")&&(s.right=i.right),o=s}return this._size=this.size-1,r.push({deleted:l,needBalanced:o}),r}getDepth(e,t=this.root){e=this.ensureNode(e),t=this.ensureNode(t);let r=0;for(;e!=null&&e.parent;){if(e===t)return r;r++,e=e.parent}return r}getHeight(e=this.root,t=this.iterationType){if(e=this.ensureNode(e),!e)return-1;if(t==="RECURSIVE"){let r=i=>{if(!i)return-1;let s=r(i.left),o=r(i.right);return Math.max(s,o)+1};return r(e)}else{let r=[{node:e,depth:0}],i=0;for(;r.length>0;){let{node:s,depth:o}=r.pop();s.left&&r.push({node:s.left,depth:o+1}),s.right&&r.push({node:s.right,depth:o+1}),i=Math.max(i,o)}return i}}getMinHeight(e=this.root,t=this.iterationType){var r,i,s;if(e=this.ensureNode(e),!e)return-1;if(t==="RECURSIVE"){let o=l=>{if(!l||!l.left&&!l.right)return 0;let a=o(l.left),d=o(l.right);return Math.min(a,d)+1};return o(e)}else{let o=[],l=e,a=null,d=new Map;for(;o.length>0||l;)if(l)o.push(l),l=l.left;else if(l=o[o.length-1],!l.right||a===l.right){if(l=o.pop(),l){let f=l.left&&(r=d.get(l.left))!=null?r:-1,m=l.right&&(i=d.get(l.right))!=null?i:-1;d.set(l,1+Math.min(f,m)),a=l,l=null}}else l=l.right;return(s=d.get(e))!=null?s:-1}}isPerfectlyBalanced(e=this.root){return this.getMinHeight(e)+1>=this.getHeight(e)}getNodes(e,t=this._defaultOneParamCallback,r=!1,i=this.root,s=this.iterationType){if((!t||t===this._defaultOneParamCallback)&&e instanceof C&&(t=l=>l),i=this.ensureNode(i),!i)return[];let o=[];if(s==="RECURSIVE"){let l=a=>{t(a)===e&&(o.push(a),r)||!a.left&&!a.right||(a.left&&l(a.left),a.right&&l(a.right))};l(i)}else{let l=new B([i]);for(;l.size>0;){let a=l.shift();if(a){if(t(a)===e&&(o.push(a),r))return o;a.left&&l.push(a.left),a.right&&l.push(a.right)}}}return o}has(e,t=this._defaultOneParamCallback,r=this.root,i=this.iterationType){return(!t||t===this._defaultOneParamCallback)&&e instanceof C&&(t=s=>s),this.getNodes(e,t,!0,r,i).length>0}getNode(e,t=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var s;return(!t||t===this._defaultOneParamCallback)&&e instanceof C&&(t=o=>o),(s=this.getNodes(e,t,!0,r,i)[0])!=null?s:null}getNodeByKey(e,t="ITERATIVE"){if(this.root)if(t==="RECURSIVE"){let r=i=>{if(i.key===e)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 B([this.root]);for(;r.size>0;){let i=r.shift();if(i){if(i.key===e)return i;i.left&&r.push(i.left),i.right&&r.push(i.right)}}}}ensureNode(e,t="ITERATIVE"){return this.isNotNodeInstance(e)?this.getNodeByKey(e,t):e}get(e,t=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var s,o;return(!t||t===this._defaultOneParamCallback)&&e instanceof C&&(t=l=>l),(o=(s=this.getNode(e,t,r,i))==null?void 0:s.value)!=null?o:void 0}clear(){this._setRoot(void 0),this._size=0}isEmpty(){return this.size===0}getPathToRoot(e,t=!0){let r=[];if(e=this.ensureNode(e),!e)return r;for(;e.parent;)r.push(e),e=e.parent;return r.push(e),t?r.reverse():r}getLeftMost(e=this.root,t=this.iterationType){if(e=this.ensureNode(e),!e)return e;if(t==="RECURSIVE"){let r=i=>this.isRealNode(i.left)?r(i.left):i;return r(e)}else{let r=he(i=>this.isRealNode(i.left)?r.cont(i.left):i);return r(e)}}getRightMost(e=this.root,t=this.iterationType){if(e=this.ensureNode(e),!e)return e;if(t==="RECURSIVE"){let r=i=>this.isRealNode(i.right)?r(i.right):i;return r(e)}else{let r=he(i=>this.isRealNode(i.right)?r.cont(i.right):i);return r(e)}}isSubtreeBST(e,t=this.iterationType){if(e=this.ensureNode(e),!e)return!0;if(t==="RECURSIVE"){let r=(i,s,o)=>{if(!i)return!0;let l=this.extractor(i.key);return l<=s||l>=o?!1:r(i.left,s,l)&&r(i.right,l,o)};return r(e,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER)}else{let r=[],i=Number.MIN_SAFE_INTEGER,s=e;for(;s||r.length>0;){for(;s;)r.push(s),s=s.left;s=r.pop();let o=this.extractor(s.key);if(!s||i>=o)return!1;i=o,s=s.right}return!0}}isBST(e=this.iterationType){return this.root===null?!0:this.isSubtreeBST(this.root,e)}subTreeTraverse(e=this._defaultOneParamCallback,t=this.root,r=this.iterationType,i=!1){t=this.ensureNode(t);let s=[];if(!t)return s;if(r==="RECURSIVE"){let o=l=>{l!==void 0&&(s.push(e(l)),i?(l&&this.isNodeOrNull(l.left)&&o(l.left),l&&this.isNodeOrNull(l.right)&&o(l.right)):(l&&l.left&&o(l.left),l&&l.right&&o(l.right)))};o(t)}else{let o=[t];for(;o.length>0;){let l=o.pop();l!==void 0&&(s.push(e(l)),i?(l&&this.isNodeOrNull(l.right)&&o.push(l.right),l&&this.isNodeOrNull(l.left)&&o.push(l.left)):(l&&l.right&&o.push(l.right),l&&l.left&&o.push(l.left)))}}return s}isRealNode(e){return e instanceof C&&String(e.key)!=="NaN"}isNIL(e){return e instanceof C&&String(e.key)==="NaN"}isNodeOrNull(e){return this.isRealNode(e)||e===null}isNotNodeInstance(e){return!(e instanceof C)}dfs(e=this._defaultOneParamCallback,t="in",r=this.root,i="ITERATIVE",s=!1){if(r=this.ensureNode(r),!r)return[];let o=[];if(i==="RECURSIVE"){let l=a=>{switch(t){case"in":s?(a&&this.isNodeOrNull(a.left)&&l(a.left),this.isNodeOrNull(a)&&o.push(e(a)),a&&this.isNodeOrNull(a.right)&&l(a.right)):(a&&a.left&&l(a.left),this.isRealNode(a)&&o.push(e(a)),a&&a.right&&l(a.right));break;case"pre":s?(this.isNodeOrNull(a)&&o.push(e(a)),a&&this.isNodeOrNull(a.left)&&l(a.left),a&&this.isNodeOrNull(a.right)&&l(a.right)):(this.isRealNode(a)&&o.push(e(a)),a&&a.left&&l(a.left),a&&a.right&&l(a.right));break;case"post":s?(a&&this.isNodeOrNull(a.left)&&l(a.left),a&&this.isNodeOrNull(a.right)&&l(a.right),this.isNodeOrNull(a)&&o.push(e(a))):(a&&a.left&&l(a.left),a&&a.right&&l(a.right),this.isRealNode(a)&&o.push(e(a)));break}};l(r)}else{let l=[{opt:0,node:r}];for(;l.length>0;){let a=l.pop();if(!(a===void 0||this.isNIL(a.node))){if(s){if(a.node===void 0)continue}else if(a.node===null||a.node===void 0)continue;if(a.opt===1)o.push(e(a.node));else switch(t){case"in":a.node&&l.push({opt:0,node:a.node.right}),l.push({opt:1,node:a.node}),a.node&&l.push({opt:0,node:a.node.left});break;case"pre":a.node&&l.push({opt:0,node:a.node.right}),a.node&&l.push({opt:0,node:a.node.left}),l.push({opt:1,node:a.node});break;case"post":l.push({opt:1,node:a.node}),a.node&&l.push({opt:0,node:a.node.right}),a.node&&l.push({opt:0,node:a.node.left});break;default:a.node&&l.push({opt:0,node:a.node.right}),l.push({opt:1,node:a.node}),a.node&&l.push({opt:0,node:a.node.left});break}}}}return o}bfs(e=this._defaultOneParamCallback,t=this.root,r=this.iterationType,i=!1){if(t=this.ensureNode(t),!t)return[];let s=[];if(r==="RECURSIVE"){let o=new B([t]),l=a=>{if(o.size===0)return;let d=o.shift();s.push(e(d)),i?(d&&this.isNodeOrNull(d.left)&&o.push(d.left),d&&this.isNodeOrNull(d.right)&&o.push(d.right)):(d.left&&o.push(d.left),d.right&&o.push(d.right)),l(a+1)};l(0)}else{let o=new B([t]);for(;o.size>0;){let l=o.size;for(let a=0;a<l;a++){let d=o.shift();s.push(e(d)),i?(d&&this.isNodeOrNull(d.left)&&o.push(d.left),d&&this.isNodeOrNull(d.right)&&o.push(d.right)):(d.left&&o.push(d.left),d.right&&o.push(d.right))}}}return s}listLevels(e=this._defaultOneParamCallback,t=this.root,r=this.iterationType,i=!1){t=this.ensureNode(t);let s=[];if(!t)return s;if(r==="RECURSIVE"){let o=(l,a)=>{s[a]||(s[a]=[]),s[a].push(e(l)),i?(l&&this.isNodeOrNull(l.left)&&o(l.left,a+1),l&&this.isNodeOrNull(l.right)&&o(l.right,a+1)):(l&&l.left&&o(l.left,a+1),l&&l.right&&o(l.right,a+1))};o(t,0)}else{let o=[[t,0]];for(;o.length>0;){let l=o.pop(),[a,d]=l;s[d]||(s[d]=[]),s[d].push(e(a)),i?(a&&this.isNodeOrNull(a.right)&&o.push([a.right,d+1]),a&&this.isNodeOrNull(a.left)&&o.push([a.left,d+1])):(a&&a.right&&o.push([a.right,d+1]),a&&a.left&&o.push([a.left,d+1]))}}return s}getPredecessor(e){if(this.isRealNode(e.left)){let t=e.left;for(;!this.isRealNode(t)||this.isRealNode(t.right)&&t.right!==e;)this.isRealNode(t)&&(t=t.right);return t}else return e}getSuccessor(e){if(e=this.ensureNode(e),!this.isRealNode(e))return;if(this.isRealNode(e.right))return this.getLeftMost(e.right);let t=e.parent;for(;this.isRealNode(t)&&e===t.right;)e=t,t=t.parent;return t}morris(e=this._defaultOneParamCallback,t="in",r=this.root){if(r=this.ensureNode(r),r===null)return[];let i=[],s=r,o=a=>{let d=null,f=null;for(;a;)f=a.right,a.right=d,d=a,a=f;return d},l=a=>{let d=o(a),f=d;for(;f;)i.push(e(f)),f=f.right;o(d)};switch(t){case"in":for(;s;){if(s.left){let a=this.getPredecessor(s);if(a.right)a.right=null;else{a.right=s,s=s.left;continue}}i.push(e(s)),s=s.right}break;case"pre":for(;s;){if(s.left){let a=this.getPredecessor(s);if(a.right)a.right=null;else{a.right=s,i.push(e(s)),s=s.left;continue}}else i.push(e(s));s=s.right}break;case"post":for(;s;){if(s.left){let a=this.getPredecessor(s);if(a.right===null){a.right=s,s=s.left;continue}else a.right=null,l(s.left)}s=s.right}l(r);break}return i}clone(){let e=this.createTree();return this.bfs(t=>e.add([t.key,t.value])),e}filter(e,t){let r=this.createTree(),i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&r.add([s,o]);return r}map(e,t){let r=this.createTree(),i=0;for(let[s,o]of this)r.add([s,e.call(t,o,s,i++,this)]);return r}print(e=this.root,t){let r=w({isShowUndefined:!1,isShowNull:!1,isShowRedBlackNIL:!1},t);if(e=this.ensureNode(e),!e)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
- `),(s=>{let[o,,,]=this._displayAux(s,r);for(let l of o)console.log(l)})(e)}*_getIterator(e=this.root){if(e)if(this.iterationType==="ITERATIVE"){let t=[],r=e;for(;r||t.length>0;){for(;r&&!isNaN(this.extractor(r.key));)t.push(r),r=r.left;r=t.pop(),r&&!isNaN(this.extractor(r.key))&&(yield[r.key,r.value],r=r.right)}}else e.left&&!isNaN(this.extractor(e.key))&&(yield*L(this[Symbol.iterator](e.left))),yield[e.key,e.value],e.right&&!isNaN(this.extractor(e.key))&&(yield*L(this[Symbol.iterator](e.right)))}_displayAux(e,t){let{isShowNull:r,isShowUndefined:i,isShowRedBlackNIL:s}=t,o=[["\u2500"],1,0,0];if(e===null&&!r)return o;if(e===void 0&&!i)return o;if(e!=null&&isNaN(this.extractor(e.key))&&!s)return o;if(e!=null){let a=e.key,u=isNaN(this.extractor(a))?"S":this.extractor(a).toString(),f=u.length;return l(u,f,this._displayAux(e.left,t),this._displayAux(e.right,t))}else{let a=e===void 0?"U":"N",u=a.length;return l(a,u,[[""],1,0,0],[[""],1,0,0])}function l(a,u,f,g){let[N,y,V,E]=f,[K,p,c,m]=g,b=" ".repeat(Math.max(0,E+1))+"_".repeat(Math.max(0,y-E-1))+a+"_".repeat(Math.max(0,m))+" ".repeat(Math.max(0,p-m)),_=(V>0?" ".repeat(E)+"/"+" ".repeat(y-E-1):" ".repeat(y))+" ".repeat(u)+(c>0?" ".repeat(m)+"\\"+" ".repeat(p-m-1):" ".repeat(p)),T=[b,_];for(let x=0;x<Math.max(V,c);x++){let v=x<V?N[x]:" ".repeat(y),ae=x<c?K[x]:" ".repeat(p);T.push(v+" ".repeat(u)+ae)}return[T,y+u+p,Math.max(V,c)+2,y+Math.floor(u/2)]}}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:r,value:i}=t,s=this.createNode(r,i);return s&&(t.key=e.key,t.value=e.value,e.key=s.key,e.value=s.value),t}}_replaceNode(e,t){return e.parent&&(e.parent.left===e?e.parent.left=t:e.parent.right===e&&(e.parent.right=t)),t.left=e.left,t.right=e.right,t.parent=e.parent,this.root===e&&(this._root=t),t}_addTo(e,t){if(this.isNotNodeInstance(t)&&(t=this.getNode(t)),t)return t.left===void 0?(t.left=e,e&&(this._size=this.size+1),t.left):t.right===void 0?(t.right=e,e&&(this._size=this.size+1),t.right):void 0}_setRoot(e){e&&(e.parent=void 0),this._root=e}};var S=class extends O{constructor(e,t){super(e,t);h(this,"parent");h(this,"_left");h(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}},W=class d extends ne{constructor(e,t){super([],t);h(this,"_root");h(this,"_variant","MIN");if(t){let{variant:r}=t;r&&(this._variant=r)}this._root=void 0,e&&this.addMany(e)}get root(){return this._root}get variant(){return this._variant}createNode(e,t){return new S(e,t)}createTree(e){return new d([],w({iterationType:this.iterationType,variant:this.variant},e))}isNode(e){return e instanceof S}exemplarToNode(e,t){let r;if(e!=null){if(this.isNode(e))r=e;else if(this.isEntry(e)){let[i,s]=e;if(i==null)return;r=this.createNode(i,s)}else if(this.isNotNodeInstance(e))r=this.createNode(e,t);else return;return r}}add(e,t){let r=this.exemplarToNode(e,t);if(r===void 0)return;if(this.root===void 0)return this._setRoot(r),this._size++,this.root;let i=this.root;for(;i!==void 0;){if(this._compare(i.key,r.key)==="eq")return this._replaceNode(i,r),r;if(this._compare(i.key,r.key)==="gt"){if(i.left===void 0)return i.left=r,r.parent=i,this._size++,r;i=i.left}else{if(i.right===void 0)return i.right=r,r.parent=i,this._size++,r;i=i.right}}}addMany(e,t,r=!0,i=this.iterationType){let s=[],o;if(t&&(o=t[Symbol.iterator]()),!r){for(let N of e){let y=o==null?void 0:o.next().value,V=this.add(N,y);s.push(V)}return s}let l=[],a=N=>N==null?!1:!(this.isEntry(N)&&(N[0]===void 0||N[0]===null));for(let N of e)a(N)&&l.push(N);let u=[];u=l.sort((N,y)=>{let V,E;return this.isEntry(N)?V=this.extractor(N[0]):this.isRealNode(N)?V=this.extractor(N.key):V=this.extractor(N),this.isEntry(y)?E=this.extractor(y[0]):this.isRealNode(y)?E=this.extractor(y.key):E=this.extractor(y),V-E});let f=N=>{if(N.length===0)return;let y=Math.floor((N.length-1)/2),V=this.add(N[y]);s.push(V),f(N.slice(0,y)),f(N.slice(y+1))},g=()=>{let y=[[0,u.length-1]];for(;y.length>0;){let V=y.pop();if(V){let[E,K]=V;if(E<=K){let p=E+Math.floor((K-E)/2),c=this.add(u[p]);s.push(c),y.push([p+1,K]),y.push([E,p-1])}}}};return i==="RECURSIVE"?f(u):g(),s}lastKey(e=this.root){let t=this.ensureNode(e);if(t){if(this._variant==="MIN")for(;t.right!==void 0;)t=t.right;else for(;t.left!==void 0;)t=t.left;return t.key}}getNodeByKey(e,t="ITERATIVE"){if(this.root)if(t==="RECURSIVE"){let r=i=>{if(i.key===e)return i;if(!(!i.left&&!i.right)){if(this._compare(i.key,e)==="gt"&&i.left)return r(i.left);if(this._compare(i.key,e)==="lt"&&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(this._compare(i.key,e)==="eq")return i;this._compare(i.key,e)==="gt"&&i.left&&r.push(i.left),this._compare(i.key,e)==="lt"&&i.right&&r.push(i.right)}}}}isNotNodeInstance(e){return!(e instanceof S)}ensureNode(e,t="ITERATIVE"){return this.isNotNodeInstance(e)?this.getNodeByKey(e,t):e}getNodes(e,t=this._defaultOneParamCallback,r=!1,i=this.root,s=this.iterationType){if(i=this.ensureNode(i),!i)return[];let o=[];if(s==="RECURSIVE"){let l=a=>{t(a)===e&&(o.push(a),r)||!a.left&&!a.right||(t===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(i)}else{let l=new C([i]);for(;l.size>0;){let a=l.shift();if(a){if(t(a)===e&&(o.push(a),r))return o;t===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,t="lt",r=this.root,i=this.iterationType){r=this.ensureNode(r);let s=[];if(!r||!this.root)return s;let o=r.key;if(i==="RECURSIVE"){let l=a=>{this._compare(a.key,o)===t&&s.push(e(a)),!(!a.left&&!a.right)&&(a.left&&this._compare(a.left.key,o)===t&&l(a.left),a.right&&this._compare(a.right.key,o)===t&&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)===t&&s.push(e(a)),a.left&&this._compare(a.left.key,o)===t&&l.push(a.left),a.right&&this._compare(a.right.key,o)===t&&l.push(a.right))}return s}}perfectlyBalance(e=this.iterationType){let t=this.dfs(i=>i,"in"),r=t.length;if(this.clear(),t.length<1)return!1;if(e==="RECURSIVE"){let i=(s,o)=>{if(s>o)return;let l=s+Math.floor((o-s)/2),a=t[l];this.add([a.key,a.value]),i(s,l-1),i(l+1,o)};return i(0,r-1),!0}else{let i=[[0,r-1]];for(;i.length>0;){let s=i.pop();if(s){let[o,l]=s;if(o<=l){let a=o+Math.floor((l-o)/2),u=t[a];this.add([u.key,u.value]),i.push([a+1,l]),i.push([o,a-1])}}}return!0}}isAVLBalanced(e=this.iterationType){var r,i;if(!this.root)return!0;let t=!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&&(t=!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 u=o.left&&(r=a.get(o.left))!=null?r:-1,f=o.right&&(i=a.get(o.right))!=null?i:-1;if(Math.abs(u-f)>1)return!1;a.set(o,1+Math.max(u,f)),l=o,o=void 0}}else o=o.right}return t}_setRoot(e){e&&(e.parent=void 0),this._root=e}_compare(e,t){let r=this.extractor(e),i=this.extractor(t),s=this.variant==="MIN"?r-i:i-r;return s>0?"gt":s<0?"lt":"eq"}};var je=class{constructor({frequency:n=0,max:e}){h(this,"_freq");h(this,"_max");h(this,"_freqMap");h(this,"_msb");h(this,"_negativeCount");this._freq=n,this._max=e,this._freqMap={0:0},this._msb=Ke(e),this._negativeCount=n<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(n){return this._checkIndex(n),this._readSingle(n)}update(n,e){this._checkIndex(n);let t=this._readSingle(n);this._update(n,e),this._updateNegativeCount(t,t+e)}writeSingle(n,e){this._checkIndex(n),this._writeSingle(n,e)}read(n){if(!Number.isInteger(n))throw new Error("Invalid count");return this._read(Math.max(Math.min(n,this.max),0))}lowerBound(n){if(this.negativeCount>0)throw new Error("Sequence is not non-descending");return this._binarySearch(n,(e,t)=>e<t)}upperBound(n){if(this.negativeCount>0)throw new Error("Must not be descending");return this._binarySearch(n,(e,t)=>e<=t)}getPrefixSum(n){this._checkIndex(n),n++;let e=0;for(;n>0;)e+=this._getFrequency(n),n-=n&-n;return e}_getFrequency(n){return n in this.freqMap?this.freqMap[n]:this.freq*(n&-n)}_updateFrequency(n,e){this.freqMap[n]=this._getFrequency(n)+e}_checkIndex(n){if(!Number.isInteger(n))throw new Error("Invalid index: Index must be an integer.");if(n<0||n>=this.max)throw new Error("Index out of range: Index must be within the range [0, this.max).")}_readSingle(n){n=n+1;let e=this._getFrequency(n),t=n-(n&-n);for(n--;n!==t;)e-=this._getFrequency(n),n-=n&-n;return e}_updateNegativeCount(n,e){n<0&&e>=0?this._negativeCount--:n>=0&&e<0&&this._negativeCount++}_update(n,e){for(n=n+1;n<=this.max;)this._updateFrequency(n,e),n+=n&-n}_writeSingle(n,e){let t=this._readSingle(n);this._update(n,e-t),this._updateNegativeCount(t,e)}_read(n){let e=n,t=0;for(;e;)t+=this._getFrequency(e),e-=e&-e;return t}_binarySearch(n,e){let t=0,r=this.msb<<1,i=n;for(;r>t+1;){let s=t+r>>1,o=this._getFrequency(s);s<=this.max&&e(o,i)?(i-=o,t=s):r=s}return t}};var Y=class{constructor(n,e,t,r){h(this,"start",0);h(this,"end",0);h(this,"value");h(this,"sum",0);h(this,"left");h(this,"right");this.start=n,this.end=e,this.sum=t,this.value=r||void 0}},qe=class{constructor(n,e,t){h(this,"_values",[]);h(this,"_start",0);h(this,"_end");h(this,"_root");e=e||0,t=t||n.length-1,this._values=n,this._start=e,this._end=t,n.length>0?this._root=this.build(e,t):(this._root=void 0,this._values=[])}get values(){return this._values}get start(){return this._start}get end(){return this._end}get root(){return this._root}build(n,e){if(n>e)return new Y(n,e,0);if(n===e)return new Y(n,e,this._values[n]);let t=n+Math.floor((e-n)/2),r=this.build(n,t),i=this.build(t+1,e),s=new Y(n,e,r.sum+i.sum);return s.left=r,s.right=i,s}updateNode(n,e,t){let r=this.root||void 0;if(!r)return;let i=(s,o,l,a)=>{if(s.start===s.end&&s.start===o){s.sum=l,a!==void 0&&(s.value=a);return}let u=s.start+Math.floor((s.end-s.start)/2);o<=u?s.left&&i(s.left,o,l,a):s.right&&i(s.right,o,l,a),s.left&&s.right&&(s.sum=s.left.sum+s.right.sum)};i(r,n,e,t)}querySumByRange(n,e){let t=this.root||void 0;if(!t)return 0;if(n<0||e>=this.values.length||n>e)return NaN;let r=(i,s,o)=>{if(s<=i.start&&o>=i.end)return i.sum;let l=i.start+Math.floor((i.end-i.start)/2);if(o<=l)return i.left?r(i.left,s,o):NaN;if(s>l)return i.right?r(i.right,s,o):NaN;{let a=0,u=0;return i.left&&(a=r(i.left,s,l)),i.right&&(u=r(i.right,l+1,o)),a+u}};return r(t,n,e)}};var P=class extends S{constructor(e,t){super(e,t);h(this,"height");this.height=0}},se=class d extends W{constructor(n,e){super([],e),n&&super.addMany(n)}createNode(n,e){return new P(n,e)}createTree(n){return new d([],w({iterationType:this.iterationType,variant:this.variant},n))}isNode(n){return n instanceof P}isNotNodeInstance(n){return!(n instanceof P)}add(n,e){if(n===null)return;let t=super.add(n,e);return t&&this._balancePath(t),t}delete(n,e=this._defaultOneParamCallback){n instanceof P&&(e=r=>r);let t=super.delete(n,e);for(let{needBalanced:r}of t)r&&this._balancePath(r);return t}_swapProperties(n,e){if(n=this.ensureNode(n),e=this.ensureNode(e),n&&e){let{key:t,value:r,height:i}=e,s=this.createNode(t,r);return s&&(s.height=i,e.key=n.key,e.value=n.value,e.height=n.height,n.key=s.key,n.value=s.value,n.height=s.height),e}}_balanceFactor(n){return n.right?n.left?n.right.height-n.left.height:+n.height:-n.height}_updateHeight(n){if(!n.left&&!n.right)n.height=0;else if(n.left)n.right?n.height=1+Math.max(n.right.height,n.left.height):n.height=1+n.left.height;else{let e=n.right?n.right.height:0;n.height=1+e}}_balancePath(n){let e=this.getPathToRoot(n,!1);for(let t=0;t<e.length;t++){let r=e[t];switch(this._updateHeight(r),this._balanceFactor(r)){case-2:r&&r.left&&(this._balanceFactor(r.left)<=0?this._balanceLL(r):this._balanceLR(r));break;case 2:r&&r.right&&(this._balanceFactor(r.right)>=0?this._balanceRR(r):this._balanceRL(r))}}}_balanceLL(n){let e=n.parent,t=n.left;n.parent=t,t&&t.right&&(t.right.parent=n),t&&(t.parent=e),n===this.root?t&&this._setRoot(t):(e==null?void 0:e.left)===n?e.left=t:e&&(e.right=t),t&&(n.left=t.right,t.right=n),this._updateHeight(n),t&&this._updateHeight(t)}_balanceLR(n){let e=n.parent,t=n.left,r;t&&(r=t.right),n&&(n.parent=r),t&&(t.parent=r),r&&(r.left&&(r.left.parent=t),r.right&&(r.right.parent=n),r.parent=e),n===this.root?r&&this._setRoot(r):e&&(e.left===n?e.left=r:e.right=r),r&&(n.left=r.right,t&&(t.right=r.left),r.left=t,r.right=n),this._updateHeight(n),t&&this._updateHeight(t),r&&this._updateHeight(r)}_balanceRR(n){let e=n.parent,t=n.right;n.parent=t,t&&(t.left&&(t.left.parent=n),t.parent=e),n===this.root?t&&this._setRoot(t):e&&(e.left===n?e.left=t:e.right=t),t&&(n.right=t.left,t.left=n),this._updateHeight(n),t&&this._updateHeight(t)}_balanceRL(n){let e=n.parent,t=n.right,r;t&&(r=t.left),n.parent=r,t&&(t.parent=r),r&&(r.left&&(r.left.parent=n),r.right&&(r.right.parent=t),r.parent=e),n===this.root?r&&this._setRoot(r):e&&(e.left===n?e.left=r:e.right=r),r&&(n.right=r.left),t&&r&&(t.left=r.right),r&&(r.left=n),r&&(r.right=t),this._updateHeight(n),t&&this._updateHeight(t),r&&this._updateHeight(r)}_replaceNode(n,e){return e.height=n.height,super._replaceNode(n,e)}};var q=class extends S{constructor(e,t,r=0){super(e,t);h(this,"color");this.color=r}},Ue=class d extends W{constructor(e,t){super([],t);h(this,"Sentinel",new q(NaN));h(this,"_root");h(this,"_size",0);this._root=this.Sentinel,e&&super.addMany(e)}get root(){return this._root}get size(){return this._size}createNode(e,t,r=0){return new q(e,t,r)}createTree(e){return new d([],w({iterationType:this.iterationType,variant:this.variant},e))}isNode(e){return e instanceof q}isNotNodeInstance(e){return!(e instanceof q)}exemplarToNode(e,t){let r;if(e!=null){if(this.isNode(e))r=e;else if(this.isEntry(e)){let[i,s]=e;if(i==null)return;r=this.createNode(i,s,1)}else if(this.isNotNodeInstance(e))r=this.createNode(e,t,1);else return;return r}}add(e,t){let r=this.exemplarToNode(e,t);if(r===void 0)return;r.left=this.Sentinel,r.right=this.Sentinel;let i,s=this.root;for(;s!==this.Sentinel;)if(i=s,s)if(r.key<s.key)s=s.left;else if(r.key>s.key)s=s==null?void 0:s.right;else{r!==s&&this._replaceNode(s,r);return}if(r.parent=i,i===void 0?this._setRoot(r):r.key<i.key?i.left=r:i.right=r,r.parent===void 0){r.color=0,this._size++;return}if(r.parent.parent===void 0){this._size++;return}this._fixInsert(r),this._size++}delete(e,t=this._defaultOneParamCallback){let r=[];return e===null||(s=>{let o=this.Sentinel,l,a;for(;s!==this.Sentinel;)s&&t(s)===e&&(o=s),s&&e&&t(s)<=e?s=s.right:s=s==null?void 0:s.left;if(o===this.Sentinel){this._size--;return}a=o;let u=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),u=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),u===0&&this._fixDelete(l),this._size--})(this.root),r}isRealNode(e){return e===this.Sentinel||e===void 0?!1:e instanceof q}getNode(e,t=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var s;return e instanceof O&&(t=o=>o),r=this.ensureNode(r),(s=this.getNodes(e,t,!0,r,i)[0])!=null?s:void 0}getPredecessor(e){if(this.isRealNode(e.left))return this.getRightMost(e.left);let t=e.parent;for(;this.isRealNode(t)&&e===t.left;)e=t,t=t.parent;return t}clear(){this._root=this.Sentinel,this._size=0}_setRoot(e){e&&(e.parent=void 0),this._root=e}_leftRotate(e){if(e.right){let t=e.right;e.right=t.left,t.left!==this.Sentinel&&t.left&&(t.left.parent=e),t.parent=e.parent,e.parent===void 0?this._setRoot(t):e===e.parent.left?e.parent.left=t:e.parent.right=t,t.left=e,e.parent=t}}_rightRotate(e){if(e.left){let t=e.left;e.left=t.right,t.right!==this.Sentinel&&t.right&&(t.right.parent=e),t.parent=e.parent,e.parent===void 0?this._setRoot(t):e===e.parent.right?e.parent.right=t:e.parent.left=t,t.right=e,e.parent=t}}_fixDelete(e){let t;for(;e!==this.root&&e.color===0;)e.parent&&e===e.parent.left?(t=e.parent.right,t.color===1&&(t.color=0,e.parent.color=1,this._leftRotate(e.parent),t=e.parent.right),t.left!==void 0&&t.left.color===0&&t.right&&t.right.color===0?(t.color=1,e=e.parent):(t.right&&t.right.color===0&&(t.left&&(t.left.color=0),t.color=1,this._rightRotate(t),t=e.parent.right),t&&(t.color=e.parent.color),e.parent.color=0,t&&t.right&&(t.right.color=0),this._leftRotate(e.parent),e=this.root)):(t=e.parent.left,t.color===1&&(t.color=0,e.parent.color=1,this._rightRotate(e.parent),t=e.parent.left),t&&t.right&&t.right.color===0&&t.right.color===0?(t.color=1,e=e.parent):(t&&t.left&&t.left.color===0&&(t.right&&(t.right.color=0),t.color=1,this._leftRotate(t),t=e.parent.left),t&&(t.color=e.parent.color),e.parent.color=0,t&&t.left&&(t.left.color=0),this._rightRotate(e.parent),e=this.root));e.color=0}_rbTransplant(e,t){e.parent===void 0?this._setRoot(t):e===e.parent.left?e.parent.left=t:e.parent.right=t,t.parent=e.parent}_fixInsert(e){let t;for(;e.parent&&e.parent.color===1&&(e.parent.parent&&e.parent===e.parent.parent.right?(t=e.parent.parent.left,t&&t.color===1?(t.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))):(t=e.parent.parent.right,t&&t.color===1?(t.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.right&&(e=e.parent,this._leftRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._rightRotate(e.parent.parent))),e!==this.root););this.root.color=0}_replaceNode(e,t){return t.color=e.color,super._replaceNode(e,t)}};var J=class extends P{constructor(e,t,r=1){super(e,t);h(this,"count");this.count=r}},Ge=class d extends se{constructor(e,t){super([],t);h(this,"_count",0);e&&this.addMany(e)}get count(){let e=0;return this.subTreeTraverse(t=>e+=t.count),e}createNode(e,t,r){return new J(e,t,r)}createTree(e){return new d([],w({iterationType:this.iterationType,variant:this.variant},e))}isNode(e){return e instanceof J}isNotNodeInstance(e){return!(e instanceof J)}exemplarToNode(e,t,r=1){let i;if(e!=null){if(this.isNode(e))i=e;else if(this.isEntry(e)){let[s,o]=e;if(s==null)return;i=this.createNode(s,o,r)}else if(this.isNotNodeInstance(e))i=this.createNode(e,t,r);else return;return i}}add(e,t,r=1){let i=this.exemplarToNode(e,t,r);if(i===void 0)return;let s=(i==null?void 0:i.count)||0,o=super.add(i);return o&&(this._count+=s),o}addMany(e){return super.addMany(e)}perfectlyBalance(e=this.iterationType){let t=this.dfs(i=>i,"in"),r=t.length;if(t.length<1)return!1;if(this.clear(),e==="RECURSIVE"){let i=(s,o)=>{if(s>o)return;let l=s+Math.floor((o-s)/2),a=t[l];this.add(a.key,a.value,a.count),i(s,l-1),i(l+1,o)};return i(0,r-1),!0}else{let i=[[0,r-1]];for(;i.length>0;){let s=i.pop();if(s){let[o,l]=s;if(o<=l){let a=o+Math.floor((l-o)/2),u=t[a];this.add(u.key,u.value,u.count),i.push([a+1,l]),i.push([o,a-1])}}}return!0}}delete(e,t=this._defaultOneParamCallback,r=!1){var u;let i=[];if(!this.root)return i;let s=(u=this.getNode(e,t))!=null?u:void 0;if(!s)return i;let o=s!=null&&s.parent?s.parent:void 0,l,a=s;if(s.count>1&&!r)s.count--,this._count--;else{if(s.left){let f=s.left?this.getRightMost(s.left):void 0;if(f){let g=f.parent;a=this._swapProperties(s,f),g&&(g.right===f?g.right=f.left:g.left=f.left,l=g)}}else if(!o)s.right!==void 0&&this._setRoot(s.right);else{let{familyPosition:f}=s;f==="LEFT"||f==="ROOT_LEFT"?o.left=s.right:(f==="RIGHT"||f==="ROOT_RIGHT")&&(o.right=s.right),l=o}this._size=this.size-1,a&&(this._count-=a.count)}return i.push({deleted:a,needBalanced:l}),l&&this._balancePath(l),i}clear(){super.clear(),this._count=0}clone(){let e=this.createTree();return this.bfs(t=>e.add(t.key,t.value,t.count)),e}_addTo(e,t){if(t=this.ensureNode(t),t)return t.left===void 0?(t.left=e,e!==void 0&&(this._size=this.size+1,this._count+=e.count),t.left):t.right===void 0?(t.right=e,e!==void 0&&(this._size=this.size+1,this._count+=e.count),t.right):void 0}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:r,value:i,count:s,height:o}=t,l=this.createNode(r,i,s);return l&&(l.height=o,t.key=e.key,t.value=e.value,t.count=e.count,t.height=e.height,e.key=l.key,e.value=l.value,e.count=l.count,e.height=l.height),t}}_replaceNode(e,t){return t.count=e.count+t.count,super._replaceNode(e,t)}};var We=class d{constructor(n,e,t){h(this,"key");h(this,"value");h(this,"children");this.key=n,this.value=e||void 0,this.children=t||[]}addChildren(n){this.children||(this.children=[]),n instanceof d?this.children.push(n):this.children=this.children.concat(n)}getHeight(){let n=0;if(this){let e=(t,r)=>{r>n&&(n=r);let{children:i}=t;if(i)for(let s=0,o=i.length;s<o;s++)e(i[s],r+1)};e(this,0)}return n}};var Qe=class{constructor(n){h(this,"_matrix");let{row:e,col:t,initialVal:r}=n;this._matrix=new Array(e).fill(void 0).map(()=>new Array(t).fill(r||0))}toArray(){return this._matrix}};var Z=class d{constructor(n=0,e=0,t=1){this.x=n;this.y=e;this.w=t}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 d(Math.round(this.x),Math.round(this.y))}static add(n,e){return new d(n.x+e.x,n.y+e.y)}static subtract(n,e){return new d(n.x-e.x,n.y-e.y)}static subtractValue(n,e){return new d(n.x-e,n.y-e)}static multiply(n,e){return new d(n.x*e,n.y*e)}static divide(n,e){return new d(n.x/e,n.y/e)}static equals(n,e){return n.x===e.x&&n.y===e.y}static equalsRounded(n,e,t=12){let r=d.abs(d.subtract(n,e));return r.x<t&&r.y<t}static normalize(n){let e=n.length;return e>2220446049250313e-31?d.divide(n,e):n}static truncate(n,e){return n.length>e?d.multiply(d.normalize(n),e):n}static perp(n){return new d(-n.y,n.x)}static reverse(n){return new d(-n.x,-n.y)}static abs(n){return new d(Math.abs(n.x),Math.abs(n.y))}static dot(n,e){return n.x*e.x+n.y*e.y}static distance(n,e){let t=e.y-n.y,r=e.x-n.x;return Math.sqrt(t*t+r*r)}static distanceSq(n,e){let t=e.y-n.y,r=e.x-n.x;return t*t+r*r}static sign(n,e){return n.y*e.x>n.x*e.y?-1:1}static angle(n){let e=new d(0,-1),t=Math.acos(d.dot(n,e)/(n.length*e.length));return d.sign(n,e)===1?Math.PI*2-t:t}static random(n,e){let t=Math.floor(Math.random()*n-n/2),r=Math.floor(Math.random()*e-e/2);return new d(t,r)}zero(){this.x=0,this.y=0}};var Xe=class d{constructor(n){h(this,"_matrix");typeof n=="undefined"?this._matrix=d.identity:n instanceof Z?(this._matrix=d.identity,this._matrix[0][0]=n.x,this._matrix[1][0]=n.y,this._matrix[2][0]=n.w):this._matrix=n}static get empty(){return[[],[],[]]}static get identity(){return[[1,0,0],[0,1,0],[0,0,1]]}get m(){return this._matrix}static add(n,e){let t=d.empty;for(let r=0;r<3;r++)for(let i=0;i<3;i++)t[r][i]=n.m[r][i]+e.m[r][i];return new d(t)}static subtract(n,e){let t=d.empty;for(let r=0;r<3;r++)for(let i=0;i<3;i++)t[r][i]=n.m[r][i]-e.m[r][i];return new d(t)}static multiply(n,e){let t=d.empty;for(let r=0;r<3;r++)for(let i=0;i<3;i++){t[r][i]=0;for(let s=0;s<3;s++)t[r][i]+=n.m[r][s]*e.m[s][i]}return new d(t)}static multiplyByValue(n,e){let t=d.empty;for(let r=0;r<3;r++)for(let i=0;i<3;i++)t[r][i]=n.m[r][i]*e;return new d(t)}static multiplyByVector(n,e){return d.multiply(n,new d(e)).toVector()}static view(n,e){let r=n/2,i=e/2,s=Math.cos(Math.PI);return new d([[1,0,r],[0,s*1,i],[0,0,1]])}static scale(n){return d.multiplyByValue(new d,n)}static rotate(n){let e=Math.cos(n),t=Math.sin(n);return new d([[e,-t,0],[t,e,0],[0,0,1]])}static translate(n){return new d([[1,0,n.x],[0,1,n.y],[0,0,n.w]])}toVector(){return new Z(this._matrix[0][0],this._matrix[1][0])}};var ye=class d{constructor(n,e){h(this,"direction");h(this,"turn");this.direction=n,this.turn=()=>new d(e[n],e)}},Ye=class{constructor({matrix:n,turning:e,onMove:t,init:{cur:r,charDir:i,VISITED:s}}){h(this,"onMove");h(this,"_matrix");h(this,"_cur");h(this,"_character");h(this,"_VISITED");this._matrix=n,this._cur=r,this._character=new ye(i,e),this.onMove=t,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:n}=this._character;this.check(n)?this.move(n):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(n){let e,t,r=this._matrix,[i,s]=this._cur;switch(n){case"up":if(t=r[i-1],!t)return!1;e=t[s];break;case"right":e=r[i][s+1];break;case"down":if(t=r[i+1],!t)return!1;e=t[s];break;case"left":e=r[i][s-1];break}return e!==void 0&&e!==this._VISITED}move(n){switch(n){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,t]=this._cur;this._matrix[e][t]=this._VISITED,this.onMove&&this.onMove(this._cur)}};var oe=class{constructor(n){h(this,"key");h(this,"children");h(this,"isEnd");this.key=n,this.isEnd=!1,this.children=new Map}},Je=class d extends k{constructor(e,t=!0){super();h(this,"_size");h(this,"_caseSensitive");h(this,"_root");if(this._root=new oe(""),this._caseSensitive=t,this._size=0,e)for(let r of e)this.add(r)}get size(){return this._size}get caseSensitive(){return this._caseSensitive}get root(){return this._root}add(e){e=this._caseProcess(e);let t=this.root,r=!1;for(let i of e){let s=t.children.get(i);s||(s=new oe(i),t.children.set(i,s)),t=s}return t.isEnd||(r=!0,t.isEnd=!0,this._size++),r}has(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let i=t.children.get(r);if(!i)return!1;t=i}return t.isEnd}delete(e){e=this._caseProcess(e);let t=!1,r=(i,s)=>{let o=e[s],l=i.children.get(o);return l?s===e.length-1?l.isEnd?(l.children.size>0?l.isEnd=!1:i.children.delete(o),t=!0,!0):!1:r(l,s+1)&&!i.isEnd&&l.children.size===0?(i.children.delete(o),!0):!1:!1};return r(this.root,0),t&&this._size--,t}getHeight(){let e=this.root,t=0;if(e){let r=(i,s)=>{s>t&&(t=s);let{children:o}=i;if(o)for(let l of o.entries())r(l[1],s+1)};r(e,0)}return t}hasPurePrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let i=t.children.get(r);if(!i)return!1;t=i}return!t.isEnd}hasPrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let i=t.children.get(r);if(!i)return!1;t=i}return!0}hasCommonPrefix(e){e=this._caseProcess(e);let t="",r=i=>{if(t+=i.key,t!==e&&!i.isEnd)if(i&&i.children&&i.children.size===1)r(Array.from(i.children.values())[0]);else return};return r(this.root),t===e}getLongestCommonPrefix(){let e="",t=r=>{if(e+=r.key,!r.isEnd)if(r&&r.children&&r.children.size===1)t(Array.from(r.children.values())[0]);else return};return t(this.root),e}getWords(e="",t=Number.MAX_SAFE_INTEGER,r=!1){e=this._caseProcess(e);let i=[],s=0;function o(a,u){for(let f of a.children.keys()){let g=a.children.get(f);g!==void 0&&o(g,u.concat(f))}if(a.isEnd){if(s>t-1)return;i.push(u),s++}}let l=this.root;if(e)for(let a of e){let u=l.children.get(a);u&&(l=u)}return(r||l!==this.root)&&o(l,e),i}filter(e,t){let r=[],i=0;for(let s of this)e.call(t,s,i,this)&&r.push(s),i++;return r}map(e,t){let r=new d,i=0;for(let s of this)r.add(e.call(t,s,i,this)),i++;return r}print(){console.log([...this])}*_getIterator(){function*e(t,r){t.isEnd&&(yield r);for(let[i,s]of t.children)yield*L(e(s,r+i))}yield*L(e(this.root,""))}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};return ot(ht);})();
4
+ `),(s=>{let[o,,,]=this._displayAux(s,r);for(let l of o)console.log(l)})(e)}*_getIterator(e=this.root){if(e)if(this.iterationType==="ITERATIVE"){let t=[],r=e;for(;r||t.length>0;){for(;r&&!isNaN(this.extractor(r.key));)t.push(r),r=r.left;r=t.pop(),r&&!isNaN(this.extractor(r.key))&&(yield[r.key,r.value],r=r.right)}}else e.left&&!isNaN(this.extractor(e.key))&&(yield*z(this[Symbol.iterator](e.left))),yield[e.key,e.value],e.right&&!isNaN(this.extractor(e.key))&&(yield*z(this[Symbol.iterator](e.right)))}_displayAux(e,t){let{isShowNull:r,isShowUndefined:i,isShowRedBlackNIL:s}=t,o=[["\u2500"],1,0,0];if(e===null&&!r)return o;if(e===void 0&&!i)return o;if(e!=null&&isNaN(this.extractor(e.key))&&!s)return o;if(e!=null){let a=e.key,d=isNaN(this.extractor(a))?"S":this.extractor(a).toString(),f=d.length;return l(d,f,this._displayAux(e.left,t),this._displayAux(e.right,t))}else{let a=e===void 0?"U":"N",d=a.length;return l(a,d,[[""],1,0,0],[[""],1,0,0])}function l(a,d,f,m){let[N,b,_,T]=f,[K,p,c,y]=m,g=" ".repeat(Math.max(0,T+1))+"_".repeat(Math.max(0,b-T-1))+a+"_".repeat(Math.max(0,y))+" ".repeat(Math.max(0,p-y)),V=(_>0?" ".repeat(T)+"/"+" ".repeat(b-T-1):" ".repeat(b))+" ".repeat(d)+(c>0?" ".repeat(y)+"\\"+" ".repeat(p-y-1):" ".repeat(p)),E=[g,V];for(let x=0;x<Math.max(_,c);x++){let v=x<_?N[x]:" ".repeat(b),q=x<c?K[x]:" ".repeat(p);E.push(v+" ".repeat(d)+q)}return[E,b+d+p,Math.max(_,c)+2,b+Math.floor(d/2)]}}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:r,value:i}=t,s=this.createNode(r,i);return s&&(t.key=e.key,t.value=e.value,e.key=s.key,e.value=s.value),t}}_replaceNode(e,t){return e.parent&&(e.parent.left===e?e.parent.left=t:e.parent.right===e&&(e.parent.right=t)),t.left=e.left,t.right=e.right,t.parent=e.parent,this.root===e&&(this._root=t),t}_addTo(e,t){if(this.isNotNodeInstance(t)&&(t=this.getNode(t)),t)return t.left===void 0?(t.left=e,e&&(this._size=this.size+1),t.left):t.right===void 0?(t.right=e,e&&(this._size=this.size+1),t.right):void 0}_setRoot(e){e&&(e.parent=void 0),this._root=e}};var L=class extends C{constructor(e,t){super(e,t);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}},W=class h extends se{constructor(e,t){super([],t);u(this,"_root");u(this,"_variant","MIN");if(t){let{variant:r}=t;r&&(this._variant=r)}this._root=void 0,e&&this.addMany(e)}get root(){return this._root}get variant(){return this._variant}createNode(e,t){return new L(e,t)}createTree(e){return new h([],w({iterationType:this.iterationType,variant:this.variant},e))}isNode(e){return e instanceof L}exemplarToNode(e,t){let r;if(e!=null){if(this.isNode(e))r=e;else if(this.isEntry(e)){let[i,s]=e;if(i==null)return;r=this.createNode(i,s)}else if(this.isNotNodeInstance(e))r=this.createNode(e,t);else return;return r}}add(e,t){let r=this.exemplarToNode(e,t);if(r===void 0)return;if(this.root===void 0)return this._setRoot(r),this._size++,this.root;let i=this.root;for(;i!==void 0;){if(this._compare(i.key,r.key)==="eq")return this._replaceNode(i,r),r;if(this._compare(i.key,r.key)==="gt"){if(i.left===void 0)return i.left=r,r.parent=i,this._size++,r;i=i.left}else{if(i.right===void 0)return i.right=r,r.parent=i,this._size++,r;i=i.right}}}addMany(e,t,r=!0,i=this.iterationType){let s=[],o;if(t&&(o=t[Symbol.iterator]()),!r){for(let N of e){let b=o==null?void 0:o.next().value,_=this.add(N,b);s.push(_)}return s}let l=[],a=N=>N==null?!1:!(this.isEntry(N)&&(N[0]===void 0||N[0]===null));for(let N of e)a(N)&&l.push(N);let d=[];d=l.sort((N,b)=>{let _,T;return this.isEntry(N)?_=this.extractor(N[0]):this.isRealNode(N)?_=this.extractor(N.key):_=this.extractor(N),this.isEntry(b)?T=this.extractor(b[0]):this.isRealNode(b)?T=this.extractor(b.key):T=this.extractor(b),_-T});let f=N=>{if(N.length===0)return;let b=Math.floor((N.length-1)/2),_=this.add(N[b]);s.push(_),f(N.slice(0,b)),f(N.slice(b+1))},m=()=>{let b=[[0,d.length-1]];for(;b.length>0;){let _=b.pop();if(_){let[T,K]=_;if(T<=K){let p=T+Math.floor((K-T)/2),c=this.add(d[p]);s.push(c),b.push([p+1,K]),b.push([T,p-1])}}}};return i==="RECURSIVE"?f(d):m(),s}lastKey(e=this.root){let t=this.ensureNode(e);if(t){if(this._variant==="MIN")for(;t.right!==void 0;)t=t.right;else for(;t.left!==void 0;)t=t.left;return t.key}}getNodeByKey(e,t="ITERATIVE"){if(this.root)if(t==="RECURSIVE"){let r=i=>{if(i.key===e)return i;if(!(!i.left&&!i.right)){if(this._compare(i.key,e)==="gt"&&i.left)return r(i.left);if(this._compare(i.key,e)==="lt"&&i.right)return r(i.right)}};return r(this.root)}else{let r=new B([this.root]);for(;r.size>0;){let i=r.shift();if(i){if(this._compare(i.key,e)==="eq")return i;this._compare(i.key,e)==="gt"&&i.left&&r.push(i.left),this._compare(i.key,e)==="lt"&&i.right&&r.push(i.right)}}}}isNotNodeInstance(e){return!(e instanceof L)}ensureNode(e,t="ITERATIVE"){return this.isNotNodeInstance(e)?this.getNodeByKey(e,t):e}getNodes(e,t=this._defaultOneParamCallback,r=!1,i=this.root,s=this.iterationType){if(i=this.ensureNode(i),!i)return[];let o=[];if(s==="RECURSIVE"){let l=a=>{t(a)===e&&(o.push(a),r)||!a.left&&!a.right||(t===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(i)}else{let l=new B([i]);for(;l.size>0;){let a=l.shift();if(a){if(t(a)===e&&(o.push(a),r))return o;t===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,t="lt",r=this.root,i=this.iterationType){r=this.ensureNode(r);let s=[];if(!r||!this.root)return s;let o=r.key;if(i==="RECURSIVE"){let l=a=>{this._compare(a.key,o)===t&&s.push(e(a)),!(!a.left&&!a.right)&&(a.left&&this._compare(a.left.key,o)===t&&l(a.left),a.right&&this._compare(a.right.key,o)===t&&l(a.right))};return l(this.root),s}else{let l=new B([this.root]);for(;l.size>0;){let a=l.shift();a&&(this._compare(a.key,o)===t&&s.push(e(a)),a.left&&this._compare(a.left.key,o)===t&&l.push(a.left),a.right&&this._compare(a.right.key,o)===t&&l.push(a.right))}return s}}perfectlyBalance(e=this.iterationType){let t=this.dfs(i=>i,"in"),r=t.length;if(this.clear(),t.length<1)return!1;if(e==="RECURSIVE"){let i=(s,o)=>{if(s>o)return;let l=s+Math.floor((o-s)/2),a=t[l];this.add([a.key,a.value]),i(s,l-1),i(l+1,o)};return i(0,r-1),!0}else{let i=[[0,r-1]];for(;i.length>0;){let s=i.pop();if(s){let[o,l]=s;if(o<=l){let a=o+Math.floor((l-o)/2),d=t[a];this.add([d.key,d.value]),i.push([a+1,l]),i.push([o,a-1])}}}return!0}}isAVLBalanced(e=this.iterationType){var r,i;if(!this.root)return!0;let t=!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&&(t=!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&&(r=a.get(o.left))!=null?r:-1,f=o.right&&(i=a.get(o.right))!=null?i:-1;if(Math.abs(d-f)>1)return!1;a.set(o,1+Math.max(d,f)),l=o,o=void 0}}else o=o.right}return t}_setRoot(e){e&&(e.parent=void 0),this._root=e}_compare(e,t){let r=this.extractor(e),i=this.extractor(t),s=this.variant==="MIN"?r-i:i-r;return s>0?"gt":s<0?"lt":"eq"}};var He=class{constructor({frequency:n=0,max:e}){u(this,"_freq");u(this,"_max");u(this,"_freqMap");u(this,"_msb");u(this,"_negativeCount");this._freq=n,this._max=e,this._freqMap={0:0},this._msb=Ke(e),this._negativeCount=n<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(n){return this._checkIndex(n),this._readSingle(n)}update(n,e){this._checkIndex(n);let t=this._readSingle(n);this._update(n,e),this._updateNegativeCount(t,t+e)}writeSingle(n,e){this._checkIndex(n),this._writeSingle(n,e)}read(n){if(!Number.isInteger(n))throw new Error("Invalid count");return this._read(Math.max(Math.min(n,this.max),0))}lowerBound(n){if(this.negativeCount>0)throw new Error("Sequence is not non-descending");return this._binarySearch(n,(e,t)=>e<t)}upperBound(n){if(this.negativeCount>0)throw new Error("Must not be descending");return this._binarySearch(n,(e,t)=>e<=t)}getPrefixSum(n){this._checkIndex(n),n++;let e=0;for(;n>0;)e+=this._getFrequency(n),n-=n&-n;return e}_getFrequency(n){return n in this.freqMap?this.freqMap[n]:this.freq*(n&-n)}_updateFrequency(n,e){this.freqMap[n]=this._getFrequency(n)+e}_checkIndex(n){if(!Number.isInteger(n))throw new Error("Invalid index: Index must be an integer.");if(n<0||n>=this.max)throw new Error("Index out of range: Index must be within the range [0, this.max).")}_readSingle(n){n=n+1;let e=this._getFrequency(n),t=n-(n&-n);for(n--;n!==t;)e-=this._getFrequency(n),n-=n&-n;return e}_updateNegativeCount(n,e){n<0&&e>=0?this._negativeCount--:n>=0&&e<0&&this._negativeCount++}_update(n,e){for(n=n+1;n<=this.max;)this._updateFrequency(n,e),n+=n&-n}_writeSingle(n,e){let t=this._readSingle(n);this._update(n,e-t),this._updateNegativeCount(t,e)}_read(n){let e=n,t=0;for(;e;)t+=this._getFrequency(e),e-=e&-e;return t}_binarySearch(n,e){let t=0,r=this.msb<<1,i=n;for(;r>t+1;){let s=t+r>>1,o=this._getFrequency(s);s<=this.max&&e(o,i)?(i-=o,t=s):r=s}return t}};var J=class{constructor(n,e,t,r){u(this,"start",0);u(this,"end",0);u(this,"value");u(this,"sum",0);u(this,"left");u(this,"right");this.start=n,this.end=e,this.sum=t,this.value=r||void 0}},Pe=class{constructor(n,e,t){u(this,"_values",[]);u(this,"_start",0);u(this,"_end");u(this,"_root");e=e||0,t=t||n.length-1,this._values=n,this._start=e,this._end=t,n.length>0?this._root=this.build(e,t):(this._root=void 0,this._values=[])}get values(){return this._values}get start(){return this._start}get end(){return this._end}get root(){return this._root}build(n,e){if(n>e)return new J(n,e,0);if(n===e)return new J(n,e,this._values[n]);let t=n+Math.floor((e-n)/2),r=this.build(n,t),i=this.build(t+1,e),s=new J(n,e,r.sum+i.sum);return s.left=r,s.right=i,s}updateNode(n,e,t){let r=this.root||void 0;if(!r)return;let i=(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&&i(s.left,o,l,a):s.right&&i(s.right,o,l,a),s.left&&s.right&&(s.sum=s.left.sum+s.right.sum)};i(r,n,e,t)}querySumByRange(n,e){let t=this.root||void 0;if(!t)return 0;if(n<0||e>=this.values.length||n>e)return NaN;let r=(i,s,o)=>{if(s<=i.start&&o>=i.end)return i.sum;let l=i.start+Math.floor((i.end-i.start)/2);if(o<=l)return i.left?r(i.left,s,o):NaN;if(s>l)return i.right?r(i.right,s,o):NaN;{let a=0,d=0;return i.left&&(a=r(i.left,s,l)),i.right&&(d=r(i.right,l+1,o)),a+d}};return r(t,n,e)}};var H=class extends L{constructor(e,t){super(e,t);u(this,"height");this.height=0}},oe=class h extends W{constructor(n,e){super([],e),n&&super.addMany(n)}createNode(n,e){return new H(n,e)}createTree(n){return new h([],w({iterationType:this.iterationType,variant:this.variant},n))}isNode(n){return n instanceof H}isNotNodeInstance(n){return!(n instanceof H)}add(n,e){if(n===null)return;let t=super.add(n,e);return t&&this._balancePath(t),t}delete(n,e=this._defaultOneParamCallback){n instanceof H&&(e=r=>r);let t=super.delete(n,e);for(let{needBalanced:r}of t)r&&this._balancePath(r);return t}_swapProperties(n,e){if(n=this.ensureNode(n),e=this.ensureNode(e),n&&e){let{key:t,value:r,height:i}=e,s=this.createNode(t,r);return s&&(s.height=i,e.key=n.key,e.value=n.value,e.height=n.height,n.key=s.key,n.value=s.value,n.height=s.height),e}}_balanceFactor(n){return n.right?n.left?n.right.height-n.left.height:+n.height:-n.height}_updateHeight(n){if(!n.left&&!n.right)n.height=0;else if(n.left)n.right?n.height=1+Math.max(n.right.height,n.left.height):n.height=1+n.left.height;else{let e=n.right?n.right.height:0;n.height=1+e}}_balancePath(n){let e=this.getPathToRoot(n,!1);for(let t=0;t<e.length;t++){let r=e[t];switch(this._updateHeight(r),this._balanceFactor(r)){case-2:r&&r.left&&(this._balanceFactor(r.left)<=0?this._balanceLL(r):this._balanceLR(r));break;case 2:r&&r.right&&(this._balanceFactor(r.right)>=0?this._balanceRR(r):this._balanceRL(r))}}}_balanceLL(n){let e=n.parent,t=n.left;n.parent=t,t&&t.right&&(t.right.parent=n),t&&(t.parent=e),n===this.root?t&&this._setRoot(t):(e==null?void 0:e.left)===n?e.left=t:e&&(e.right=t),t&&(n.left=t.right,t.right=n),this._updateHeight(n),t&&this._updateHeight(t)}_balanceLR(n){let e=n.parent,t=n.left,r;t&&(r=t.right),n&&(n.parent=r),t&&(t.parent=r),r&&(r.left&&(r.left.parent=t),r.right&&(r.right.parent=n),r.parent=e),n===this.root?r&&this._setRoot(r):e&&(e.left===n?e.left=r:e.right=r),r&&(n.left=r.right,t&&(t.right=r.left),r.left=t,r.right=n),this._updateHeight(n),t&&this._updateHeight(t),r&&this._updateHeight(r)}_balanceRR(n){let e=n.parent,t=n.right;n.parent=t,t&&(t.left&&(t.left.parent=n),t.parent=e),n===this.root?t&&this._setRoot(t):e&&(e.left===n?e.left=t:e.right=t),t&&(n.right=t.left,t.left=n),this._updateHeight(n),t&&this._updateHeight(t)}_balanceRL(n){let e=n.parent,t=n.right,r;t&&(r=t.left),n.parent=r,t&&(t.parent=r),r&&(r.left&&(r.left.parent=n),r.right&&(r.right.parent=t),r.parent=e),n===this.root?r&&this._setRoot(r):e&&(e.left===n?e.left=r:e.right=r),r&&(n.right=r.left),t&&r&&(t.left=r.right),r&&(r.left=n),r&&(r.right=t),this._updateHeight(n),t&&this._updateHeight(t),r&&this._updateHeight(r)}_replaceNode(n,e){return e.height=n.height,super._replaceNode(n,e)}};var P=class extends L{constructor(e,t,r=0){super(e,t);u(this,"color");this.color=r}},je=class h extends W{constructor(e,t){super([],t);u(this,"Sentinel",new P(NaN));u(this,"_root");u(this,"_size",0);this._root=this.Sentinel,e&&super.addMany(e)}get root(){return this._root}get size(){return this._size}createNode(e,t,r=0){return new P(e,t,r)}createTree(e){return new h([],w({iterationType:this.iterationType,variant:this.variant},e))}isNode(e){return e instanceof P}isNotNodeInstance(e){return!(e instanceof P)}exemplarToNode(e,t){let r;if(e!=null){if(this.isNode(e))r=e;else if(this.isEntry(e)){let[i,s]=e;if(i==null)return;r=this.createNode(i,s,1)}else if(this.isNotNodeInstance(e))r=this.createNode(e,t,1);else return;return r}}add(e,t){let r=this.exemplarToNode(e,t);if(r===void 0)return;r.left=this.Sentinel,r.right=this.Sentinel;let i,s=this.root;for(;s!==this.Sentinel;)if(i=s,s)if(r.key<s.key)s=s.left;else if(r.key>s.key)s=s==null?void 0:s.right;else{r!==s&&this._replaceNode(s,r);return}if(r.parent=i,i===void 0?this._setRoot(r):r.key<i.key?i.left=r:i.right=r,r.parent===void 0){r.color=0,this._size++;return}if(r.parent.parent===void 0){this._size++;return}this._fixInsert(r),this._size++}delete(e,t=this._defaultOneParamCallback){let r=[];return e===null||(s=>{let o=this.Sentinel,l,a;for(;s!==this.Sentinel;)s&&t(s)===e&&(o=s),s&&e&&t(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),r}isRealNode(e){return e===this.Sentinel||e===void 0?!1:e instanceof P}getNode(e,t=this._defaultOneParamCallback,r=this.root,i=this.iterationType){var s;return e instanceof P&&(t=o=>o),r=this.ensureNode(r),(s=this.getNodes(e,t,!0,r,i)[0])!=null?s:void 0}getPredecessor(e){if(this.isRealNode(e.left))return this.getRightMost(e.left);let t=e.parent;for(;this.isRealNode(t)&&e===t.left;)e=t,t=t.parent;return t}clear(){this._root=this.Sentinel,this._size=0}_setRoot(e){e&&(e.parent=void 0),this._root=e}_leftRotate(e){if(e.right){let t=e.right;e.right=t.left,t.left!==this.Sentinel&&t.left&&(t.left.parent=e),t.parent=e.parent,e.parent===void 0?this._setRoot(t):e===e.parent.left?e.parent.left=t:e.parent.right=t,t.left=e,e.parent=t}}_rightRotate(e){if(e.left){let t=e.left;e.left=t.right,t.right!==this.Sentinel&&t.right&&(t.right.parent=e),t.parent=e.parent,e.parent===void 0?this._setRoot(t):e===e.parent.right?e.parent.right=t:e.parent.left=t,t.right=e,e.parent=t}}_fixDelete(e){let t;for(;e!==this.root&&e.color===0;)e.parent&&e===e.parent.left?(t=e.parent.right,t.color===1&&(t.color=0,e.parent.color=1,this._leftRotate(e.parent),t=e.parent.right),t.left!==void 0&&t.left.color===0&&t.right&&t.right.color===0?(t.color=1,e=e.parent):(t.right&&t.right.color===0&&(t.left&&(t.left.color=0),t.color=1,this._rightRotate(t),t=e.parent.right),t&&(t.color=e.parent.color),e.parent.color=0,t&&t.right&&(t.right.color=0),this._leftRotate(e.parent),e=this.root)):(t=e.parent.left,t.color===1&&(t.color=0,e.parent.color=1,this._rightRotate(e.parent),t=e.parent.left),t&&t.right&&t.right.color===0&&t.right.color===0?(t.color=1,e=e.parent):(t&&t.left&&t.left.color===0&&(t.right&&(t.right.color=0),t.color=1,this._leftRotate(t),t=e.parent.left),t&&(t.color=e.parent.color),e.parent.color=0,t&&t.left&&(t.left.color=0),this._rightRotate(e.parent),e=this.root));e.color=0}_rbTransplant(e,t){e.parent===void 0?this._setRoot(t):e===e.parent.left?e.parent.left=t:e.parent.right=t,t.parent=e.parent}_fixInsert(e){let t;for(;e.parent&&e.parent.color===1&&(e.parent.parent&&e.parent===e.parent.parent.right?(t=e.parent.parent.left,t&&t.color===1?(t.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))):(t=e.parent.parent.right,t&&t.color===1?(t.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.right&&(e=e.parent,this._leftRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._rightRotate(e.parent.parent))),e!==this.root););this.root.color=0}_replaceNode(e,t){return t.color=e.color,super._replaceNode(e,t)}};var Z=class extends H{constructor(e,t,r=1){super(e,t);u(this,"count");this.count=r}},qe=class h extends oe{constructor(e,t){super([],t);u(this,"_count",0);e&&this.addMany(e)}get count(){let e=0;return this.subTreeTraverse(t=>e+=t.count),e}createNode(e,t,r){return new Z(e,t,r)}createTree(e){return new h([],w({iterationType:this.iterationType,variant:this.variant},e))}isNode(e){return e instanceof Z}isNotNodeInstance(e){return!(e instanceof Z)}exemplarToNode(e,t,r=1){let i;if(e!=null){if(this.isNode(e))i=e;else if(this.isEntry(e)){let[s,o]=e;if(s==null)return;i=this.createNode(s,o,r)}else if(this.isNotNodeInstance(e))i=this.createNode(e,t,r);else return;return i}}add(e,t,r=1){let i=this.exemplarToNode(e,t,r);if(i===void 0)return;let s=(i==null?void 0:i.count)||0,o=super.add(i);return o&&(this._count+=s),o}addMany(e){return super.addMany(e)}perfectlyBalance(e=this.iterationType){let t=this.dfs(i=>i,"in"),r=t.length;if(t.length<1)return!1;if(this.clear(),e==="RECURSIVE"){let i=(s,o)=>{if(s>o)return;let l=s+Math.floor((o-s)/2),a=t[l];this.add(a.key,a.value,a.count),i(s,l-1),i(l+1,o)};return i(0,r-1),!0}else{let i=[[0,r-1]];for(;i.length>0;){let s=i.pop();if(s){let[o,l]=s;if(o<=l){let a=o+Math.floor((l-o)/2),d=t[a];this.add(d.key,d.value,d.count),i.push([a+1,l]),i.push([o,a-1])}}}return!0}}delete(e,t=this._defaultOneParamCallback,r=!1){var d;let i=[];if(!this.root)return i;let s=(d=this.getNode(e,t))!=null?d:void 0;if(!s)return i;let o=s!=null&&s.parent?s.parent:void 0,l,a=s;if(s.count>1&&!r)s.count--,this._count--;else{if(s.left){let f=s.left?this.getRightMost(s.left):void 0;if(f){let m=f.parent;a=this._swapProperties(s,f),m&&(m.right===f?m.right=f.left:m.left=f.left,l=m)}}else if(!o)s.right!==void 0&&this._setRoot(s.right);else{let{familyPosition:f}=s;f==="LEFT"||f==="ROOT_LEFT"?o.left=s.right:(f==="RIGHT"||f==="ROOT_RIGHT")&&(o.right=s.right),l=o}this._size=this.size-1,a&&(this._count-=a.count)}return i.push({deleted:a,needBalanced:l}),l&&this._balancePath(l),i}clear(){super.clear(),this._count=0}clone(){let e=this.createTree();return this.bfs(t=>e.add(t.key,t.value,t.count)),e}_addTo(e,t){if(t=this.ensureNode(t),t)return t.left===void 0?(t.left=e,e!==void 0&&(this._size=this.size+1,this._count+=e.count),t.left):t.right===void 0?(t.right=e,e!==void 0&&(this._size=this.size+1,this._count+=e.count),t.right):void 0}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:r,value:i,count:s,height:o}=t,l=this.createNode(r,i,s);return l&&(l.height=o,t.key=e.key,t.value=e.value,t.count=e.count,t.height=e.height,e.key=l.key,e.value=l.value,e.count=l.count,e.height=l.height),t}}_replaceNode(e,t){return t.count=e.count+t.count,super._replaceNode(e,t)}};var Ue=class h{constructor(n,e,t){u(this,"key");u(this,"value");u(this,"children");this.key=n,this.value=e||void 0,this.children=t||[]}addChildren(n){this.children||(this.children=[]),n instanceof h?this.children.push(n):this.children=this.children.concat(n)}getHeight(){let n=0;if(this){let e=(t,r)=>{r>n&&(n=r);let{children:i}=t;if(i)for(let s=0,o=i.length;s<o;s++)e(i[s],r+1)};e(this,0)}return n}};var Q=class extends I{constructor(n,e){super(n,e)}};var Ge=class extends Q{constructor(n,e={comparator:(t,r)=>{if(typeof t=="number"&&typeof r=="number")return t-r;throw new Error("The a, b params of compare function must be number")}}){super(n,e)}};var We=class extends Q{constructor(n,e={comparator:(t,r)=>{if(typeof t=="number"&&typeof r=="number")return r-t;throw new Error("The a, b params of compare function must be number")}}){super(n,e)}};var Qe=class{constructor(n){u(this,"_matrix");let{row:e,col:t,initialVal:r}=n;this._matrix=new Array(e).fill(void 0).map(()=>new Array(t).fill(r||0))}toArray(){return this._matrix}};var $=class h{constructor(n=0,e=0,t=1){this.x=n;this.y=e;this.w=t}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(n,e){return new h(n.x+e.x,n.y+e.y)}static subtract(n,e){return new h(n.x-e.x,n.y-e.y)}static subtractValue(n,e){return new h(n.x-e,n.y-e)}static multiply(n,e){return new h(n.x*e,n.y*e)}static divide(n,e){return new h(n.x/e,n.y/e)}static equals(n,e){return n.x===e.x&&n.y===e.y}static equalsRounded(n,e,t=12){let r=h.abs(h.subtract(n,e));return r.x<t&&r.y<t}static normalize(n){let e=n.length;return e>2220446049250313e-31?h.divide(n,e):n}static truncate(n,e){return n.length>e?h.multiply(h.normalize(n),e):n}static perp(n){return new h(-n.y,n.x)}static reverse(n){return new h(-n.x,-n.y)}static abs(n){return new h(Math.abs(n.x),Math.abs(n.y))}static dot(n,e){return n.x*e.x+n.y*e.y}static distance(n,e){let t=e.y-n.y,r=e.x-n.x;return Math.sqrt(t*t+r*r)}static distanceSq(n,e){let t=e.y-n.y,r=e.x-n.x;return t*t+r*r}static sign(n,e){return n.y*e.x>n.x*e.y?-1:1}static angle(n){let e=new h(0,-1),t=Math.acos(h.dot(n,e)/(n.length*e.length));return h.sign(n,e)===1?Math.PI*2-t:t}static random(n,e){let t=Math.floor(Math.random()*n-n/2),r=Math.floor(Math.random()*e-e/2);return new h(t,r)}zero(){this.x=0,this.y=0}};var Xe=class h{constructor(n){u(this,"_matrix");typeof n=="undefined"?this._matrix=h.identity:n instanceof $?(this._matrix=h.identity,this._matrix[0][0]=n.x,this._matrix[1][0]=n.y,this._matrix[2][0]=n.w):this._matrix=n}static get empty(){return[[],[],[]]}static get identity(){return[[1,0,0],[0,1,0],[0,0,1]]}get m(){return this._matrix}static add(n,e){let t=h.empty;for(let r=0;r<3;r++)for(let i=0;i<3;i++)t[r][i]=n.m[r][i]+e.m[r][i];return new h(t)}static subtract(n,e){let t=h.empty;for(let r=0;r<3;r++)for(let i=0;i<3;i++)t[r][i]=n.m[r][i]-e.m[r][i];return new h(t)}static multiply(n,e){let t=h.empty;for(let r=0;r<3;r++)for(let i=0;i<3;i++){t[r][i]=0;for(let s=0;s<3;s++)t[r][i]+=n.m[r][s]*e.m[s][i]}return new h(t)}static multiplyByValue(n,e){let t=h.empty;for(let r=0;r<3;r++)for(let i=0;i<3;i++)t[r][i]=n.m[r][i]*e;return new h(t)}static multiplyByVector(n,e){return h.multiply(n,new h(e)).toVector()}static view(n,e){let r=n/2,i=e/2,s=Math.cos(Math.PI);return new h([[1,0,r],[0,s*1,i],[0,0,1]])}static scale(n){return h.multiplyByValue(new h,n)}static rotate(n){let e=Math.cos(n),t=Math.sin(n);return new h([[e,-t,0],[t,e,0],[0,0,1]])}static translate(n){return new h([[1,0,n.x],[0,1,n.y],[0,0,n.w]])}toVector(){return new $(this._matrix[0][0],this._matrix[1][0])}};var me=class h{constructor(n,e){u(this,"direction");u(this,"turn");this.direction=n,this.turn=()=>new h(e[n],e)}},Ye=class{constructor({matrix:n,turning:e,onMove:t,init:{cur:r,charDir:i,VISITED:s}}){u(this,"onMove");u(this,"_matrix");u(this,"_cur");u(this,"_character");u(this,"_VISITED");this._matrix=n,this._cur=r,this._character=new me(i,e),this.onMove=t,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:n}=this._character;this.check(n)?this.move(n):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(n){let e,t,r=this._matrix,[i,s]=this._cur;switch(n){case"up":if(t=r[i-1],!t)return!1;e=t[s];break;case"right":e=r[i][s+1];break;case"down":if(t=r[i+1],!t)return!1;e=t[s];break;case"left":e=r[i][s-1];break}return e!==void 0&&e!==this._VISITED}move(n){switch(n){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,t]=this._cur;this._matrix[e][t]=this._VISITED,this.onMove&&this.onMove(this._cur)}};var ae=class{constructor(n){u(this,"key");u(this,"children");u(this,"isEnd");this.key=n,this.isEnd=!1,this.children=new Map}},Je=class h extends k{constructor(e,t=!0){super();u(this,"_size");u(this,"_caseSensitive");u(this,"_root");if(this._root=new ae(""),this._caseSensitive=t,this._size=0,e)for(let r of e)this.add(r)}get size(){return this._size}get caseSensitive(){return this._caseSensitive}get root(){return this._root}add(e){e=this._caseProcess(e);let t=this.root,r=!1;for(let i of e){let s=t.children.get(i);s||(s=new ae(i),t.children.set(i,s)),t=s}return t.isEnd||(r=!0,t.isEnd=!0,this._size++),r}has(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let i=t.children.get(r);if(!i)return!1;t=i}return t.isEnd}delete(e){e=this._caseProcess(e);let t=!1,r=(i,s)=>{let o=e[s],l=i.children.get(o);return l?s===e.length-1?l.isEnd?(l.children.size>0?l.isEnd=!1:i.children.delete(o),t=!0,!0):!1:r(l,s+1)&&!i.isEnd&&l.children.size===0?(i.children.delete(o),!0):!1:!1};return r(this.root,0),t&&this._size--,t}getHeight(){let e=this.root,t=0;if(e){let r=(i,s)=>{s>t&&(t=s);let{children:o}=i;if(o)for(let l of o.entries())r(l[1],s+1)};r(e,0)}return t}hasPurePrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let i=t.children.get(r);if(!i)return!1;t=i}return!t.isEnd}hasPrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let i=t.children.get(r);if(!i)return!1;t=i}return!0}hasCommonPrefix(e){e=this._caseProcess(e);let t="",r=i=>{if(t+=i.key,t!==e&&!i.isEnd)if(i&&i.children&&i.children.size===1)r(Array.from(i.children.values())[0]);else return};return r(this.root),t===e}getLongestCommonPrefix(){let e="",t=r=>{if(e+=r.key,!r.isEnd)if(r&&r.children&&r.children.size===1)t(Array.from(r.children.values())[0]);else return};return t(this.root),e}getWords(e="",t=Number.MAX_SAFE_INTEGER,r=!1){e=this._caseProcess(e);let i=[],s=0;function o(a,d){for(let f of a.children.keys()){let m=a.children.get(f);m!==void 0&&o(m,d.concat(f))}if(a.isEnd){if(s>t-1)return;i.push(d),s++}}let l=this.root;if(e)for(let a of e){let d=l.children.get(a);d&&(l=d)}return(r||l!==this.root)&&o(l,e),i}filter(e,t){let r=new h,i=0;for(let s of this)e.call(t,s,i,this)&&r.add(s),i++;return r}map(e,t){let r=new h,i=0;for(let s of this)r.add(e.call(t,s,i,this)),i++;return r}*_getIterator(){function*e(t,r){t.isEnd&&(yield r);for(let[i,s]of t.children)yield*z(e(s,r+i))}yield*z(e(this.root,""))}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};return lt(ft);})();
5
5
  /**
6
6
  * data-structure-typed
7
7
  *