data-structure-typed 2.5.2 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.husky/pre-commit +3 -0
- package/CHANGELOG.md +3 -1
- package/MIGRATION.md +217 -0
- package/README.md +80 -8
- package/README_CN.md +569 -143
- package/SPECIFICATION.md +44 -14
- package/SPECIFICATION.zh-CN.md +44 -14
- package/dist/cjs/binary-tree.cjs +5841 -1678
- package/dist/cjs/graph.cjs +422 -14
- package/dist/cjs/hash.cjs +95 -7
- package/dist/cjs/heap.cjs +174 -16
- package/dist/cjs/index.cjs +7751 -2449
- package/dist/cjs/linked-list.cjs +443 -2
- package/dist/cjs/matrix.cjs +56 -0
- package/dist/cjs/priority-queue.cjs +172 -14
- package/dist/cjs/queue.cjs +435 -0
- package/dist/cjs/stack.cjs +103 -4
- package/dist/cjs/trie.cjs +106 -0
- package/dist/cjs-legacy/binary-tree.cjs +5933 -1772
- package/dist/cjs-legacy/graph.cjs +422 -14
- package/dist/cjs-legacy/hash.cjs +95 -7
- package/dist/cjs-legacy/heap.cjs +174 -16
- package/dist/cjs-legacy/index.cjs +8154 -2854
- package/dist/cjs-legacy/linked-list.cjs +443 -2
- package/dist/cjs-legacy/matrix.cjs +56 -0
- package/dist/cjs-legacy/priority-queue.cjs +172 -14
- package/dist/cjs-legacy/queue.cjs +435 -0
- package/dist/cjs-legacy/stack.cjs +103 -4
- package/dist/cjs-legacy/trie.cjs +106 -0
- package/dist/esm/binary-tree.mjs +5841 -1678
- package/dist/esm/graph.mjs +422 -14
- package/dist/esm/hash.mjs +95 -7
- package/dist/esm/heap.mjs +174 -16
- package/dist/esm/index.mjs +7751 -2449
- package/dist/esm/linked-list.mjs +443 -2
- package/dist/esm/matrix.mjs +56 -0
- package/dist/esm/priority-queue.mjs +172 -14
- package/dist/esm/queue.mjs +435 -0
- package/dist/esm/stack.mjs +103 -4
- package/dist/esm/trie.mjs +106 -0
- package/dist/esm-legacy/binary-tree.mjs +5933 -1772
- package/dist/esm-legacy/graph.mjs +422 -14
- package/dist/esm-legacy/hash.mjs +95 -7
- package/dist/esm-legacy/heap.mjs +174 -16
- package/dist/esm-legacy/index.mjs +8154 -2854
- package/dist/esm-legacy/linked-list.mjs +443 -2
- package/dist/esm-legacy/matrix.mjs +56 -0
- package/dist/esm-legacy/priority-queue.mjs +172 -14
- package/dist/esm-legacy/queue.mjs +435 -0
- package/dist/esm-legacy/stack.mjs +103 -4
- package/dist/esm-legacy/trie.mjs +106 -0
- package/dist/types/data-structures/base/iterable-element-base.d.ts +17 -0
- package/dist/types/data-structures/base/linear-base.d.ts +6 -0
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +86 -2
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +98 -0
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +191 -15
- package/dist/types/data-structures/binary-tree/bst.d.ts +171 -3
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +136 -8
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +42 -0
- package/dist/types/data-structures/binary-tree/tree-map.d.ts +1061 -167
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1232 -355
- package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +916 -194
- package/dist/types/data-structures/binary-tree/tree-set.d.ts +1078 -141
- package/dist/types/data-structures/graph/directed-graph.d.ts +70 -0
- package/dist/types/data-structures/graph/undirected-graph.d.ts +63 -0
- package/dist/types/data-structures/hash/hash-map.d.ts +84 -6
- package/dist/types/data-structures/heap/heap.d.ts +140 -12
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +150 -2
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +106 -1
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +126 -0
- package/dist/types/data-structures/matrix/matrix.d.ts +56 -0
- package/dist/types/data-structures/queue/deque.d.ts +171 -0
- package/dist/types/data-structures/queue/queue.d.ts +97 -0
- package/dist/types/data-structures/stack/stack.d.ts +72 -2
- package/dist/types/data-structures/trie/trie.d.ts +84 -0
- package/dist/types/interfaces/binary-tree.d.ts +2 -3
- package/dist/umd/data-structure-typed.js +7784 -2484
- package/dist/umd/data-structure-typed.min.js +4 -4
- package/docs-site-docusaurus/docs/api/classes/AVLTree.md +188 -200
- package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +11 -11
- package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +62 -62
- package/docs-site-docusaurus/docs/api/classes/BST.md +183 -195
- package/docs-site-docusaurus/docs/api/classes/BSTNode.md +13 -13
- package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +15 -15
- package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +143 -155
- package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
- package/docs-site-docusaurus/docs/api/classes/Deque.md +99 -85
- package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +73 -73
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +100 -70
- package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +8 -8
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +12 -12
- package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
- package/docs-site-docusaurus/docs/api/classes/HashMap.md +38 -38
- package/docs-site-docusaurus/docs/api/classes/Heap.md +96 -85
- package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +25 -25
- package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +23 -23
- package/docs-site-docusaurus/docs/api/classes/LinearBase.md +48 -48
- package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +52 -52
- package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +46 -42
- package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +6 -6
- package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +74 -74
- package/docs-site-docusaurus/docs/api/classes/MapGraph.md +73 -73
- package/docs-site-docusaurus/docs/api/classes/Matrix.md +31 -31
- package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/MinHeap.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +104 -89
- package/docs-site-docusaurus/docs/api/classes/Navigator.md +5 -5
- package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +103 -88
- package/docs-site-docusaurus/docs/api/classes/Queue.md +111 -59
- package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +200 -212
- package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -10
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +75 -75
- package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +6 -6
- package/docs-site-docusaurus/docs/api/classes/SkipList.md +37 -37
- package/docs-site-docusaurus/docs/api/classes/Stack.md +42 -42
- package/docs-site-docusaurus/docs/api/classes/TreeMap.md +107 -36
- package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +43 -43
- package/docs-site-docusaurus/docs/api/classes/TreeSet.md +106 -35
- package/docs-site-docusaurus/docs/api/classes/Trie.md +43 -43
- package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
- package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +72 -72
- package/docs-site-docusaurus/docs/guide/architecture.md +75 -7
- package/docs-site-docusaurus/docs/guide/concepts.md +53 -34
- package/docs-site-docusaurus/docs/guide/faq.md +53 -0
- package/docs-site-docusaurus/docs/guide/guides.md +8 -9
- package/docs-site-docusaurus/docs/guide/integrations.md +74 -177
- package/docs-site-docusaurus/docs/guide/overview.md +131 -17
- package/docs-site-docusaurus/src/pages/index.tsx +4 -0
- package/docs-site-docusaurus/typedoc.json +1 -0
- package/jest.integration.config.js +1 -2
- package/package.json +10 -7
- package/src/data-structures/base/iterable-element-base.ts +32 -0
- package/src/data-structures/base/linear-base.ts +11 -0
- package/src/data-structures/binary-tree/avl-tree.ts +88 -5
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +98 -0
- package/src/data-structures/binary-tree/binary-tree.ts +242 -81
- package/src/data-structures/binary-tree/bst.ts +173 -7
- package/src/data-structures/binary-tree/red-black-tree.ts +139 -15
- package/src/data-structures/binary-tree/segment-tree.ts +42 -0
- package/src/data-structures/binary-tree/tree-map.ts +948 -36
- package/src/data-structures/binary-tree/tree-multi-map.ts +893 -13
- package/src/data-structures/binary-tree/tree-multi-set.ts +761 -33
- package/src/data-structures/binary-tree/tree-set.ts +1260 -251
- package/src/data-structures/graph/directed-graph.ts +71 -1
- package/src/data-structures/graph/undirected-graph.ts +64 -1
- package/src/data-structures/hash/hash-map.ts +100 -12
- package/src/data-structures/heap/heap.ts +149 -19
- package/src/data-structures/linked-list/doubly-linked-list.ts +178 -2
- package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
- package/src/data-structures/linked-list/skip-linked-list.ts +126 -0
- package/src/data-structures/matrix/matrix.ts +56 -0
- package/src/data-structures/queue/deque.ts +187 -0
- package/src/data-structures/queue/queue.ts +109 -0
- package/src/data-structures/stack/stack.ts +75 -5
- package/src/data-structures/trie/trie.ts +84 -0
- package/src/interfaces/binary-tree.ts +1 -9
- package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +0 -12984
- package/.vitepress/cache/deps_temp_51f5f1b0/package.json +0 -3
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +0 -4505
- package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +0 -9731
- package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +0 -347
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use strict";var dataStructureTyped=(()=>{var xe=Object.defineProperty;var Vt=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var Tt=Object.prototype.hasOwnProperty;var _t=l=>{throw TypeError(l)};var Et=(l,r,e)=>r in l?xe(l,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):l[r]=e;var Nt=(l,r)=>{for(var e in r)xe(l,e,{get:r[e],enumerable:!0})},Rt=(l,r,e,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of yt(r))!Tt.call(l,n)&&n!==e&&xe(l,n,{get:()=>r[n],enumerable:!(t=Vt(r,n))||t.enumerable});return l};var kt=l=>Rt(xe({},"__esModule",{value:!0}),l);var h=(l,r,e)=>Et(l,typeof r!="symbol"?r+"":r,e),gt=(l,r,e)=>r.has(l)||_t("Cannot "+e);var p=(l,r,e)=>(gt(l,r,"read from private field"),e?e.call(l):r.get(l)),S=(l,r,e)=>r.has(l)?_t("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(l):r.set(l,e),v=(l,r,e,t)=>(gt(l,r,"write to private field"),t?t.call(l,e):r.set(l,e),e);var St={};Nt(St,{AVLTree:()=>rt,AVLTreeNode:()=>Re,AbstractEdge:()=>Q,AbstractGraph:()=>Z,AbstractVertex:()=>w,BST:()=>te,BSTNode:()=>Ne,BinaryIndexedTree:()=>nt,BinaryTree:()=>Ee,BinaryTreeNode:()=>he,Character:()=>Ae,DFSOperation:()=>ze,Deque:()=>Xe,DirectedEdge:()=>le,DirectedGraph:()=>Te,DirectedVertex:()=>ee,DoublyLinkedList:()=>Ge,DoublyLinkedListNode:()=>ye,ERR:()=>K,FibonacciHeap:()=>Je,FibonacciHeapNode:()=>Se,HashMap:()=>Ue,Heap:()=>j,IterableElementBase:()=>z,IterableEntryBase:()=>D,LinearBase:()=>q,LinearLinkedBase:()=>J,LinkedHashMap:()=>qe,LinkedListNode:()=>X,LinkedListQueue:()=>Qe,MapEdge:()=>Fe,MapGraph:()=>tt,MapVertex:()=>Oe,Matrix:()=>lt,MaxHeap:()=>Ye,MaxPriorityQueue:()=>ut,MinHeap:()=>Ze,MinPriorityQueue:()=>at,Navigator:()=>ht,PriorityQueue:()=>re,Queue:()=>P,Range:()=>U,RedBlackTree:()=>H,RedBlackTreeNode:()=>fe,SegmentTree:()=>it,SinglyLinkedList:()=>Ve,SinglyLinkedListNode:()=>oe,SkipList:()=>We,SkipListNode:()=>ae,Stack:()=>$e,TreeMap:()=>ot,TreeMultiMap:()=>st,TreeMultiSet:()=>dt,TreeNode:()=>ct,TreeSet:()=>ne,Trie:()=>ft,TrieNode:()=>Ke,UndirectedEdge:()=>we,UndirectedGraph:()=>et,UndirectedVertex:()=>ve,arrayRemove:()=>G,asyncTrampoline:()=>Kt,calcMinUnitsRequired:()=>Le,getMSB:()=>Mt,isComparable:()=>Y,isTrampolineThunk:()=>He,isWeakKey:()=>$,makeAsyncTrampoline:()=>Lt,makeTrampoline:()=>Ce,makeTrampolineThunk:()=>Ie,raise:()=>m,rangeCheck:()=>W,roundFixed:()=>xt,throwRangeError:()=>Bt,toBinaryString:()=>It,trampoline:()=>mt,uuidV4:()=>je});var D=class{*[Symbol.iterator](...r){yield*this._getIterator(...r)}*entries(){for(let r of this)yield r}*keys(){for(let r of this)yield r[0]}*values(){for(let r of this)yield r[1]}every(r,e){let t=0;for(let n of this)if(!r.call(e,n[1],n[0],t++,this))return!1;return!0}some(r,e){let t=0;for(let n of this)if(r.call(e,n[1],n[0],t++,this))return!0;return!1}forEach(r,e){let t=0;for(let n of this){let[i,s]=n;r.call(e,s,i,t++,this)}}find(r,e){let t=0;for(let n of this){let[i,s]=n;if(r.call(e,s,i,t++,this))return n}}has(r){for(let e of this){let[t]=e;if(t===r)return!0}return!1}hasValue(r){for(let[,e]of this)if(e===r)return!0;return!1}get(r){for(let e of this){let[t,n]=e;if(t===r)return n}}reduce(r,e){let t=e,n=0;for(let i of this){let[s,o]=i;t=r(t,o,s,n++,this)}return t}toArray(){return[...this]}toVisual(){return[...this]}print(){console.log(this.toVisual())}};function m(l,r){throw new l(r)}var K={indexOutOfRange:(l,r,e,t)=>`${t?t+": ":""}Index ${l} is out of range [${r}, ${e}].`,invalidIndex:l=>`${l?l+": ":""}Index must be an integer.`,invalidArgument:(l,r)=>`${r?r+": ":""}${l}`,comparatorRequired:l=>`${l?l+": ":""}Comparator is required for non-number/non-string/non-Date keys.`,invalidKey:(l,r)=>`${r?r+": ":""}${l}`,notAFunction:(l,r)=>`${r?r+": ":""}${l} must be a function.`,invalidEntry:l=>`${l?l+": ":""}Each entry must be a [key, value] tuple.`,invalidNaN:l=>`${l?l+": ":""}NaN is not a valid key.`,invalidDate:l=>`${l?l+": ":""}Invalid Date key.`,reduceEmpty:l=>`${l?l+": ":""}Reduce of empty structure with no initial value.`,callbackReturnType:(l,r,e)=>`${e?e+": ":""}Callback must return ${l}; got ${r}.`,invalidOperation:(l,r)=>`${r?r+": ":""}${l}`,matrixDimensionMismatch:l=>`Matrix: Dimensions must be compatible for ${l}.`,matrixSingular:()=>"Matrix: Singular matrix, inverse does not exist.",matrixNotSquare:()=>"Matrix: Must be square for inversion.",matrixNotRectangular:()=>"Matrix: Must be rectangular for transposition.",matrixRowMismatch:(l,r)=>`Matrix: Expected row length ${l}, but got ${r}.`,orderStatisticNotEnabled:(l,r)=>`${r?r+": ":""}${l}() requires enableOrderStatistic: true.`};var ze=(e=>(e[e.VISIT=0]="VISIT",e[e.PROCESS=1]="PROCESS",e))(ze||{}),U=class{constructor(r,e,t=!0,n=!0){this.low=r;this.high=e;this.includeLow=t;this.includeHigh=n}isInRange(r,e){let t=this.includeLow?e(r,this.low)>=0:e(r,this.low)>0,n=this.includeHigh?e(r,this.high)<=0:e(r,this.high)<0;return t&&n}};var z=class{constructor(r){h(this,"_toElementFn");if(r){let{toElementFn:e}=r;typeof e=="function"?this._toElementFn=e:e&&m(TypeError,"toElementFn must be a function type")}}get toElementFn(){return this._toElementFn}*[Symbol.iterator](...r){yield*this._getIterator(...r)}*values(){for(let r of this)yield r}every(r,e){let t=0;for(let n of this)if(e===void 0){if(!r(n,t++,this))return!1}else if(!r.call(e,n,t++,this))return!1;return!0}some(r,e){let t=0;for(let n of this)if(e===void 0){if(r(n,t++,this))return!0}else if(r.call(e,n,t++,this))return!0;return!1}forEach(r,e){let t=0;for(let n of this)e===void 0?r(n,t++,this):r.call(e,n,t++,this)}find(r,e){let t=0;for(let n of this)if(e===void 0){if(r(n,t++,this))return n}else if(r.call(e,n,t++,this))return n}has(r){for(let e of this)if(e===r)return!0;return!1}reduce(r,e){let t=0,n=this[Symbol.iterator](),i;if(arguments.length>=2)i=e;else{let s=n.next();s.done&&m(TypeError,"Reduce of empty structure with no initial value"),i=s.value,t=1}for(let s of n)i=r(i,s,t++,this);return i}toArray(){return[...this]}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var X=class{constructor(r){h(this,"_value");h(this,"_next");this._value=r,this._next=void 0}get value(){return this._value}set value(r){this._value=r}get next(){return this._next}set next(r){this._next=r}},q=class l extends z{constructor(e){super(e);h(this,"_maxLen",-1);if(e){let{maxLen:t}=e;typeof t=="number"&&t>0&&t%1===0&&(this._maxLen=t)}}get maxLen(){return this._maxLen}indexOf(e,t=0){if(this.length===0)return-1;t<0&&(t=this.length+t),t<0&&(t=0);for(let n=t;n<this.length;n++)if(this.at(n)===e)return n;return-1}lastIndexOf(e,t=this.length-1){if(this.length===0)return-1;t>=this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(let n=t;n>=0;n--)if(this.at(n)===e)return n;return-1}findIndex(e,t){for(let n=0;n<this.length;n++){let i=this.at(n);if(i!==void 0&&e.call(t,i,n,this))return n}return-1}concat(...e){let t=this.clone();for(let n of e)n instanceof l?t.pushMany(n):t.push(n);return t}sort(e){let t=this.toArray();t.sort(e),this.clear();for(let n of t)this.push(n);return this}splice(e,t=0,...n){let i=this._createInstance();e=e<0?this.length+e:e,e=Math.max(0,Math.min(e,this.length)),t=Math.max(0,Math.min(t,this.length-e));for(let s=0;s<t;s++){let o=this.deleteAt(e);o!==void 0&&i.push(o)}for(let s=0;s<n.length;s++)this.addAt(e+s,n[s]);return i}join(e=","){return this.toArray().join(e)}toReversedArray(){let e=[];for(let t=this.length-1;t>=0;t--)e.push(this.at(t));return e}reduceRight(e,t){let n=t!=null?t:0;for(let i=this.length-1;i>=0;i--)n=e(n,this.at(i),i,this);return n}slice(e=0,t=this.length){e=e<0?this.length+e:e,t=t<0?this.length+t:t;let n=this._createInstance();for(let i=e;i<t;i++)n.push(this.at(i));return n}fill(e,t=0,n=this.length){if(t=t<0?this.length+t:t,n=n<0?this.length+n:n,t<0&&(t=0),n>this.length&&(n=this.length),t>=n)return this;for(let i=t;i<n;i++)this.setAt(i,e);return this}},J=class extends q{constructor(r){if(super(r),r){let{maxLen:e}=r;typeof e=="number"&&e>0&&e%1===0&&(this._maxLen=e)}}indexOf(r,e=0){let t=this._getIterator(),n=t.next(),i=0;for(;i<e;)n=t.next(),i++;for(;!n.done;){if(n.value===r)return i;n=t.next(),i++}return-1}lastIndexOf(r,e=this.length-1){let t=this._getReverseIterator(),n=t.next(),i=this.length-1;for(;i>e;)n=t.next(),i--;for(;!n.done;){if(n.value===r)return i;n=t.next(),i--}return-1}concat(...r){let e=this.clone();for(let t of r)t instanceof q?e.pushMany(t):e.push(t);return e}slice(r=0,e=this.length){r=r<0?this.length+r:r,e=e<0?this.length+e:e;let t=this._createInstance(),n=this._getIterator(),i=n.next(),s=0;for(;s<r;)i=n.next(),s++;for(let o=r;o<e;o++)t.push(i.value),i=n.next();return t}splice(r,e=0,...t){let n=this._createInstance();r=r<0?this.length+r:r,r=Math.max(0,Math.min(r,this.length)),e=Math.max(0,e);let i=0,s,o,d=this._getNodeIterator();for(let a of d){if(i===r){s=a;break}o=a,i++}for(let a=0;a<e&&s;a++){n.push(s.value);let u=s.next;this.delete(s),s=u}for(let a=0;a<t.length;a++)o?(this.addAfter(o,t[a]),o=o.next):(this.addAt(0,t[a]),o=this._getNodeIterator().next().value);return n}reduceRight(r,e){let t=e!=null?e:0,n=this.length-1;for(let i of this._getReverseIterator())t=r(t,i,n--,this);return t}};var je=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(l){let r=Math.random()*16|0;return(l=="x"?r:r&3|8).toString(16)})},G=function(l,r){let e=-1,t=l?l.length:0,n=[];for(;++e<t;){let i=l[e];r(i,e,l)&&(n.push(i),Array.prototype.splice.call(l,e--,1),t--)}return n},Mt=l=>l<=0?0:1<<31-Math.clz32(l),W=(l,r,e,t)=>{if(l<r||l>e)throw new RangeError(t!=null?t:`Index ${l} is out of range [${r}, ${e}].`)},Bt=(l="The value is off-limits.")=>{throw new RangeError(l)},$=l=>{let r=typeof l;return r==="object"&&l!==null||r==="function"},Le=(l,r)=>Math.floor((l+r-1)/r),xt=(l,r=10)=>{let e=Math.pow(10,r);return Math.round(l*e)/e};function Pe(l){let r=typeof l;return r==="number"?!0:r==="bigint"||r==="string"||r==="boolean"}function bt(l){if(typeof l.valueOf=="function"){let r=l.valueOf();if(r!==l){if(Pe(r))return r;if(typeof r=="object"&&r!==null)return bt(r)}}if(typeof l.toString=="function"){let r=l.toString();if(r!=="[object Object]")return r}return null}function Y(l,r=!1){if(l==null)return!1;if(Pe(l))return!0;if(typeof l!="object")return!1;if(l instanceof Date||r)return!0;let e=bt(l);return e==null?!1:Pe(e)}var Ie=l=>({isThunk:!0,fn:l}),He=l=>typeof l=="object"&&l!==null&&"isThunk"in l&&l.isThunk;function mt(l){let r=l;for(;He(r);)r=r.fn();return r}function Ce(l){return(...r)=>mt(l(...r))}async function Kt(l){let r=await l;for(;He(r);)r=await r.fn();return r}function Lt(l){return async(...r)=>Kt(l(...r))}function It(l,r=32){let e=(l>>>0).toString(2);return e=e.padStart(r,"0"),e}var Ue=class extends D{constructor(e=[],t){super();h(this,"_store",{});h(this,"_objMap",new Map);h(this,"_toEntryFn");h(this,"_size",0);h(this,"_hashFn",e=>String(e));if(t){let{hashFn:n,toEntryFn:i}=t;n&&(this._hashFn=n),i&&(this._toEntryFn=i)}e&&this.setMany(e)}get store(){return this._store}get objMap(){return this._objMap}get toEntryFn(){return this._toEntryFn}get size(){return this._size}get hashFn(){return this._hashFn}isEmpty(){return this._size===0}clear(){this._store={},this._objMap.clear(),this._size=0}isEntry(e){return Array.isArray(e)&&e.length===2}set(e,t){if(this._isObjKey(e))this.objMap.has(e)||this._size++,this.objMap.set(e,t);else{let n=this._getNoObjKey(e);this.store[n]===void 0&&this._size++,this._store[n]={key:e,value:t}}return!0}setMany(e){let t=[];for(let n of e){let i,s;this.isEntry(n)?[i,s]=n:this._toEntryFn&&([i,s]=this._toEntryFn(n)),i!==void 0&&s!==void 0&&t.push(this.set(i,s))}return t}get(e){var n;if(this._isObjKey(e))return this.objMap.get(e);let t=this._getNoObjKey(e);return(n=this._store[t])==null?void 0:n.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}setHashFn(e){return this._hashFn===e?this:(this._hashFn=e,this._rehashNoObj(),this)}clone(){let e={hashFn:this._hashFn,toEntryFn:this._toEntryFn};return this._createLike(this,e)}map(e,t){let n=this._createLike(),i=0;for(let[s,o]of this)n.set(s,e.call(t,o,s,i++,this));return n}filter(e,t){let n=this._createLike(),i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&n.set(s,o);return n}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}_rehashNoObj(){let e={};for(let{key:t,value:n}of Object.values(this._store)){let i=this._getNoObjKey(t);e[i]={key:t,value:n}}this._store=e}*_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,n;return t!=="string"&&t!=="number"&&t!=="symbol"?n=this._hashFn(e):n=e,n}},qe=class extends D{constructor(e=[],t){super();h(this,"_sentinel");h(this,"_hashFn",e=>String(e));h(this,"_objHashFn",e=>e);h(this,"_noObjMap",{});h(this,"_objMap",new WeakMap);h(this,"_head");h(this,"_tail");h(this,"_toEntryFn",e=>{if(this.isEntry(e))return e;m(TypeError,K.invalidArgument("If elements do not adhere to [key, value], provide options.toEntryFn to transform raw records.","HashMap"))});h(this,"_size",0);if(this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel,t){let{hashFn:n,objHashFn:i,toEntryFn:s}=t;n&&(this._hashFn=n),i&&(this._objHashFn=i),s&&(this._toEntryFn=s)}e&&this.setMany(e)}get hashFn(){return this._hashFn}get objHashFn(){return this._objHashFn}get noObjMap(){return this._noObjMap}get objMap(){return this._objMap}get head(){return this._head}get tail(){return this._tail}get toEntryFn(){return this._toEntryFn}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 n,i=!this.has(e);if($(e)){let s=this._objHashFn(e);n=this.objMap.get(s),!n&&i?(n={key:s,value:t,prev:this.tail,next:this._sentinel},this.objMap.set(s,n)):n&&(n.value=t)}else{let s=this._hashFn(e);n=this.noObjMap[s],!n&&i?this.noObjMap[s]=n={key:e,value:t,prev:this.tail,next:this._sentinel}:n&&(n.value=t)}return n&&i&&(this._size===0?(this._head=n,this._sentinel.next=n):(this.tail.next=n,n.prev=this.tail),this._tail=n,this._sentinel.prev=n,this._size++),!0}setMany(e){let t=[];for(let n of e){let i,s;this.isEntry(n)?[i,s]=n:this._toEntryFn&&([i,s]=this._toEntryFn(n)),i!==void 0&&s!==void 0&&t.push(this.set(i,s))}return t}has(e){if($(e)){let n=this._objHashFn(e);return this.objMap.has(n)}return this._hashFn(e)in this.noObjMap}get(e){if($(e)){let i=this._objHashFn(e),s=this.objMap.get(i);return s?s.value:void 0}let t=this._hashFn(e),n=this.noObjMap[t];return n?n.value:void 0}at(e){W(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return t.value}delete(e){let t;if($(e)){let n=this._objHashFn(e);if(t=this.objMap.get(n),!t)return!1;this.objMap.delete(n)}else{let n=this._hashFn(e);if(t=this.noObjMap[n],!t)return!1;delete this.noObjMap[n]}return this._deleteNode(t)}deleteWhere(e){let t=this._head,n=0;for(;t!==this._sentinel;){let i=t;if(t=t.next,e(i.key,i.value,n++,this)){let s=i.key;if($(s))this._objMap.delete(s);else{let o=this._hashFn(i.key);delete this._noObjMap[o]}return this._deleteNode(i)}}return!1}deleteAt(e){W(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return this._deleteNode(t)}isEmpty(){return this._size===0}isEntry(e){return Array.isArray(e)&&e.length===2}clear(){this._noObjMap={},this._size=0,this._head=this._tail=this._sentinel.prev=this._sentinel.next=this._sentinel}clone(){let e={hashFn:this._hashFn,objHashFn:this._objHashFn};return this._createLike(this,e)}filter(e,t){let n=this._createLike(),i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&n.set(s,o),i++;return n}map(e,t){let n=this._createLike(),i=0;for(let[s,o]of this){let[d,a]=e.call(t,o,s,i,this);n.set(d,a),i++}return n}*_getIterator(){let e=this.head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}_deleteNode(e){let t=e.key;if($(t))this._objMap.delete(t);else{let s=this._hashFn(t);delete this._noObjMap[s]}let{prev:n,next:i}=e;return n.next=i,i.prev=n,e===this.head&&(this._head=i),e===this.tail&&(this._tail=n),this._size-=1,!0}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}};var oe=class extends X{constructor(e){super(e);h(this,"_next");this._value=e,this._next=void 0}get next(){return this._next}set next(e){this._next=e}},Ve=class extends J{constructor(e=[],t){super(t);h(this,"_equals",(e,t)=>Object.is(e,t));h(this,"_head");h(this,"_tail");h(this,"_length",0);this.pushMany(e)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}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}static from(e,t){let n=new this([],t);for(let i of e)n.push(i);return n}push(e){let t=this._ensureNode(e);return this.head?(this.tail.next=t,this._tail=t):this._head=this._tail=t,this._length++,this._maxLen>0&&this.length>this._maxLen&&this.shift(),!0}pop(){var n;if(!this.head)return;if(this.head===this.tail){let i=this.head.value;return this._head=void 0,this._tail=void 0,this._length--,i}let e=this.head;for(;e.next&&e.next!==this.tail;)e=e.next;let t=(n=this.tail)==null?void 0:n.value;return e.next=void 0,this._tail=e,this._length--,t}shift(){if(!this.head)return;let e=this.head;return this._head=this.head.next,this._head||(this._tail=void 0),this._length--,e.value}unshift(e){let t=this._ensureNode(e);return this.head?(t.next=this.head,this._head=t):this._head=this._tail=t,this._length++,!0}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}unshiftMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.unshift(this.toElementFn(n))):t.push(this.unshift(n));return t}search(e){let t=this._ensurePredicate(e),n=this.head;for(;n;){if(t(n))return n.value;n=n.next}}at(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e&&t;n++)t=t.next;return t==null?void 0:t.value}isNode(e){return e instanceof oe}getNodeAt(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e&&t;n++)t=t.next;return t}deleteAt(e){if(e<0||e>=this._length)return;if(e===0)return this.shift();let t=this.getNodeAt(e),n=this._getPrevNode(t),i=t.value;return n.next=t.next,t===this.tail&&(this._tail=n),this._length--,i}delete(e){if(e===void 0||!this.head)return!1;let t=this.isNode(e)?e:this.getNode(e);if(!t)return!1;let n=this._getPrevNode(t);return n?(n.next=t.next,t===this.tail&&(this._tail=n)):(this._head=t.next,t===this.tail&&(this._tail=void 0)),this._length--,!0}addAt(e,t){if(e<0||e>this._length)return!1;if(e===0)return this.unshift(t);if(e===this._length)return this.push(t);let n=this._ensureNode(t),i=this.getNodeAt(e-1);return n.next=i.next,i.next=n,this._length++,!0}setAt(e,t){let n=this.getNodeAt(e);return n?(n.value=t,!0):!1}isEmpty(){return this._length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}reverse(){if(!this.head||this.head===this.tail)return this;let e,t=this.head,n;for(;t;)n=t.next,t.next=e,e=t,t=n;return[this._head,this._tail]=[this.tail,this.head],this}getNode(e){if(e===void 0)return;if(this.isNode(e))return e;let t=this._ensurePredicate(e),n=this.head;for(;n;){if(t(n))return n;n=n.next}}addBefore(e,t){let n=this.getNode(e);if(!n)return!1;let i=this._getPrevNode(n),s=this._ensureNode(t);return i?(i.next=s,s.next=n,this._length++):(s.next=this._head,this._head=s,this._tail||(this._tail=s),this._length++),!0}addAfter(e,t){let n=this.getNode(e);if(!n)return!1;let i=this._ensureNode(t);return i.next=n.next,n.next=i,n===this.tail&&(this._tail=i),this._length++,!0}splice(e,t=0,...n){e=Math.max(0,Math.min(e,this.length)),t=Math.max(0,t);let i=this._createInstance(),s=e===0?void 0:this.getNodeAt(e-1),o=s?s.next:this.head,d=0;for(;d<t&&o;)i.push(o.value),o=o.next,d++;let a=o;if(s?s.next=a:this._head=a,a||(this._tail=s),n.length>0){let u,f;for(let c of n){let _=this._ensureNode(c);u||(u=_),f&&(f.next=_),f=_}s?s.next=u:this._head=u,f.next=a,a||(this._tail=f)}return this._length+=n.length-d,this._length===0&&(this._head=void 0,this._tail=void 0),i}countOccurrences(e){let t=Ct(e,this._equals),n=0,i=this.head;for(;i;)t(i)&&n++,i=i.next;return n}setEquality(e){return this._equals=e,this}deleteWhere(e){let t,n=this.head,i=0;for(;n;){if(e(n.value,i++,this))return t?(t.next=n.next,n===this._tail&&(this._tail=t)):(this._head=n.next,n===this._tail&&(this._tail=void 0)),this._length--,!0;t=n,n=n.next}return!1}clone(){let e=this._createInstance();for(let t of this)e.push(t);return e}filter(e,t){let n=this._createInstance(),i=0;for(let s of this)e.call(t,s,i++,this)&&n.push(s);return n}mapSame(e,t){let n=this._createInstance(),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{},maxLen:this._maxLen}),s=0;for(let o of this)i.push(e.call(n,o,s++,this));return i}createNode(e){return new oe(e)}_isPredicate(e){return typeof e=="function"}_ensureNode(e){return this.isNode(e)?e:this.createNode(e)}_ensurePredicate(e){if(this.isNode(e))return n=>n===e;if(this._isPredicate(e))return e;let t=e;return n=>this._equals(n.value,t)}_getPrevNode(e){if(!this.head||this.head===e)return;let t=this.head;for(;t.next&&t.next!==e;)t=t.next;return t.next===e?t:void 0}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}*_getReverseIterator(){let e=[...this].reverse();for(let t of e)yield t}*_getNodeIterator(){let e=this.head;for(;e;)yield e,e=e.next}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}_spawnLike(e){return this._createLike([],e)}};function Ct(l,r){if(l instanceof oe)return t=>t===l;if(typeof l=="function")return l;let e=l;return t=>r(t.value,e)}var ye=class extends X{constructor(e){super(e);h(this,"_next");h(this,"_prev");this._value=e,this._next=void 0,this._prev=void 0}get next(){return this._next}set next(e){this._next=e}get prev(){return this._prev}set prev(e){this._prev=e}},Ge=class extends J{constructor(e=[],t){super(t);h(this,"_equals",(e,t)=>Object.is(e,t));h(this,"_head");h(this,"_tail");h(this,"_length",0);this._head=void 0,this._tail=void 0,this._length=0,t!=null&&t.maxLen&&Number.isInteger(t.maxLen)&&t.maxLen>0&&(this._maxLen=t.maxLen),this.pushMany(e)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}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}static fromArray(e){return new this(e)}isNode(e){return e instanceof ye}push(e){let t=this._ensureNode(e);return this.head?(t.prev=this.tail,this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._length++,this._maxLen>0&&this.length>this._maxLen&&this.shift(),!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._length--,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._length--,e.value}unshift(e){let t=this._ensureNode(e);return this.head?(t.next=this.head,this.head.prev=t,this._head=t):(this._head=t,this._tail=t),this._length++,this._maxLen>0&&this._length>this._maxLen&&this.pop(),!0}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}unshiftMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.unshift(this.toElementFn(n))):t.push(this.unshift(n));return t}at(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e&&t;n++)t=t.next;return t==null?void 0:t.value}getNodeAt(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e&&t;n++)t=t.next;return t}getNode(e){if(e===void 0)return;if(this.isNode(e)){let i=e,s=this.head;for(;s;){if(s===i)return i;s=s.next}let o=d=>this._equals(d.value,i.value);for(s=this.head;s;){if(o(s))return s;s=s.next}return}let t=this._ensurePredicate(e),n=this.head;for(;n;){if(t(n))return n;n=n.next}}addAt(e,t){if(e<0||e>this._length)return!1;if(e===0)return this.unshift(t);if(e===this._length)return this.push(t);let n=this._ensureNode(t),i=this.getNodeAt(e-1),s=i.next;return n.prev=i,n.next=s,i.next=n,s.prev=n,this._length++,!0}addBefore(e,t){let n=this.isNode(e)?e:this.getNode(e);if(!n)return!1;let i=this._ensureNode(t);return i.prev=n.prev,n.prev&&(n.prev.next=i),i.next=n,n.prev=i,n===this.head&&(this._head=i),this._length++,!0}addAfter(e,t){let n=this.isNode(e)?e:this.getNode(e);if(!n)return!1;let i=this._ensureNode(t);return i.next=n.next,n.next&&(n.next.prev=i),i.prev=n,n.next=i,n===this.tail&&(this._tail=i),this._length++,!0}setAt(e,t){let n=this.getNodeAt(e);return n?(n.value=t,!0):!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),n=t.prev,i=t.next;return n.next=i,i.prev=n,this._length--,t.value}delete(e){let t=this.getNode(e);if(!t)return!1;if(t===this.head)this.shift();else if(t===this.tail)this.pop();else{let n=t.prev,i=t.next;n.next=i,i.prev=n,this._length--}return!0}isEmpty(){return this._length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}search(e){let t=this._ensurePredicate(e),n=this.head;for(;n;){if(t(n))return n.value;n=n.next}}getBackward(e){let t=this._ensurePredicate(e),n=this.tail;for(;n;){if(t(n))return n.value;n=n.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}setEquality(e){return this._equals=e,this}clone(){let e=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});for(let t of this)e.push(t);return e}filter(e,t){let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen}),i=0;for(let s of this)e.call(t,s,i++,this)&&n.push(s);return n}mapSame(e,t){let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen}),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{},maxLen:this._maxLen}),s=0;for(let o of this)i.push(e.call(n,o,s++,this));return i}_ensureNode(e){return this.isNode(e)?e:new ye(e)}_ensurePredicate(e){if(this.isNode(e)){let n=e;return i=>i===n}if(typeof e=="function")return e;let t=e;return n=>this._equals(n.value,t)}_getPrevNode(e){return e.prev}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}*_getReverseIterator(){let e=this.tail;for(;e;)yield e.value,e=e.prev}*_getNodeIterator(){let e=this.head;for(;e;)yield e,e=e.next}};var ae=class{constructor(r,e,t){h(this,"key");h(this,"value");h(this,"forward");this.key=r,this.value=e,this.forward=new Array(t).fill(void 0)}},O,ue,de=class de extends D{constructor(e=[],t={}){super();S(this,O);S(this,ue);h(this,"_head");h(this,"_level",0);h(this,"_size",0);h(this,"_maxLevel",16);h(this,"_probability",.5);let{comparator:n,toEntryFn:i,maxLevel:s,probability:o}=t;typeof s=="number"&&s>0&&(this._maxLevel=s),typeof o=="number"&&o>0&&o<1&&(this._probability=o),v(this,ue,n===void 0),v(this,O,n!=null?n:de.createDefaultComparator()),this._head=new ae(void 0,void 0,this._maxLevel);for(let d of e){let a,u;i?[a,u]=i(d):((!Array.isArray(d)||d.length<2)&&m(TypeError,K.invalidEntry("SkipList")),[a,u]=d),this.set(a,u)}}static createDefaultComparator(){return(e,t)=>{if(typeof e=="number"&&typeof t=="number")return(Number.isNaN(e)||Number.isNaN(t))&&m(TypeError,K.invalidNaN("SkipList")),e-t;if(typeof e=="string"&&typeof t=="string")return e<t?-1:e>t?1:0;if(e instanceof Date&&t instanceof Date){let n=e.getTime(),i=t.getTime();return(Number.isNaN(n)||Number.isNaN(i))&&m(TypeError,K.invalidDate("SkipList")),n-i}if(typeof e=="bigint"&&typeof t=="bigint")return e<t?-1:e>t?1:0;m(TypeError,K.comparatorRequired("SkipList"))}}get size(){return this._size}get maxLevel(){return this._maxLevel}get probability(){return this._probability}get comparator(){return p(this,O)}isEmpty(){return this._size===0}clear(){this._head=new ae(void 0,void 0,this._maxLevel),this._level=0,this._size=0}clone(){return new de(this,{comparator:p(this,ue)?void 0:p(this,O),maxLevel:this._maxLevel,probability:this._probability})}set(e,t){let n=p(this,O),i=this._findUpdate(e),s=i[0].forward[0];if(s&&n(s.key,e)===0)return s.value=t,this;let o=this._randomLevel(),d=new ae(e,t,o);if(o>this._level){for(let a=this._level;a<o;a++)i[a]=this._head;this._level=o}for(let a=0;a<o;a++)d.forward[a]=i[a].forward[a],i[a].forward[a]=d;return this._size++,this}get(e){let t=this._findNode(e);return t?t.value:void 0}has(e){return this._findNode(e)!==void 0}delete(e){let t=p(this,O),n=this._findUpdate(e),i=n[0].forward[0];if(!i||t(i.key,e)!==0)return!1;for(let s=0;s<this._level&&n[s].forward[s]===i;s++)n[s].forward[s]=i.forward[s];for(;this._level>0&&!this._head.forward[this._level-1];)this._level--;return this._size--,!0}first(){let e=this._head.forward[0];return e?[e.key,e.value]:void 0}last(){let e=this._head;for(let t=this._level-1;t>=0;t--)for(;e.forward[t];)e=e.forward[t];return e===this._head?void 0:[e.key,e.value]}pollFirst(){let e=this.first();if(e)return this.delete(e[0]),e}pollLast(){let e=this.last();if(e)return this.delete(e[0]),e}ceiling(e){let t=p(this,O),n=this._head;for(let s=this._level-1;s>=0;s--)for(;n.forward[s]&&t(n.forward[s].key,e)<0;)n=n.forward[s];let i=n.forward[0];return i?[i.key,i.value]:void 0}floor(e){let t=p(this,O),n=this._head;for(let s=this._level-1;s>=0;s--)for(;n.forward[s]&&t(n.forward[s].key,e)<=0;)n=n.forward[s];let i=n===this._head?void 0:n;if(i&&t(i.key,e)<=0)return[i.key,i.value]}higher(e){let t=p(this,O),n=this._head;for(let s=this._level-1;s>=0;s--)for(;n.forward[s]&&t(n.forward[s].key,e)<=0;)n=n.forward[s];let i=n.forward[0];return i?[i.key,i.value]:void 0}lower(e){let t=p(this,O),n=this._head,i;for(let s=this._level-1;s>=0;s--){for(;n.forward[s]&&t(n.forward[s].key,e)<0;)n=n.forward[s];n!==this._head&&t(n.key,e)<0&&(i=n)}return i?[i.key,i.value]:void 0}rangeSearch(e,t={}){let{lowInclusive:n=!0,highInclusive:i=!0}=t,[s,o]=e,d=p(this,O),a=[],u=this._head;for(let f=this._level-1;f>=0;f--)for(;u.forward[f]&&d(u.forward[f].key,s)<0;)u=u.forward[f];for(u=u.forward[0];u;){let f=d(u.key,o);if(f>0||f===0&&!i)break;let c=d(u.key,s);(c>0||c===0&&n)&&a.push([u.key,u.value]),u=u.forward[0]}return a}map(e,t){let n=new de([],t!=null?t:{}),i=0;for(let[s,o]of this){let[d,a]=e(o,s,i++,this);n.set(d,a)}return n}filter(e,t){let n=new de([],{comparator:p(this,ue)?void 0:p(this,O),maxLevel:this._maxLevel,probability:this._probability}),i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&n.set(s,o);return n}_getIterator(){let e=this._head;return(function*(){let t=e.forward[0];for(;t;)yield[t.key,t.value],t=t.forward[0]})()}_findUpdate(e){let t=p(this,O),n=new Array(this._maxLevel).fill(this._head),i=this._head;for(let s=this._level-1;s>=0;s--){for(;i.forward[s]&&t(i.forward[s].key,e)<0;)i=i.forward[s];n[s]=i}return n}_findNode(e){let t=p(this,O),n=this._head;for(let s=this._level-1;s>=0;s--)for(;n.forward[s]&&t(n.forward[s].key,e)<0;)n=n.forward[s];let i=n.forward[0];if(i&&t(i.key,e)===0)return i}_randomLevel(){let e=1;for(;Math.random()<this._probability&&e<this._maxLevel;)e++;return e}};O=new WeakMap,ue=new WeakMap;var We=de;var $e=class extends z{constructor(e=[],t){super(t);h(this,"_equals",(e,t)=>Object.is(e,t));h(this,"_elements",[]);this.pushMany(e)}get elements(){return this._elements}get size(){return this.elements.length}static fromArray(e,t){return new this(e,t)}isEmpty(){return this.elements.length===0}peek(){return this.isEmpty()?void 0:this.elements[this.elements.length-1]}push(e){return this.elements.push(e),!0}pop(){return this.isEmpty()?void 0:this.elements.pop()}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}delete(e){let t=this._indexOfByEquals(e);return this.deleteAt(t)}deleteAt(e){return e<0||e>=this.elements.length?!1:this.elements.splice(e,1).length===1}deleteWhere(e){for(let t=0;t<this.elements.length;t++)if(e(this.elements[t],t,this))return this.elements.splice(t,1),!0;return!1}clear(){this._elements=[]}clone(){let e=this._createInstance({toElementFn:this.toElementFn});for(let t of this)e.push(t);return e}filter(e,t){let n=this._createInstance({toElementFn:this.toElementFn}),i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}mapSame(e,t){let n=this._createInstance({toElementFn:this.toElementFn}),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{}}),s=0;for(let o of this)i.push(n===void 0?e(o,s,this):e.call(n,o,s,this)),s++;return i}setEquality(e){return this._equals=e,this}_indexOfByEquals(e){for(let t=0;t<this.elements.length;t++)if(this._equals(this.elements[t],e))return t;return-1}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}*_getIterator(){for(let e=0;e<this.elements.length;e++)yield this.elements[e]}};var P=class l extends q{constructor(e=[],t){super(t);h(this,"_elements",[]);h(this,"_offset",0);h(this,"_autoCompactRatio",.5);if(t){let{autoCompactRatio:n=.5}=t;this._autoCompactRatio=n}this.pushMany(e)}get elements(){return this._elements}get offset(){return this._offset}get autoCompactRatio(){return this._autoCompactRatio}set autoCompactRatio(e){this._autoCompactRatio=e}get length(){return this.elements.length-this._offset}get first(){return this.length>0?this.elements[this._offset]:void 0}get last(){return this.length>0?this.elements[this.elements.length-1]:void 0}static fromArray(e){return new l(e)}isEmpty(){return this.length===0}push(e){return this.elements.push(e),this._maxLen>0&&this.length>this._maxLen&&this.shift(),!0}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}shift(){if(this.length===0)return;let e=this.first;return this._offset+=1,this.elements.length>0&&this.offset/this.elements.length>this.autoCompactRatio&&this.compact(),e}delete(e){for(let t=this._offset;t<this.elements.length;t++)if(Object.is(this.elements[t],e))return this.elements.splice(t,1),!0;return!1}at(e){if(!(e<0||e>=this.length))return this._elements[this._offset+e]}deleteAt(e){if(e<0||e>=this.length)return;let t=this._offset+e,[n]=this.elements.splice(t,1);return n}addAt(e,t){return e<0||e>this.length?!1:(this._elements.splice(this._offset+e,0,t),!0)}setAt(e,t){return e<0||e>=this.length?!1:(this._elements[this._offset+e]=t,!0)}reverse(){return this._elements=this.elements.slice(this._offset).reverse(),this._offset=0,this}clear(){this._elements=[],this._offset=0}compact(){return this._elements=this.elements.slice(this._offset),this._offset=0,!0}splice(e,t=0,...n){e=Math.max(0,Math.min(e,this.length)),t=Math.max(0,Math.min(t,this.length-e));let i=this._offset+e,s=this._elements.splice(i,t,...n);this.elements.length>0&&this.offset/this.elements.length>this.autoCompactRatio&&this.compact();let o=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});return o._setAutoCompactRatio(this._autoCompactRatio),o.pushMany(s),o}clone(){let e=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});e._setAutoCompactRatio(this._autoCompactRatio);for(let t=this._offset;t<this.elements.length;t++)e.push(this.elements[t]);return e}filter(e,t){let n=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});n._setAutoCompactRatio(this._autoCompactRatio);let i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}map(e,t,n){var o,d;let i=new this.constructor([],{toElementFn:t==null?void 0:t.toElementFn,maxLen:(o=t==null?void 0:t.maxLen)!=null?o:this._maxLen,autoCompactRatio:(d=t==null?void 0:t.autoCompactRatio)!=null?d:this._autoCompactRatio}),s=0;for(let a of this)i.push(n===void 0?e(a,s++,this):e.call(n,a,s++,this));return i}mapSame(e,t){var o;let n=this.constructor,i=new n([],{toElementFn:this.toElementFn,maxLen:this._maxLen,autoCompactRatio:this._autoCompactRatio});(o=i._setAutoCompactRatio)==null||o.call(i,this._autoCompactRatio);let s=0;for(let d of this){let a=t===void 0?e(d,s++,this):e.call(t,d,s++,this);i.push(a)}return i}_setAutoCompactRatio(e){this._autoCompactRatio=e}*_getIterator(){for(let e=this._offset;e<this.elements.length;e++)yield this.elements[e]}*_getReverseIterator(){for(let e=this.length-1;e>=0;e--){let t=this.at(e);t!==void 0&&(yield t)}}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}},Qe=class extends Ve{clone(){let r=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});for(let e of this)r.push(e);return r}};var Xe=class extends q{constructor(e=[],t){super(t);h(this,"_equals",(e,t)=>Object.is(e,t));h(this,"_bucketSize",4096);h(this,"_autoCompactRatio",.5);h(this,"_compactCounter",0);h(this,"_bucketFirst",0);h(this,"_firstInBucket",0);h(this,"_bucketLast",0);h(this,"_lastInBucket",0);h(this,"_bucketCount",0);h(this,"_buckets",[]);h(this,"_length",0);if(t){let{bucketSize:s,autoCompactRatio:o}=t;typeof s=="number"&&(this._bucketSize=s),typeof o=="number"&&(this._autoCompactRatio=o)}let n;"length"in e?n=typeof e.length=="function"?e.length():e.length:n=typeof e.size=="function"?e.size():e.size,this._bucketCount=Le(n,this._bucketSize)||1;for(let s=0;s<this._bucketCount;++s)this._buckets.push(new Array(this._bucketSize));let i=Le(n,this._bucketSize);this._bucketFirst=this._bucketLast=(this._bucketCount>>1)-(i>>1),this._firstInBucket=this._lastInBucket=this._bucketSize-n%this._bucketSize>>1,this.pushMany(e)}get bucketSize(){return this._bucketSize}get autoCompactRatio(){return this._autoCompactRatio}set autoCompactRatio(e){this._autoCompactRatio=e}get bucketFirst(){return this._bucketFirst}get firstInBucket(){return this._firstInBucket}get bucketLast(){return this._bucketLast}get lastInBucket(){return this._lastInBucket}get bucketCount(){return this._bucketCount}get buckets(){return this._buckets}get length(){return this._length}get first(){if(this._length!==0)return this._buckets[this._bucketFirst][this._firstInBucket]}get last(){if(this._length!==0)return this._buckets[this._bucketLast][this._lastInBucket]}static fromArray(e,t){return new this(e,t)}push(e){return this._length&&(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._length+=1,this._buckets[this._bucketLast][this._lastInBucket]=e,this._maxLen>0&&this._length>this._maxLen&&this.shift(),!0}pop(){if(this._length===0)return;let e=this._buckets[this._bucketLast][this._lastInBucket];return this._length!==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._length-=1,this._autoCompact(),e}shift(){if(this._length===0)return;let e=this._buckets[this._bucketFirst][this._firstInBucket];return this._length!==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._length-=1,this._autoCompact(),e}unshift(e){return this._length&&(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._length+=1,this._buckets[this._bucketFirst][this._firstInBucket]=e,this._maxLen>0&&this._length>this._maxLen&&this.pop(),!0}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}unshiftMany(e=[]){let t=[];for(let n of e)this.toElementFn?t.push(this.unshift(this.toElementFn(n))):t.push(this.unshift(n));return t}isEmpty(){return this._length===0}clear(){this._buckets=[new Array(this._bucketSize)],this._bucketCount=1,this._bucketFirst=this._bucketLast=this._length=0,this._firstInBucket=this._lastInBucket=this._bucketSize>>1}at(e){if(e<0||e>=this._length)return;let{bucketIndex:t,indexInBucket:n}=this._getBucketAndPosition(e);return this._buckets[t][n]}setAt(e,t){W(e,0,this._length-1);let{bucketIndex:n,indexInBucket:i}=this._getBucketAndPosition(e);return this._buckets[n][i]=t,!0}addAt(e,t,n=1){let i=this._length;if(W(e,0,i),e===0)for(;n--;)this.unshift(t);else if(e===this._length)for(;n--;)this.push(t);else{let s=[];for(let o=e;o<this._length;++o){let d=this.at(o);d!==void 0&&s.push(d)}this.cut(e-1,!0);for(let o=0;o<n;++o)this.push(t);for(let o=0;o<s.length;++o)this.push(s[o])}return!0}cut(e,t=!1){if(t){if(e<0)return this.clear(),this;let{bucketIndex:n,indexInBucket:i}=this._getBucketAndPosition(e);return this._bucketLast=n,this._lastInBucket=i,this._length=e+1,this}else{let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});n._setBucketSize(this._bucketSize);for(let i=0;i<=e;i++){let s=this.at(i);s!==void 0&&n.push(s)}return n}}splice(e,t=this._length-e,...n){W(e,0,this._length),t<0&&(t=0),e+t>this._length&&(t=this._length-e);let i=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});i._setBucketSize(this._bucketSize);for(let o=0;o<t;o++){let d=this.at(e+o);d!==void 0&&i.push(d)}let s=[];for(let o=e+t;o<this._length;o++){let d=this.at(o);d!==void 0&&s.push(d)}this.cut(e-1,!0);for(let o of n)this.push(o);for(let o of s)this.push(o);return i}cutRest(e,t=!1){if(t){if(e<0)return this;let{bucketIndex:n,indexInBucket:i}=this._getBucketAndPosition(e);return this._bucketFirst=n,this._firstInBucket=i,this._length=this._length-e,this}else{let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});n._setBucketSize(this._bucketSize),e<0&&(e=0);for(let i=e;i<this._length;i++){let s=this.at(i);s!==void 0&&n.push(s)}return n}}deleteAt(e){W(e,0,this._length-1);let t;if(e===0)return this.shift();if(e===this._length-1)return t=this.last,this.pop(),t;{let n=this._length-1,{bucketIndex:i,indexInBucket:s}=this._getBucketAndPosition(e);t=this._buckets[i][s];for(let o=e;o<n;o++){let{bucketIndex:d,indexInBucket:a}=this._getBucketAndPosition(o),{bucketIndex:u,indexInBucket:f}=this._getBucketAndPosition(o+1);this._buckets[d][a]=this._buckets[u][f]}return this.pop(),t}}delete(e){let t=this._length;if(t===0)return!1;let n=0,i=0;for(;n<t;){let s=this.at(n);this._equals(s,e)||(this.setAt(i,s),i+=1),n+=1}return this.cut(i-1,!0),!0}deleteWhere(e){for(let t=0;t<this._length;t++){let n=this.at(t);if(e(n,t,this))return this.deleteAt(t),!0}return!1}setEquality(e){return this._equals=e,this}reverse(){this._buckets.reverse().forEach(function(s){s.reverse()});let{_bucketFirst:e,_bucketLast:t,_firstInBucket:n,_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-n-1,this}unique(){if(this._length<=1)return this;let e=1,t=this.at(0);for(let n=1;n<this._length;++n){let i=this.at(n);this._equals(i,t)||(t=i,this.setAt(e++,i))}return this.cut(e-1,!0),this}_autoCompact(){if(this._autoCompactRatio<=0||this._bucketCount<=1||(this._compactCounter++,this._compactCounter<this._bucketSize))return;this._compactCounter=0,this._length/(this._bucketCount*this._bucketSize)<this._autoCompactRatio&&this.shrinkToFit()}compact(){let e=this._bucketCount;return this.shrinkToFit(),this._bucketCount<e}shrinkToFit(){if(this._length===0)return;let e=[];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,this._bucketCount=e.length,this._compactCounter=0}clone(){return this._createLike(this,{bucketSize:this.bucketSize,toElementFn:this.toElementFn,maxLen:this._maxLen})}filter(e,t){let n=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});n._setBucketSize(this._bucketSize);let i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}mapSame(e,t){let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});n._setBucketSize(this._bucketSize);let i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{},bucketSize:this._bucketSize,maxLen:this._maxLen}),s=0;for(let o of this){let d=n===void 0?e(o,s,this):e.call(n,o,s,this);i.push(d),s++}return i}_setBucketSize(e){this._bucketSize=e,this._length===0&&(this._buckets=[new Array(this._bucketSize)],this._bucketCount=1,this._bucketFirst=this._bucketLast=0,this._firstInBucket=this._lastInBucket=this._bucketSize>>1)}*_getIterator(){for(let e=0;e<this._length;++e){let t=this.at(e);t!==void 0&&(yield t)}}_reallocate(e){let t=[],n=e||this._bucketCount>>1||1;for(let i=0;i<n;++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=n,this._bucketLast=t.length-1;for(let i=0;i<n;++i)t[t.length]=new Array(this._bucketSize);this._buckets=t,this._bucketCount=t.length}_getBucketAndPosition(e){let t,n,i=this._firstInBucket+e;return t=this._bucketFirst+Math.floor(i/this._bucketSize),t>=this._bucketCount&&(t-=this._bucketCount),n=(i+1)%this._bucketSize-1,n<0&&(n=this._bucketSize-1),{bucketIndex:t,indexInBucket:n}}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}*_getReverseIterator(){for(let e=this._length-1;e>-1;e--){let t=this.at(e);t!==void 0&&(yield t)}}};var j=class l extends z{constructor(e=[],t){super(t);h(this,"_equals",Object.is);h(this,"_elements",[]);h(this,"_DEFAULT_COMPARATOR",(e,t)=>((typeof e=="object"||typeof t=="object")&&m(TypeError,K.comparatorRequired("Heap")),e>t?1:e<t?-1:0));h(this,"_comparator",this._DEFAULT_COMPARATOR);if(t){let{comparator:n}=t;n&&(this._comparator=n)}this.addMany(e)}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 from(e,t){return new this(e,t)}static heapify(e,t){return new l(e,t)}add(e){return this._elements.push(e),this._bubbleUp(this.elements.length-1)}addMany(e){let t=[];for(let n of e)if(this.toElementFn){let i=this.add(this.toElementFn(n));t.push(i)}else{let i=this.add(n);t.push(i)}return t}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=Array.from(e),this.fix()}has(e){for(let t of this.elements)if(this._equals(t,e))return!0;return!1}delete(e){let t=-1;for(let n=0;n<this.elements.length;n++)if(this._equals(this.elements[n],e)){t=n;break}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)}deleteBy(e){let t=-1;for(let n=0;n<this.elements.length;n++)if(e(this.elements[n],n,this)){t=n;break}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)}setEquality(e){return this._equals=e,this}dfs(e="PRE"){let t=[],n=i=>{let s=2*i+1,o=s+1;i<this.size&&(e==="IN"?(n(s),t.push(this.elements[i]),n(o)):e==="PRE"?(t.push(this.elements[i]),n(s),n(o)):e==="POST"&&(n(s),n(o),t.push(this.elements[i])))};return n(0),t}fix(){let e=[];for(let t=Math.floor(this.size/2)-1;t>=0;t--)e.push(this._sinkDown(t,this.elements.length>>1));return e}sort(){let e=[],t=this._createInstance();for(let n of this.elements)t.add(n);for(;!t.isEmpty();){let n=t.poll();n!==void 0&&e.push(n)}return e}clone(){let e=this._createInstance();for(let t of this.elements)e.add(t);return e}filter(e,t){let n=this._createInstance(),i=0;for(let s of this)(t===void 0?e(s,i++,this):e.call(t,s,i++,this))?n.add(s):i++;return n}map(e,t,n){let{comparator:i,toElementFn:s,...o}=t!=null?t:{};i||m(TypeError,K.comparatorRequired("Heap.map"));let d=this._createLike([],{...o,comparator:i,toElementFn:s}),a=0;for(let u of this){let f=n===void 0?e(u,a++,this):e.call(n,u,a++,this);d.add(f)}return d}mapSame(e,t){let n=this._createInstance(),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.add(o)}return n}get comparator(){return this._comparator}*_getIterator(){for(let e of this.elements)yield e}_bubbleUp(e){let t=this.elements[e];for(;e>0;){let n=e-1>>1,i=this.elements[n];if(this.comparator(i,t)<=0)break;this.elements[e]=i,e=n}return this.elements[e]=t,!0}_sinkDown(e,t){let n=this.elements[e];for(;e<t;){let i=e<<1|1,s=i+1,o=this.elements[i];if(s<this.elements.length&&this.comparator(o,this.elements[s])>0&&(i=s,o=this.elements[s]),this.comparator(o,n)>=0)break;this.elements[e]=o,e=i}return this.elements[e]=n,!0}_createInstance(e){let t=this.constructor;return new t([],{comparator:this.comparator,toElementFn:this.toElementFn,...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}_spawnLike(e){return this._createLike([],e)}},Se=class{constructor(r,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=r,this.degree=e,this.marked=!1}},Je=class{constructor(r){h(this,"_root");h(this,"_size",0);h(this,"_min");h(this,"_comparator");this.clear(),this._comparator=r||this._defaultComparator,typeof this.comparator!="function"&&m(TypeError,K.notAFunction("comparator","FibonacciHeap"))}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(r){return this.push(r),!0}push(r){let e=this.createNode(r);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(r){let e=[];if(!r)return e;let t=r,n=!1;for(;!(t===r&&n);)t===r&&(n=!0),e.push(t),t=t.right;return e}mergeWithChild(r,e){r.child?(e.right=r.child.right,e.left=r.child,r.child.right.left=e,r.child.right=e):r.child=e}poll(){return this.pop()}pop(){if(this._size===0)return;let r=this.min;if(r.child){let e=this.consumeLinkedList(r.child);for(let t of e)this.mergeWithRoot(t),t.parent=void 0}return this.removeFromRoot(r),r===r.right?(this._min=void 0,this._root=void 0):(this._min=r.right,this._consolidate()),this._size--,r.element}merge(r){if(r.size!==0){if(this.root&&r.root){let e=this.root,t=r.root,n=e.right,i=t.left;e.right=t,t.left=e,n.left=i,i.right=n}else!this.root&&r.root&&(this._root=r.root);(!this.min||r.min&&this.comparator(r.min.element,this.min.element)<0)&&(this._min=r.min),this._size+=r.size,r.clear()}}createNode(r){return new Se(r)}isEmpty(){return this._size===0}_defaultComparator(r,e){return r<e?-1:r>e?1:0}mergeWithRoot(r){this.root?(r.right=this.root.right,r.left=this.root,this.root.right.left=r,this.root.right=r):this._root=r}removeFromRoot(r){this.root===r&&(this._root=r.right),r.left&&(r.left.right=r.right),r.right&&(r.right.left=r.left)}_link(r,e){this.removeFromRoot(r),r.left=r,r.right=r,this.mergeWithChild(e,r),e.degree++,r.parent=e}_consolidate(){let r=new Array(this._size),e=this.consumeLinkedList(this.root),t,n,i,s;for(let o of e){for(t=o,i=t.degree;r[i];)n=r[i],this.comparator(t.element,n.element)>0&&(s=t,t=n,n=s),this._link(n,t),r[i]=void 0,i++;r[i]=t}for(let o=0;o<r.length;o++)r[o]&&(!this.min||this.comparator(r[o].element,this.min.element)<=0)&&(this._min=r[o])}};var Ye=class extends j{constructor(r=[],e){super(r,{comparator:(t,n)=>((typeof t=="object"||typeof n=="object")&&m(TypeError,K.comparatorRequired("MaxHeap")),t<n?1:t>n?-1:0),...e})}};var Ze=class extends j{constructor(r=[],e){super(r,e)}};var w=class{constructor(r,e){h(this,"key");h(this,"value");this.key=r,this.value=e}},Q=class{constructor(r,e){h(this,"value");h(this,"weight");h(this,"_hashCode");this.weight=r!==void 0?r:1,this.value=e,this._hashCode=je()}get hashCode(){return this._hashCode}},Z=class extends D{constructor(e){super();h(this,"_options",{defaultEdgeWeight:1});h(this,"_vertexMap",new Map);let t=e==null?void 0:e.graph;this._options={defaultEdgeWeight:1,...t!=null?t:{}}}get options(){return this._options}get vertexMap(){return this._vertexMap}set vertexMap(e){this._vertexMap=e}get size(){return this._vertexMap.size}getVertex(e){return this._vertexMap.get(e)||void 0}hasVertex(e){return this._vertexMap.has(this._getVertexKey(e))}addVertex(e,t){if(e instanceof w)return this._addVertex(e);{let n=this.createVertex(e,t);return this._addVertex(n)}}isVertexKey(e){let t=typeof e;return t==="string"||t==="number"}removeManyVertices(e){let t=[];for(let n of e)t.push(this.deleteVertex(n));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,n,i){if(e instanceof Q)return this._addEdge(e);if(t instanceof w||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof w&&(e=e.key),t instanceof w&&(t=t.key);let s=this.createEdge(e,t,n,i);return this._addEdge(s)}else m(TypeError,K.invalidArgument("dest must be a Vertex or vertex key when srcOrEdge is an Edge.","Graph"))}setEdgeWeight(e,t,n){let i=this.getEdge(e,t);return i?(i.weight=n,!0):!1}getAllPathsBetween(e,t,n=1e3){let i=[],s=this._getVertex(e),o=this._getVertex(t);if(!(s&&o))return[];let d=[];for(d.push({vertex:s,path:[s]});d.length>0;){let{vertex:a,path:u}=d.pop();if(a===o&&(i.push(u),i.length>=n))return i;let f=this.getNeighbors(a);for(let c of f)if(!u.includes(c)){let _=[...u,c];d.push({vertex:c,path:_})}}return i}getPathSumWeight(e){var n;let t=0;for(let i=0;i<e.length;i++)t+=((n=this.getEdge(e[i],e[i+1]))==null?void 0:n.weight)||0;return t}getMinCostBetween(e,t,n){if(n===void 0&&(n=!1),n){let i=this.getAllPathsBetween(e,t),s=Number.MAX_SAFE_INTEGER;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,d=new P([s]);o.set(s,!0);let a=0;for(;d.length>0;){for(let u=0,f=d.length;u<f;u++){let c=d.shift();if(c===i)return a;if(c!==void 0){let _=this.getNeighbors(c);for(let g of _)o.has(g)||(o.set(g,!0),d.push(g))}}a++}return}}getMinPathBetween(e,t,n,i=!1){var s,o;if(n===void 0&&(n=!1),n)if(i){let d=this.getAllPathsBetween(e,t,1e4),a=Number.MAX_SAFE_INTEGER,u=-1,f=0;for(let c of d){let _=this.getPathSumWeight(c);_<a&&(a=_,u=f),f++}return d[u]||void 0}else return(o=(s=this.dijkstra(e,t,!0,!0))==null?void 0:s.minPath)!=null?o:[];else{let d=[],a=this._getVertex(e),u=this._getVertex(t);if(!(a&&u))return[];let f=(c,_,g,b)=>{if(g.add(c),c===_){d=[a,...b];return}let N=this.getNeighbors(c);for(let E of N)g.has(E)||(b.push(E),f(E,_,g,b),b.pop());g.delete(c)};return f(a,u,new Set,[]),d}}dijkstraWithoutHeap(e,t=void 0,n=!1,i=!1){let s=Number.MAX_SAFE_INTEGER,o,d=[],a=[],u=this._vertexMap,f=new Map,c=new Set,_=new Map,g=this._getVertex(e),b=t?this._getVertex(t):void 0;if(!g)return;for(let R of u){let y=R[1];y instanceof w&&f.set(y,Number.MAX_SAFE_INTEGER)}f.set(g,0),_.set(g,void 0);let N=()=>{let R=Number.MAX_SAFE_INTEGER,y;for(let[k,V]of f)c.has(k)||V<R&&(R=V,y=k);return y},E=R=>{for(let y of u){let k=y[1];if(k instanceof w){let V=[k],T=_.get(k);for(;T;)V.push(T),T=_.get(T);let M=V.reverse();y[1]===R&&(d=M),a.push(M)}}};for(let R=1;R<u.size;R++){let y=N();if(y){if(c.add(y),b&&b===y)return n&&(s=f.get(b)||Number.MAX_SAFE_INTEGER),i&&E(b),{distMap:f,preMap:_,seen:c,paths:a,minDist:s,minPath:d};let k=this.getNeighbors(y);for(let V of k)if(!c.has(V)){let T=this.getEdge(y,V);if(T){let M=f.get(y),L=f.get(V);M!==void 0&&L!==void 0&&T.weight+M<L&&(f.set(V,T.weight+M),_.set(V,y))}}}}return n&&f.forEach((R,y)=>{y!==g&&R<s&&(s=R,i&&(o=y))}),i&&E(o),{distMap:f,preMap:_,seen:c,paths:a,minDist:s,minPath:d}}dijkstra(e,t=void 0,n=!1,i=!1){var R;let s=Number.MAX_SAFE_INTEGER,o,d=[],a=[],u=this._vertexMap,f=new Map,c=new Set,_=new Map,g=this._getVertex(e),b=t?this._getVertex(t):void 0;if(!g)return;for(let y of u){let k=y[1];k instanceof w&&f.set(k,Number.MAX_SAFE_INTEGER)}let N=new j([],{comparator:(y,k)=>y.key-k.key});N.add({key:0,value:g}),f.set(g,0),_.set(g,void 0);let E=y=>{for(let k of u){let V=k[1];if(V instanceof w){let T=[V],M=_.get(V);for(;M;)T.push(M),M=_.get(M);let L=T.reverse();k[1]===y&&(d=L),a.push(L)}}};for(;N.size>0;){let y=N.poll(),k=y==null?void 0:y.key,V=y==null?void 0:y.value;if(k!==void 0&&V){if(c.add(V),b&&b===V)return n&&(s=f.get(b)||Number.MAX_SAFE_INTEGER),i&&E(b),{distMap:f,preMap:_,seen:c,paths:a,minDist:s,minPath:d};let T=this.getNeighbors(V);for(let M of T)if(!c.has(M)){let L=(R=this.getEdge(V,M))==null?void 0:R.weight;if(typeof L=="number"){let F=f.get(M);F!==void 0&&k+L<F&&(N.add({key:k+L,value:M}),_.set(M,V),f.set(M,k+L))}}}}return n&&f.forEach((y,k)=>{k!==g&&y<s&&(s=y,i&&(o=k))}),i&&E(o),{distMap:f,preMap:_,seen:c,paths:a,minDist:s,minPath:d}}bellmanFord(e,t,n,i){n===void 0&&(n=!1),i===void 0&&(i=!1);let s=this._getVertex(e),o=[],d=new Map,a=new Map,u=Number.MAX_SAFE_INTEGER,f=[],c;if(t&&(c=!1),!s)return{hasNegativeCycle:c,distMap:d,preMap:a,paths:o,min:u,minPath:f};let _=this._vertexMap,g=_.size,b=this.edgeSet(),N=b.length;this._vertexMap.forEach(R=>{d.set(R,Number.MAX_SAFE_INTEGER)}),d.set(s,0);for(let R=1;R<g;++R)for(let y=0;y<N;++y){let k=this.getEndsOfEdge(b[y]);if(k){let[V,T]=k,M=b[y].weight,L=d.get(V),F=d.get(T);L!==void 0&&F!==void 0&&d.get(V)!==Number.MAX_SAFE_INTEGER&&L+M<F&&(d.set(T,L+M),i&&a.set(T,V))}}let E;if(n&&d.forEach((R,y)=>{y!==s&&R<u&&(u=R,i&&(E=y))}),i)for(let R of _){let y=R[1];if(y instanceof w){let k=[y],V=a.get(y);for(;V!==void 0;)k.push(V),V=a.get(V);let T=k.reverse();R[1]===E&&(f=T),o.push(T)}}for(let R=0;R<N;++R){let y=this.getEndsOfEdge(b[R]);if(y){let[k]=y,V=b[R].weight,T=d.get(k);T&&T!==Number.MAX_SAFE_INTEGER&&T+V<T&&(c=!0)}}return{hasNegativeCycle:c,distMap:d,preMap:a,paths:o,min:u,minPath:f}}floydWarshall(){var s;let e=[...this._vertexMap],t=e.length,n=[],i=[];for(let o=0;o<t;o++){n[o]=[],i[o]=[];for(let d=0;d<t;d++)i[o][d]=void 0}for(let o=0;o<t;o++)for(let d=0;d<t;d++)n[o][d]=((s=this.getEdge(e[o][1],e[d][1]))==null?void 0:s.weight)||Number.MAX_SAFE_INTEGER;for(let o=0;o<t;o++)for(let d=0;d<t;d++)for(let a=0;a<t;a++)n[d][a]>n[d][o]+n[o][a]&&(n[d][a]=n[d][o]+n[o][a],i[d][a]=e[o][1]);return{costs:n,predecessor:i}}getCycles(e=!1){let t=[],n=new Set,i=(o,d,a)=>{if(a.has(o)){(!e&&d.length>2||e&&d.length>=2)&&d[0]===o.key&&t.push([...d]);return}a.add(o),d.push(o.key);for(let u of this.getNeighbors(o))u&&i(u,d,a);a.delete(o),d.pop()};for(let o of this.vertexMap.values())i(o,[],n);let s=new Map;for(let o of t){let d=[...o].sort().toString();s.has(d)||s.set(d,o)}return[...s].map(o=>o[1])}filter(e,t){let n=[],i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&n.push([s,o]),i++;return this._createLike(n,this._snapshotOptions())}filterEntries(e,t){let n=[],i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&n.push([s,o]),i++;return n}map(e,t){let n=[],i=0;for(let[s,o]of this)n.push(e.call(t,o,s,i,this)),i++;return n}clone(){return this._createLike(void 0,this._snapshotOptions())}*_getIterator(){for(let e of this._vertexMap.values())yield[e.key,e.value]}_snapshotOptions(){return{graph:{...this._options}}}_createInstance(e){let t=this.constructor,n=new t,i=e==null?void 0:e.graph;return i?n._options={...n._options,...i}:n._options={...n._options,...this._options},n}_createLike(e,t){let n=this._createInstance(t);if(e)for(let[s,o]of e)n.addVertex(s,o);else for(let[s,o]of this)n.addVertex(s,o);let i=this.edgeSet();for(let s of i){let o=this.getEndsOfEdge(s);if(!o)continue;let[d,a]=o,u=d.key,f=a.key,c=typeof n.hasVertex=="function"?n.hasVertex(u):!1,_=typeof n.hasVertex=="function"?n.hasVertex(f):!1;if(c&&_){let g=n.createEdge(u,f,s.weight,s.value);n._addEdge(g)}}return n}_addVertex(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 w?e.key:e}get _edgeConnector(){return"--"}toVisual(e){var d;let t=(d=e==null?void 0:e.showWeight)!=null?d:!0,n=[...this._vertexMap.values()],i=n.length,s=this.edgeSet().length,o=[`Graph (${i} vertices, ${s} edges):`];for(let a of n){let u=this.getNeighbors(a);if(u.length===0)o.push(` ${a.key} (isolated)`);else{let f=u.map(c=>{let _=this.getEdge(a,c);return _&&t&&_.weight!==void 0&&_.weight!==1?`${c.key} (${_.weight})`:`${c.key}`});o.push(` ${a.key} ${this._edgeConnector} ${f.join(", ")}`)}}return o.join(`
|
|
2
|
-
`)}toDot(e){var u,f;let t=(u=e==null?void 0:e.name)!=null?u:"G",n=(f=e==null?void 0:e.showWeight)!=null?f:!0,i=this._edgeConnector==="->",s=i?"digraph":"graph",o=i?"->":"--",d=[`${s} ${t} {`];for(let c of this._vertexMap.values())d.push(` "${c.key}";`);let a=new Set;for(let c of this._vertexMap.values())for(let
|
|
3
|
-
`)}print(e){console.log(this.toVisual(e))}};var ee=class extends w{constructor(r,e){super(r,e)}},le=class extends Q{constructor(e,t,n,i){super(n,i);h(this,"src");h(this,"dest");this.src=e,this.dest=t}},Te=class l extends Z{constructor(e){super(e);h(this,"_outEdgeMap",new Map);h(this,"_inEdgeMap",new Map)}get _edgeConnector(){return"->"}get outEdgeMap(){return this._outEdgeMap}set outEdgeMap(e){this._outEdgeMap=e}get inEdgeMap(){return this._inEdgeMap}set inEdgeMap(e){this._inEdgeMap=e}static fromKeys(e){let t=new l({vertexValueInitializer:n=>n});for(let n of e)t.addVertex(n);return t}static fromEntries(e){let t=new l;for(let[n,i]of e)t.addVertex(n,i);return t}createVertex(e,t){return new ee(e,t)}createEdge(e,t,n,i){var s;return new le(e,t,(s=n!=null?n:this.options.defaultEdgeWeight)!=null?s:1,i)}getEdge(e,t){let n=[];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&&(n=o.filter(d=>d.dest===s.key))}}return n[0]||void 0}deleteEdgeSrcToDest(e,t){let n=this._getVertex(e),i=this._getVertex(t),s;if(!n||!i)return;let o=this._outEdgeMap.get(n);o&&G(o,a=>a.dest===i.key);let d=this._inEdgeMap.get(i);return d&&(s=G(d,a=>a.src===n.key)[0]||void 0),s}deleteEdge(e,t){let n,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&&G(o,a=>a.src===i.key&&a.dest===(s==null?void 0:s.key));let d=this._inEdgeMap.get(s);d&&d.length>0&&(n=G(d,a=>a.src===i.key&&a.dest===s.key)[0])}return n}deleteVertex(e){let t,n;if(this.isVertexKey(e)?(n=this.getVertex(e),t=e):(n=e,t=this._getVertexKey(e)),n){let i=this.getNeighbors(n);for(let s of i)this.deleteEdgeSrcToDest(n,s);this._outEdgeMap.delete(n),this._inEdgeMap.delete(n)}return this._vertexMap.delete(t)}deleteEdgesBetween(e,t){let n=[];if(e&&t){let i=this.deleteEdgeSrcToDest(e,t),s=this.deleteEdgeSrcToDest(t,e);i&&n.push(i),s&&n.push(s)}return n}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=[],n=this.outgoingEdgesOf(e);for(let i of n){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 n=[],i=!1,s=o=>{t.set(o,1);let d=this.getDestinations(o);for(let a of d){let u=t.get(a);u===0?s(a):u===1&&(i=!0)}t.set(o,2),n.push(o)};for(let o of this.vertexMap)t.get(o[1])===0&&s(o[1]);if(!i)return e==="key"&&(n=n.map(o=>o instanceof ee?o.key:o)),n.reverse()}edgeSet(){let e=[];return this._outEdgeMap.forEach(t=>{e=[...e,...t]}),e}getNeighbors(e){let t=[],n=this._getVertex(e);if(n){let i=this.outgoingEdgesOf(n);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),n=this._getVertex(e.dest);if(t&&n)return[t,n]}isEmpty(){return this.vertexMap.size===0&&this.inEdgeMap.size===0&&this.outEdgeMap.size===0}clear(){this._vertexMap=new Map,this._inEdgeMap=new Map,this._outEdgeMap=new Map}clone(){return super.clone()}tarjan(){let e=new Map,t=new Map,n=new Map,i=0,s=[],o=new Set,d=a=>{e.set(a,i),t.set(a,i),i++,s.push(a),o.add(a);let u=this.getNeighbors(a);for(let f of u)e.has(f)?o.has(f)&&t.set(a,Math.min(t.get(a),e.get(f))):(d(f),t.set(a,Math.min(t.get(a),t.get(f))));if(e.get(a)===t.get(a)){let f=[],c;do c=s.pop(),o.delete(c),f.push(c);while(c!==a);n.set(n.size,f)}};for(let a of this.vertexMap.values())e.has(a)||d(a);return{dfnMap:e,lowMap:t,SCCs:n}}getDFNMap(){return this.tarjan().dfnMap}getLowMap(){return this.tarjan().lowMap}getSCCs(){return this.tarjan().SCCs}_addEdge(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let t=this._getVertex(e.src),n=this._getVertex(e.dest);if(t&&n){let i=this._outEdgeMap.get(t);i?i.push(e):this._outEdgeMap.set(t,[e]);let s=this._inEdgeMap.get(n);return s?s.push(e):this._inEdgeMap.set(n,[e]),!0}else return!1}};var ve=class extends w{constructor(r,e){super(r,e)}},we=class extends Q{constructor(e,t,n,i){super(n,i);h(this,"endpoints");this.endpoints=[e,t]}},et=class l extends Z{constructor(e){super(e);h(this,"_edgeMap");this._edgeMap=new Map}get edgeMap(){return this._edgeMap}set edgeMap(e){this._edgeMap=e}static fromKeys(e){let t=new l({vertexValueInitializer:n=>n});for(let n of e)t.addVertex(n);return t}static fromEntries(e){let t=new l;for(let[n,i]of e)t.addVertex(n,i);return t}createVertex(e,t){return new ve(e,t)}createEdge(e,t,n,i){var s;return new we(e,t,(s=n!=null?n:this.options.defaultEdgeWeight)!=null?s:1,i)}getEdge(e,t){var i;let n=[];if(e!==void 0&&t!==void 0){let s=this._getVertex(e),o=this._getVertex(t);s&&o&&(n=(i=this._edgeMap.get(s))==null?void 0:i.filter(d=>d.endpoints.includes(o.key)))}return n&&n[0]||void 0}deleteEdgeBetween(e,t){let n=this._getVertex(e),i=this._getVertex(t);if(!n||!i)return;let s=this._edgeMap.get(n),o;s&&(o=G(s,a=>a.endpoints.includes(i.key))[0]||void 0);let d=this._edgeMap.get(i);return d&&G(d,a=>a.endpoints.includes(n.key)),o}deleteEdge(e,t){let n,i;if(this.isVertexKey(e))if(this.isVertexKey(t))n=this._getVertex(e),i=this._getVertex(t);else return;else n=this._getVertex(e.endpoints[0]),i=this._getVertex(e.endpoints[1]);if(n&&i)return this.deleteEdgeBetween(n,i)}deleteVertex(e){let t,n;this.isVertexKey(e)?(n=this.getVertex(e),t=e):(n=e,t=this._getVertexKey(e));let i=this.getNeighbors(e);return n&&(i.forEach(s=>{let o=this._edgeMap.get(s);if(o){let d=o.filter(a=>!a.endpoints.includes(t));this._edgeMap.set(s,d)}}),this._edgeMap.delete(n)),this._vertexMap.delete(t)}degreeOf(e){var n;let t=this._getVertex(e);return t&&((n=this._edgeMap.get(t))==null?void 0:n.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(n=>{e.add(n)})}),[...e]}getNeighbors(e){let t=[],n=this._getVertex(e);if(n){let i=this.edgesOf(n);for(let s of i){let o=this._getVertex(s.endpoints.filter(d=>d!==n.key)[0]);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.endpoints[0],e.endpoints[1]))return;let t=this._getVertex(e.endpoints[0]),n=this._getVertex(e.endpoints[1]);if(t&&n)return[t,n]}isEmpty(){return this.vertexMap.size===0&&this.edgeMap.size===0}clear(){this._vertexMap=new Map,this._edgeMap=new Map}clone(){return super.clone()}tarjan(){let e=new Map,t=new Map,n=[],i=[],s=0,o=(d,a)=>{e.set(d,s),t.set(d,s),s++;let u=this.getNeighbors(d),f=0;for(let c of u)if(e.has(c))c!==a&&t.set(d,Math.min(t.get(d),e.get(c)));else{if(f++,o(c,d),t.set(d,Math.min(t.get(d),t.get(c))),t.get(c)>e.get(d)){let _=this.getEdge(d,c);_&&n.push(_)}a!==void 0&&t.get(c)>=e.get(d)&&i.push(d)}a===void 0&&f>1&&i.push(d)};for(let d of this.vertexMap.values())e.has(d)||o(d,void 0);return{dfnMap:e,lowMap:t,bridges:n,cutVertices:i}}getBiconnectedComponents(){let e=new Map,t=new Map,n=[],i=[],s=0,o=(d,a)=>{e.set(d,s),t.set(d,s),s++;let u=this.getNeighbors(d),f=0;for(let c of u){let _=this.getEdge(d,c);if(_){if(e.has(c))c!==a&&e.get(c)<e.get(d)&&(n.push(_),t.set(d,Math.min(t.get(d),e.get(c))));else if(f++,n.push(_),o(c,d),t.set(d,Math.min(t.get(d),t.get(c))),a===void 0&&f>1||a!==void 0&&t.get(c)>=e.get(d)){let g=[],b;do b=n.pop(),b&&g.push(b);while(b&&b!==_);g.length>0&&i.push(g)}}}};for(let d of this.vertexMap.values())e.has(d)||(o(d,void 0),n.length>0&&(i.push([...n]),n.length=0));return i}hasCycle(){let e=new Set,t=(n,i)=>{e.add(n);for(let s of this.getNeighbors(n))if(e.has(s)){if(s!==i)return!0}else if(t(s,n))return!0;return!1};for(let n of this.vertexMap.values())if(!e.has(n)&&t(n,void 0))return!0;return!1}getBridges(){return this.tarjan().bridges}getCutVertices(){return this.tarjan().cutVertices}getDFNMap(){return this.tarjan().dfnMap}getLowMap(){return this.tarjan().lowMap}_addEdge(e){for(let t of e.endpoints){let n=this._getVertex(t);if(n===void 0)return!1;if(n){let i=this._edgeMap.get(n);i?i.push(e):this._edgeMap.set(n,[e])}}return!0}};var Oe=class extends ee{constructor(e,t,n,i){super(e,t);h(this,"lat");h(this,"long");this.lat=n,this.long=i}},Fe=class extends le{constructor(r,e,t,n){super(r,e,t,n)}},tt=class l extends Te{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,n=this.originCoord[0],i=this.originCoord[1]){return new Oe(e,t,n,i)}createEdge(e,t,n,i){return new Fe(e,t,n,i)}clone(){return super.clone()}_snapshotOptions(){return{...super._snapshotOptions(),originCoord:this.originCoord,bottomRight:this.bottomRight}}_createInstance(e){let{originCoord:t,bottomRight:n}=e||{},i=t!=null?t:this.originCoord,s=n!=null?n:this.bottomRight;return new l(i,s)}};var he=class{constructor(r,e){h(this,"key");h(this,"value");h(this,"parent");h(this,"_left");h(this,"_right");h(this,"_height",0);h(this,"_color","BLACK");h(this,"_count",1);this.key=r,this.value=e}get left(){return this._left}set left(r){r&&(r.parent=this),this._left=r}get right(){return this._right}set right(r){r&&(r.parent=this),this._right=r}get height(){return this._height}set height(r){this._height=r}get color(){return this._color}set color(r){this._color=r}get count(){return this._count}set count(r){this._count=r}get familyPosition(){return this.parent?this.parent.left===this?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===this?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},Ee=class l extends D{constructor(e=[],t){super();h(this,"iterationType","ITERATIVE");h(this,"_isMapMode",!0);h(this,"_isDuplicate",!1);h(this,"_store",new Map);h(this,"_root");h(this,"_size",0);h(this,"_NIL",new he(NaN));h(this,"_toEntryFn");h(this,"_DEFAULT_NODE_CALLBACK",e=>e==null?void 0:e.key);if(t){let{iterationType:n,toEntryFn:i,isMapMode:s,isDuplicate:o}=t;n&&(this.iterationType=n),s!==void 0&&(this._isMapMode=s),o!==void 0&&(this._isDuplicate=o),typeof i=="function"?this._toEntryFn=i:i&&m(TypeError,K.notAFunction("toEntryFn","BinaryTree"))}e&&this.setMany(e)}get isMapMode(){return this._isMapMode}get isDuplicate(){return this._isDuplicate}get store(){return this._store}get root(){return this._root}get size(){return this._size}get NIL(){return this._NIL}get toEntryFn(){return this._toEntryFn}createNode(e,t){return new he(e,t)}createTree(e){return this._createInstance(e)}ensureNode(e,t=this.iterationType){if(e===null)return null;if(e!==void 0&&e!==this._NIL){if(this.isNode(e))return e;if(this.isEntry(e)){let n=e[0];return n===null?null:n===void 0?void 0:this.getNode(n,this._root,t)}return this.getNode(e,this._root,t)}}isNode(e){return e instanceof he}isRaw(e){return this._toEntryFn!==void 0&&typeof e=="object"}isRealNode(e){return e===this._NIL||e===null||e===void 0?!1:this.isNode(e)}isRealNodeOrNull(e){return e===null||this.isRealNode(e)}isNIL(e){return e===this._NIL}isRange(e){return e instanceof U}isLeaf(e){return e=this.ensureNode(e),e===void 0?!1:e===null?!0:!this.isRealNode(e.left)&&!this.isRealNode(e.right)}isEntry(e){return Array.isArray(e)&&e.length===2}isValidKey(e){return e===null?!0:Y(e)}add(e){return this.set(e)}set(e,t){let[n]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(n===void 0)return!1;if(!this._root)return this._setRoot(n),this._isMapMode&&n!==null&&n!==void 0&&this._store.set(n.key,n),n!==null&&(this._size=1),!0;let i=new P([this._root]),s;for(;i.length>0;){let o=i.shift();if(o){if(!this._isDuplicate&&n!==null&&o.key===n.key)return this._replaceNode(o,n),this._isMapMode&&n!==null&&this._store.set(o.key,n),!0;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)}}return s?(s.left===void 0?s.left=n:s.right===void 0&&(s.right=n),this._isMapMode&&n!==null&&n!==void 0&&this._store.set(n.key,n),n!==null&&this._size++,!0):!1}addMany(e){return this.setMany(e)}setMany(e,t){let n=[],i;t&&(i=t[Symbol.iterator]());for(let s of e){let o;if(i){let d=i.next();d.done||(o=d.value)}this.isRaw(s)&&(s=this._toEntryFn(s)),n.push(this.set(s,o))}return n}merge(e){this.setMany(e,[])}refill(e,t){this.clear(),this.setMany(e,t)}delete(e){let t=[];if(!this._root)return t;let n=this.getNode(e);if(!n)return t;let i=n==null?void 0:n.parent,s,o=n;if(!n.left&&!n.right&&!i)this._setRoot(void 0);else if(n.left){let d=this.getRightMost(a=>a,n.left);if(d){let a=d.parent;o=this._swapProperties(n,d),this._isMapMode&&(this._store.set(n.key,n),this._store.set(d.key,d)),a&&(a.right===d?a.right=d.left:a.left=d.left,s=a)}}else if(i){let{familyPosition:d}=n;d==="LEFT"||d==="ROOT_LEFT"?i.left=n.right:(d==="RIGHT"||d==="ROOT_RIGHT")&&(i.right=n.right),s=i}else this._setRoot(n.right),n.right=void 0;return this._size=this._size-1,t.push({deleted:o,needBalanced:s}),this._isMapMode&&o&&this._store.delete(o.key),t}search(e,t=!1,n=this._DEFAULT_NODE_CALLBACK,i=this._root,s=this.iterationType){if(e===void 0)return[];if(e===null)return[];if(i=this.ensureNode(i),!i)return[];let o=this._ensurePredicate(e),d=[];if(s==="RECURSIVE"){let a=u=>{o(u)&&(d.push(n(u)),t)||!this.isRealNode(u.left)&&!this.isRealNode(u.right)||(this.isRealNode(u.left)&&a(u.left),this.isRealNode(u.right)&&a(u.right))};a(i)}else{let a=[i];for(;a.length>0;){let u=a.pop();if(this.isRealNode(u)){if(o(u)&&(d.push(n(u)),t))return d;this.isRealNode(u.left)&&a.push(u.left),this.isRealNode(u.right)&&a.push(u.right)}}}return d}getNodes(e,t=!1,n=this._root,i=this.iterationType){return this.search(e,t,s=>s,n,i)}getNode(e,t=this._root,n=this.iterationType){if(this._isMapMode&&e!==null&&e!==void 0&&!this._isPredicate(e)){let i=this._extractKey(e);return i==null?void 0:this._store.get(i)}return this.search(e,!0,i=>i,t,n)[0]}get(e,t=this._root,n=this.iterationType){var i,s;if(this._isMapMode){let o=this._extractKey(e);return o==null||(i=this._store.get(o))==null?void 0:i.value}return(s=this.getNode(e,t,n))==null?void 0:s.value}has(e,t=this._root,n=this.iterationType){if(this._isMapMode&&e!==void 0&&e!==null&&!this._isPredicate(e)){let i=this._extractKey(e);return i==null?!1:this._store.has(i)}return this.search(e,!0,i=>i,t,n).length>0}clear(){this._clearNodes(),this._isMapMode&&this._clearValues()}isEmpty(){return this._size===0}isPerfectlyBalanced(e=this._root){return this.getMinHeight(e)+1>=this.getHeight(e)}isBST(e=this._root,t=this.iterationType){let n=this.ensureNode(e);if(!n)return!0;if(t==="RECURSIVE"){let i=(d,a,u)=>{if(!this.isRealNode(d))return!0;let f=Number(d.key);return f<=a||f>=u?!1:i(d.left,a,f)&&i(d.right,f,u)},s=i(n,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),o=i(n,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);return s||o}else{let i=(d=!1)=>{let a=[],u=d?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,f=n;for(;this.isRealNode(f)||a.length>0;){for(;this.isRealNode(f);)a.push(f),f=f.left;f=a.pop();let c=Number(f.key);if(!this.isRealNode(f)||!d&&u>=c||d&&u<=c)return!1;u=c,f=f.right}return!0},s=i(),o=i(!0);return s||o}}getDepth(e,t=this._root){let n=this.ensureNode(e),i=this.ensureNode(t),s=0;for(;n!=null&&n.parent;){if(n===i)return s;s++,n=n.parent}return s}getHeight(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!this.isRealNode(e))return-1;if(t==="RECURSIVE"){let n=i=>{if(!this.isRealNode(i))return-1;let s=n(i.left),o=n(i.right);return Math.max(s,o)+1};return n(e)}else{let n=[{node:e,depth:0}],i=0;for(;n.length>0;){let{node:s,depth:o}=n.pop();this.isRealNode(s.left)&&n.push({node:s.left,depth:o+1}),this.isRealNode(s.right)&&n.push({node:s.right,depth:o+1}),i=Math.max(i,o)}return i}}getMinHeight(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!e)return-1;if(t==="RECURSIVE"){let n=i=>{if(!this.isRealNode(i)||!this.isRealNode(i.left)&&!this.isRealNode(i.right))return 0;let s=n(i.left),o=n(i.right);return Math.min(s,o)+1};return n(e)}else{let n=[],i=e,s=null,o=new Map;for(;n.length>0||i;)if(this.isRealNode(i))n.push(i),i=i.left;else if(i=n[n.length-1],!this.isRealNode(i.right)||s===i.right){if(i=n.pop(),this.isRealNode(i)){let d=this.isRealNode(i.left)?o.get(i.left):-1,a=this.isRealNode(i.right)?o.get(i.right):-1;o.set(i,1+Math.min(d,a)),s=i,i=null}}else i=i.right;return o.get(e)}}getPathToRoot(e,t=this._DEFAULT_NODE_CALLBACK,n=!1){let i=[],s=this.ensureNode(e);if(!s)return i;for(;s.parent;)i.push(t(s)),s=s.parent;return i.push(t(s)),n?i.reverse():i}getLeftMost(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){if(this.isNIL(t))return e(void 0);let i=this.ensureNode(t);if(!this.isRealNode(i))return e(void 0);if(n==="RECURSIVE"){let s=o=>{let{left:d}=o;return this.isRealNode(d)?s(d):o};return e(s(i))}else{let s=Ce(o=>{let{left:d}=o;return this.isRealNode(d)?Ie(()=>s(d)):o});return e(s(i))}}getRightMost(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){if(this.isNIL(t)||(t=this.ensureNode(t),!t))return e(void 0);if(n==="RECURSIVE"){let i=s=>{let{right:o}=s;return this.isRealNode(o)?i(o):s};return e(i(t))}else{let i=Ce(s=>{let{right:o}=s;return this.isRealNode(o)?Ie(()=>i(o)):s});return e(i(t))}}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(n=>n,e.right);let t=e.parent;for(;this.isRealNode(t)&&e===t.right;)e=t,t=t.parent;return t}dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=!1,i=this._root,s=this.iterationType,o=!1){return i=this.ensureNode(i),i?this._dfs(e,t,n,i,s,o):[]}bfs(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType,i=!1){if(t=this.ensureNode(t),!t)return[];let s=[];if(n==="RECURSIVE"){let o=new P([t]),d=a=>{if(o.length===0)return;let u=o.shift();s.push(e(u)),i?(u&&this.isRealNodeOrNull(u.left)&&o.push(u.left),u&&this.isRealNodeOrNull(u.right)&&o.push(u.right)):(this.isRealNode(u.left)&&o.push(u.left),this.isRealNode(u.right)&&o.push(u.right)),d(a+1)};d(0)}else{let o=new P([t]);for(;o.length>0;){let d=o.length;for(let a=0;a<d;a++){let u=o.shift();s.push(e(u)),i?(u&&this.isRealNodeOrNull(u.left)&&o.push(u.left),u&&this.isRealNodeOrNull(u.right)&&o.push(u.right)):(this.isRealNode(u.left)&&o.push(u.left),this.isRealNode(u.right)&&o.push(u.right))}}}return s}leaves(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){t=this.ensureNode(t);let i=[];if(!this.isRealNode(t))return[];if(n==="RECURSIVE"){let s=o=>{this.isLeaf(o)&&i.push(e(o)),!(!this.isRealNode(o.left)&&!this.isRealNode(o.right))&&(this.isRealNode(o.left)&&s(o.left),this.isRealNode(o.right)&&s(o.right))};s(t)}else{let s=[t];for(;s.length>0;){let o=s.pop();this.isRealNode(o)&&(this.isLeaf(o)&&i.push(e(o)),this.isRealNode(o.right)&&s.push(o.right),this.isRealNode(o.left)&&s.push(o.left))}}return i}listLevels(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType,i=!1){t=this.ensureNode(t);let s=[];if(!t)return s;if(n==="RECURSIVE"){let o=(d,a)=>{s[a]||(s[a]=[]),s[a].push(e(d)),i?(d&&this.isRealNodeOrNull(d.left)&&o(d.left,a+1),d&&this.isRealNodeOrNull(d.right)&&o(d.right,a+1)):(d&&d.left&&o(d.left,a+1),d&&d.right&&o(d.right,a+1))};o(t,0)}else{let o=[[t,0]];for(;o.length>0;){let d=o.pop(),[a,u]=d;s[u]||(s[u]=[]),s[u].push(e(a)),i?(a&&this.isRealNodeOrNull(a.right)&&o.push([a.right,u+1]),a&&this.isRealNodeOrNull(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}morris(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=this._root){if(n=this.ensureNode(n),!n)return[];let i=[],s=n,o=a=>{let u=null,f=null;for(;a;)f=a.right,a.right=u,u=a,a=f;return u},d=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,d(s.left)}s=s.right}d(n);break}return i}clone(){let e=this._createInstance();return this._clone(e),e}filter(e,t){let n=this._createInstance(),i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&n.set([s,o]);return n}map(e,t,n){let i=this._createLike([],t),s=0;for(let[o,d]of this)i.set(e.call(n,d,o,s++,this));return i}toVisual(e=this._root,t){let n={isShowUndefined:!1,isShowNull:!0,isShowRedBlackNIL:!1,...t};e=this.ensureNode(e);let i="";return e&&(n.isShowUndefined&&(i+=`U for undefined
|
|
1
|
+
"use strict";var dataStructureTyped=(()=>{var Be=Object.defineProperty;var Vt=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var Tt=Object.prototype.hasOwnProperty;var _t=l=>{throw TypeError(l)};var Et=(l,r,e)=>r in l?Be(l,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):l[r]=e;var Nt=(l,r)=>{for(var e in r)Be(l,e,{get:r[e],enumerable:!0})},Rt=(l,r,e,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of yt(r))!Tt.call(l,n)&&n!==e&&Be(l,n,{get:()=>r[n],enumerable:!(t=Vt(r,n))||t.enumerable});return l};var kt=l=>Rt(Be({},"__esModule",{value:!0}),l);var h=(l,r,e)=>Et(l,typeof r!="symbol"?r+"":r,e),gt=(l,r,e)=>r.has(l)||_t("Cannot "+e);var p=(l,r,e)=>(gt(l,r,"read from private field"),e?e.call(l):r.get(l)),v=(l,r,e)=>r.has(l)?_t("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(l):r.set(l,e),C=(l,r,e,t)=>(gt(l,r,"write to private field"),t?t.call(l,e):r.set(l,e),e);var vt={};Nt(vt,{AVLTree:()=>rt,AVLTreeNode:()=>Re,AbstractEdge:()=>Y,AbstractGraph:()=>ne,AbstractVertex:()=>w,BST:()=>re,BSTNode:()=>Ne,BinaryIndexedTree:()=>nt,BinaryTree:()=>Ee,BinaryTreeNode:()=>pe,Character:()=>Ae,DFSOperation:()=>ze,Deque:()=>Xe,DirectedEdge:()=>ce,DirectedGraph:()=>Te,DirectedVertex:()=>ie,DoublyLinkedList:()=>Ge,DoublyLinkedListNode:()=>ye,ERR:()=>K,FibonacciHeap:()=>Je,FibonacciHeapNode:()=>ve,HashMap:()=>Ue,Heap:()=>H,IterableElementBase:()=>P,IterableEntryBase:()=>z,LinearBase:()=>G,LinearLinkedBase:()=>ee,LinkedHashMap:()=>qe,LinkedListNode:()=>Z,LinkedListQueue:()=>Qe,MapEdge:()=>Fe,MapGraph:()=>tt,MapVertex:()=>Oe,Matrix:()=>lt,MaxHeap:()=>Ye,MaxPriorityQueue:()=>ut,MinHeap:()=>Ze,MinPriorityQueue:()=>at,Navigator:()=>ht,PriorityQueue:()=>de,Queue:()=>j,Range:()=>q,RedBlackTree:()=>U,RedBlackTreeNode:()=>_e,SegmentTree:()=>it,SinglyLinkedList:()=>Ve,SinglyLinkedListNode:()=>ue,SkipList:()=>We,SkipListNode:()=>he,Stack:()=>$e,TreeMap:()=>ot,TreeMultiMap:()=>st,TreeMultiSet:()=>dt,TreeNode:()=>ct,TreeSet:()=>se,Trie:()=>ft,TrieNode:()=>Ke,UndirectedEdge:()=>we,UndirectedGraph:()=>et,UndirectedVertex:()=>Ce,arrayRemove:()=>W,asyncTrampoline:()=>Kt,calcMinUnitsRequired:()=>Le,getMSB:()=>Mt,isComparable:()=>te,isTrampolineThunk:()=>He,isWeakKey:()=>J,makeAsyncTrampoline:()=>Lt,makeTrampoline:()=>Se,makeTrampolineThunk:()=>Ie,raise:()=>m,rangeCheck:()=>$,roundFixed:()=>Bt,throwRangeError:()=>xt,toBinaryString:()=>It,trampoline:()=>mt,uuidV4:()=>je});var z=class{*[Symbol.iterator](...r){yield*this._getIterator(...r)}*entries(){for(let r of this)yield r}*keys(){for(let r of this)yield r[0]}*values(){for(let r of this)yield r[1]}every(r,e){let t=0;for(let n of this)if(!r.call(e,n[1],n[0],t++,this))return!1;return!0}some(r,e){let t=0;for(let n of this)if(r.call(e,n[1],n[0],t++,this))return!0;return!1}forEach(r,e){let t=0;for(let n of this){let[i,s]=n;r.call(e,s,i,t++,this)}}find(r,e){let t=0;for(let n of this){let[i,s]=n;if(r.call(e,s,i,t++,this))return n}}has(r){for(let e of this){let[t]=e;if(t===r)return!0}return!1}hasValue(r){for(let[,e]of this)if(e===r)return!0;return!1}get(r){for(let e of this){let[t,n]=e;if(t===r)return n}}reduce(r,e){let t=e,n=0;for(let i of this){let[s,o]=i;t=r(t,o,s,n++,this)}return t}toArray(){return[...this]}toVisual(){return[...this]}print(){console.log(this.toVisual())}};function m(l,r){throw new l(r)}var K={indexOutOfRange:(l,r,e,t)=>`${t?t+": ":""}Index ${l} is out of range [${r}, ${e}].`,invalidIndex:l=>`${l?l+": ":""}Index must be an integer.`,invalidArgument:(l,r)=>`${r?r+": ":""}${l}`,comparatorRequired:l=>`${l?l+": ":""}Comparator is required for non-number/non-string/non-Date keys.`,invalidKey:(l,r)=>`${r?r+": ":""}${l}`,notAFunction:(l,r)=>`${r?r+": ":""}${l} must be a function.`,invalidEntry:l=>`${l?l+": ":""}Each entry must be a [key, value] tuple.`,invalidNaN:l=>`${l?l+": ":""}NaN is not a valid key.`,invalidDate:l=>`${l?l+": ":""}Invalid Date key.`,reduceEmpty:l=>`${l?l+": ":""}Reduce of empty structure with no initial value.`,callbackReturnType:(l,r,e)=>`${e?e+": ":""}Callback must return ${l}; got ${r}.`,invalidOperation:(l,r)=>`${r?r+": ":""}${l}`,matrixDimensionMismatch:l=>`Matrix: Dimensions must be compatible for ${l}.`,matrixSingular:()=>"Matrix: Singular matrix, inverse does not exist.",matrixNotSquare:()=>"Matrix: Must be square for inversion.",matrixNotRectangular:()=>"Matrix: Must be rectangular for transposition.",matrixRowMismatch:(l,r)=>`Matrix: Expected row length ${l}, but got ${r}.`,orderStatisticNotEnabled:(l,r)=>`${r?r+": ":""}${l}() requires enableOrderStatistic: true.`};var ze=(e=>(e[e.VISIT=0]="VISIT",e[e.PROCESS=1]="PROCESS",e))(ze||{}),q=class{constructor(r,e,t=!0,n=!0){this.low=r;this.high=e;this.includeLow=t;this.includeHigh=n}isInRange(r,e){let t=this.includeLow?e(r,this.low)>=0:e(r,this.low)>0,n=this.includeHigh?e(r,this.high)<=0:e(r,this.high)<0;return t&&n}};var P=class{constructor(r){h(this,"_toElementFn");if(r){let{toElementFn:e}=r;typeof e=="function"?this._toElementFn=e:e&&m(TypeError,"toElementFn must be a function type")}}get toElementFn(){return this._toElementFn}*[Symbol.iterator](...r){yield*this._getIterator(...r)}*values(){for(let r of this)yield r}every(r,e){let t=0;for(let n of this)if(e===void 0){if(!r(n,t++,this))return!1}else if(!r.call(e,n,t++,this))return!1;return!0}some(r,e){let t=0;for(let n of this)if(e===void 0){if(r(n,t++,this))return!0}else if(r.call(e,n,t++,this))return!0;return!1}forEach(r,e){let t=0;for(let n of this)e===void 0?r(n,t++,this):r.call(e,n,t++,this)}find(r,e){let t=0;for(let n of this)if(e===void 0){if(r(n,t++,this))return n}else if(r.call(e,n,t++,this))return n}has(r){for(let e of this)if(e===r)return!0;return!1}includes(r){return this.has(r)}*entries(){let r=0;for(let e of this)yield[r++,e]}*keys(){let r=0;for(let e of this)yield r++}reduce(r,e){let t=0,n=this[Symbol.iterator](),i;if(arguments.length>=2)i=e;else{let s=n.next();s.done&&m(TypeError,"Reduce of empty structure with no initial value"),i=s.value,t=1}for(let s of n)i=r(i,s,t++,this);return i}toArray(){return[...this]}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var Z=class{constructor(r){h(this,"_value");h(this,"_next");this._value=r,this._next=void 0}get value(){return this._value}set value(r){this._value=r}get next(){return this._next}set next(r){this._next=r}},G=class l extends P{constructor(e){super(e);h(this,"_maxLen",-1);if(e){let{maxLen:t}=e;typeof t=="number"&&t>0&&t%1===0&&(this._maxLen=t)}}get maxLen(){return this._maxLen}indexOf(e,t=0){if(this.length===0)return-1;t<0&&(t=this.length+t),t<0&&(t=0);for(let n=t;n<this.length;n++)if(this.at(n)===e)return n;return-1}lastIndexOf(e,t=this.length-1){if(this.length===0)return-1;t>=this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(let n=t;n>=0;n--)if(this.at(n)===e)return n;return-1}findIndex(e,t){for(let n=0;n<this.length;n++){let i=this.at(n);if(i!==void 0&&e.call(t,i,n,this))return n}return-1}concat(...e){let t=this.clone();for(let n of e)n instanceof l?t.pushMany(n):t.push(n);return t}sort(e){let t=this.toArray();t.sort(e),this.clear();for(let n of t)this.push(n);return this}splice(e,t=0,...n){let i=this._createInstance();e=e<0?this.length+e:e,e=Math.max(0,Math.min(e,this.length)),t=Math.max(0,Math.min(t,this.length-e));for(let s=0;s<t;s++){let o=this.deleteAt(e);o!==void 0&&i.push(o)}for(let s=0;s<n.length;s++)this.addAt(e+s,n[s]);return i}join(e=","){return this.toArray().join(e)}toReversedArray(){let e=[];for(let t=this.length-1;t>=0;t--)e.push(this.at(t));return e}reduceRight(e,t){let n=t!=null?t:0;for(let i=this.length-1;i>=0;i--)n=e(n,this.at(i),i,this);return n}slice(e=0,t=this.length){e=e<0?this.length+e:e,t=t<0?this.length+t:t;let n=this._createInstance();for(let i=e;i<t;i++)n.push(this.at(i));return n}fill(e,t=0,n=this.length){if(t=t<0?this.length+t:t,n=n<0?this.length+n:n,t<0&&(t=0),n>this.length&&(n=this.length),t>=n)return this;for(let i=t;i<n;i++)this.setAt(i,e);return this}toReversed(){let e=this.clone();return e.reverse(),e}},ee=class extends G{constructor(r){if(super(r),r){let{maxLen:e}=r;typeof e=="number"&&e>0&&e%1===0&&(this._maxLen=e)}}indexOf(r,e=0){let t=this._getIterator(),n=t.next(),i=0;for(;i<e;)n=t.next(),i++;for(;!n.done;){if(n.value===r)return i;n=t.next(),i++}return-1}lastIndexOf(r,e=this.length-1){let t=this._getReverseIterator(),n=t.next(),i=this.length-1;for(;i>e;)n=t.next(),i--;for(;!n.done;){if(n.value===r)return i;n=t.next(),i--}return-1}concat(...r){let e=this.clone();for(let t of r)t instanceof G?e.pushMany(t):e.push(t);return e}slice(r=0,e=this.length){r=r<0?this.length+r:r,e=e<0?this.length+e:e;let t=this._createInstance(),n=this._getIterator(),i=n.next(),s=0;for(;s<r;)i=n.next(),s++;for(let o=r;o<e;o++)t.push(i.value),i=n.next();return t}splice(r,e=0,...t){let n=this._createInstance();r=r<0?this.length+r:r,r=Math.max(0,Math.min(r,this.length)),e=Math.max(0,e);let i=0,s,o,d=this._getNodeIterator();for(let a of d){if(i===r){s=a;break}o=a,i++}for(let a=0;a<e&&s;a++){n.push(s.value);let u=s.next;this.delete(s),s=u}for(let a=0;a<t.length;a++)o?(this.addAfter(o,t[a]),o=o.next):(this.addAt(0,t[a]),o=this._getNodeIterator().next().value);return n}reduceRight(r,e){let t=e!=null?e:0,n=this.length-1;for(let i of this._getReverseIterator())t=r(t,i,n--,this);return t}};var je=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(l){let r=Math.random()*16|0;return(l=="x"?r:r&3|8).toString(16)})},W=function(l,r){let e=-1,t=l?l.length:0,n=[];for(;++e<t;){let i=l[e];r(i,e,l)&&(n.push(i),Array.prototype.splice.call(l,e--,1),t--)}return n},Mt=l=>l<=0?0:1<<31-Math.clz32(l),$=(l,r,e,t)=>{if(l<r||l>e)throw new RangeError(t!=null?t:`Index ${l} is out of range [${r}, ${e}].`)},xt=(l="The value is off-limits.")=>{throw new RangeError(l)},J=l=>{let r=typeof l;return r==="object"&&l!==null||r==="function"},Le=(l,r)=>Math.floor((l+r-1)/r),Bt=(l,r=10)=>{let e=Math.pow(10,r);return Math.round(l*e)/e};function Pe(l){let r=typeof l;return r==="number"?!0:r==="bigint"||r==="string"||r==="boolean"}function bt(l){if(typeof l.valueOf=="function"){let r=l.valueOf();if(r!==l){if(Pe(r))return r;if(typeof r=="object"&&r!==null)return bt(r)}}if(typeof l.toString=="function"){let r=l.toString();if(r!=="[object Object]")return r}return null}function te(l,r=!1){if(l==null)return!1;if(Pe(l))return!0;if(typeof l!="object")return!1;if(l instanceof Date||r)return!0;let e=bt(l);return e==null?!1:Pe(e)}var Ie=l=>({isThunk:!0,fn:l}),He=l=>typeof l=="object"&&l!==null&&"isThunk"in l&&l.isThunk;function mt(l){let r=l;for(;He(r);)r=r.fn();return r}function Se(l){return(...r)=>mt(l(...r))}async function Kt(l){let r=await l;for(;He(r);)r=await r.fn();return r}function Lt(l){return async(...r)=>Kt(l(...r))}function It(l,r=32){let e=(l>>>0).toString(2);return e=e.padStart(r,"0"),e}var Ue=class extends z{constructor(e=[],t){super();h(this,"_store",{});h(this,"_objMap",new Map);h(this,"_toEntryFn");h(this,"_size",0);h(this,"_hashFn",e=>String(e));if(t){let{hashFn:n,toEntryFn:i}=t;n&&(this._hashFn=n),i&&(this._toEntryFn=i)}e&&this.setMany(e)}get store(){return this._store}get objMap(){return this._objMap}get toEntryFn(){return this._toEntryFn}get size(){return this._size}get hashFn(){return this._hashFn}isEmpty(){return this._size===0}clear(){this._store={},this._objMap.clear(),this._size=0}isEntry(e){return Array.isArray(e)&&e.length===2}set(e,t){if(this._isObjKey(e))this.objMap.has(e)||this._size++,this.objMap.set(e,t);else{let n=this._getNoObjKey(e);this.store[n]===void 0&&this._size++,this._store[n]={key:e,value:t}}return this}setMany(e){let t=[];for(let n of e){let i,s;if(this.isEntry(n)?[i,s]=n:this._toEntryFn&&([i,s]=this._toEntryFn(n)),i!==void 0&&s!==void 0){let o=this._size;this.set(i,s),t.push(o<this._size)}}return t}get(e){var n;if(this._isObjKey(e))return this.objMap.get(e);let t=this._getNoObjKey(e);return(n=this._store[t])==null?void 0:n.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}setHashFn(e){return this._hashFn===e?this:(this._hashFn=e,this._rehashNoObj(),this)}clone(){let e={hashFn:this._hashFn,toEntryFn:this._toEntryFn};return this._createLike(this,e)}map(e,t){let n=this._createLike(),i=0;for(let[s,o]of this)n.set(s,e.call(t,o,s,i++,this));return n}filter(e,t){let n=this._createLike(),i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&n.set(s,o);return n}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}_rehashNoObj(){let e={};for(let{key:t,value:n}of Object.values(this._store)){let i=this._getNoObjKey(t);e[i]={key:t,value:n}}this._store=e}*_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,n;return t!=="string"&&t!=="number"&&t!=="symbol"?n=this._hashFn(e):n=e,n}},qe=class extends z{constructor(e=[],t){super();h(this,"_sentinel");h(this,"_hashFn",e=>String(e));h(this,"_objHashFn",e=>e);h(this,"_noObjMap",{});h(this,"_objMap",new WeakMap);h(this,"_head");h(this,"_tail");h(this,"_toEntryFn",e=>{if(this.isEntry(e))return e;m(TypeError,K.invalidArgument("If elements do not adhere to [key, value], provide options.toEntryFn to transform raw records.","HashMap"))});h(this,"_size",0);if(this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel,t){let{hashFn:n,objHashFn:i,toEntryFn:s}=t;n&&(this._hashFn=n),i&&(this._objHashFn=i),s&&(this._toEntryFn=s)}e&&this.setMany(e)}get hashFn(){return this._hashFn}get objHashFn(){return this._objHashFn}get noObjMap(){return this._noObjMap}get objMap(){return this._objMap}get head(){return this._head}get tail(){return this._tail}get toEntryFn(){return this._toEntryFn}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 n,i=!this.has(e);if(J(e)){let s=this._objHashFn(e);n=this.objMap.get(s),!n&&i?(n={key:s,value:t,prev:this.tail,next:this._sentinel},this.objMap.set(s,n)):n&&(n.value=t)}else{let s=this._hashFn(e);n=this.noObjMap[s],!n&&i?this.noObjMap[s]=n={key:e,value:t,prev:this.tail,next:this._sentinel}:n&&(n.value=t)}return n&&i&&(this._size===0?(this._head=n,this._sentinel.next=n):(this.tail.next=n,n.prev=this.tail),this._tail=n,this._sentinel.prev=n,this._size++),this}setMany(e){let t=[];for(let n of e){let i,s;if(this.isEntry(n)?[i,s]=n:this._toEntryFn&&([i,s]=this._toEntryFn(n)),i!==void 0&&s!==void 0){let o=this._size;this.set(i,s),t.push(o<this._size)}}return t}has(e){if(J(e)){let n=this._objHashFn(e);return this.objMap.has(n)}return this._hashFn(e)in this.noObjMap}get(e){if(J(e)){let i=this._objHashFn(e),s=this.objMap.get(i);return s?s.value:void 0}let t=this._hashFn(e),n=this.noObjMap[t];return n?n.value:void 0}at(e){$(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return t.value}delete(e){let t;if(J(e)){let n=this._objHashFn(e);if(t=this.objMap.get(n),!t)return!1;this.objMap.delete(n)}else{let n=this._hashFn(e);if(t=this.noObjMap[n],!t)return!1;delete this.noObjMap[n]}return this._deleteNode(t)}deleteWhere(e){let t=this._head,n=0;for(;t!==this._sentinel;){let i=t;if(t=t.next,e(i.key,i.value,n++,this)){let s=i.key;if(J(s))this._objMap.delete(s);else{let o=this._hashFn(i.key);delete this._noObjMap[o]}return this._deleteNode(i)}}return!1}deleteAt(e){$(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;let n=[t.key,t.value];return this._deleteNode(t),n}isEmpty(){return this._size===0}isEntry(e){return Array.isArray(e)&&e.length===2}clear(){this._noObjMap={},this._size=0,this._head=this._tail=this._sentinel.prev=this._sentinel.next=this._sentinel}clone(){let e={hashFn:this._hashFn,objHashFn:this._objHashFn};return this._createLike(this,e)}filter(e,t){let n=this._createLike(),i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&n.set(s,o),i++;return n}map(e,t){let n=this._createLike(),i=0;for(let[s,o]of this){let[d,a]=e.call(t,o,s,i,this);n.set(d,a),i++}return n}*_getIterator(){let e=this.head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}_deleteNode(e){let t=e.key;if(J(t))this._objMap.delete(t);else{let s=this._hashFn(t);delete this._noObjMap[s]}let{prev:n,next:i}=e;return n.next=i,i.prev=n,e===this.head&&(this._head=i),e===this.tail&&(this._tail=n),this._size-=1,!0}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}};var ue=class extends Z{constructor(e){super(e);h(this,"_next");this._value=e,this._next=void 0}get next(){return this._next}set next(e){this._next=e}},Ve=class extends ee{constructor(e=[],t){super(t);h(this,"_equals",(e,t)=>Object.is(e,t));h(this,"_head");h(this,"_tail");h(this,"_length",0);this.pushMany(e)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}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}static from(e,t){let n=new this([],t);for(let i of e)n.push(i);return n}push(e){let t=this._ensureNode(e);return this.head?(this.tail.next=t,this._tail=t):this._head=this._tail=t,this._length++,this._maxLen>0&&this.length>this._maxLen&&this.shift(),!0}pop(){var n;if(!this.head)return;if(this.head===this.tail){let i=this.head.value;return this._head=void 0,this._tail=void 0,this._length--,i}let e=this.head;for(;e.next&&e.next!==this.tail;)e=e.next;let t=(n=this.tail)==null?void 0:n.value;return e.next=void 0,this._tail=e,this._length--,t}shift(){if(!this.head)return;let e=this.head;return this._head=this.head.next,this._head||(this._tail=void 0),this._length--,e.value}unshift(e){let t=this._ensureNode(e);return this.head?(t.next=this.head,this._head=t):this._head=this._tail=t,this._length++,!0}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}unshiftMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.unshift(this.toElementFn(n))):t.push(this.unshift(n));return t}search(e){let t=this._ensurePredicate(e),n=this.head;for(;n;){if(t(n))return n.value;n=n.next}}at(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e&&t;n++)t=t.next;return t==null?void 0:t.value}isNode(e){return e instanceof ue}getNodeAt(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e&&t;n++)t=t.next;return t}deleteAt(e){if(e<0||e>=this._length)return;if(e===0)return this.shift();let t=this.getNodeAt(e),n=this._getPrevNode(t),i=t.value;return n.next=t.next,t===this.tail&&(this._tail=n),this._length--,i}delete(e){if(e===void 0||!this.head)return!1;let t=this.isNode(e)?e:this.getNode(e);if(!t)return!1;let n=this._getPrevNode(t);return n?(n.next=t.next,t===this.tail&&(this._tail=n)):(this._head=t.next,t===this.tail&&(this._tail=void 0)),this._length--,!0}addAt(e,t){if(e<0||e>this._length)return!1;if(e===0)return this.unshift(t);if(e===this._length)return this.push(t);let n=this._ensureNode(t),i=this.getNodeAt(e-1);return n.next=i.next,i.next=n,this._length++,!0}setAt(e,t){let n=this.getNodeAt(e);return n?(n.value=t,!0):!1}isEmpty(){return this._length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}reverse(){if(!this.head||this.head===this.tail)return this;let e,t=this.head,n;for(;t;)n=t.next,t.next=e,e=t,t=n;return[this._head,this._tail]=[this.tail,this.head],this}getNode(e){if(e===void 0)return;if(this.isNode(e))return e;let t=this._ensurePredicate(e),n=this.head;for(;n;){if(t(n))return n;n=n.next}}addBefore(e,t){let n=this.getNode(e);if(!n)return!1;let i=this._getPrevNode(n),s=this._ensureNode(t);return i?(i.next=s,s.next=n,this._length++):(s.next=this._head,this._head=s,this._tail||(this._tail=s),this._length++),!0}addAfter(e,t){let n=this.getNode(e);if(!n)return!1;let i=this._ensureNode(t);return i.next=n.next,n.next=i,n===this.tail&&(this._tail=i),this._length++,!0}splice(e,t=0,...n){e=Math.max(0,Math.min(e,this.length)),t=Math.max(0,t);let i=this._createInstance(),s=e===0?void 0:this.getNodeAt(e-1),o=s?s.next:this.head,d=0;for(;d<t&&o;)i.push(o.value),o=o.next,d++;let a=o;if(s?s.next=a:this._head=a,a||(this._tail=s),n.length>0){let u,f;for(let c of n){let g=this._ensureNode(c);u||(u=g),f&&(f.next=g),f=g}s?s.next=u:this._head=u,f.next=a,a||(this._tail=f)}return this._length+=n.length-d,this._length===0&&(this._head=void 0,this._tail=void 0),i}countOccurrences(e){let t=St(e,this._equals),n=0,i=this.head;for(;i;)t(i)&&n++,i=i.next;return n}setEquality(e){return this._equals=e,this}deleteWhere(e){let t,n=this.head,i=0;for(;n;){if(e(n.value,i++,this))return t?(t.next=n.next,n===this._tail&&(this._tail=t)):(this._head=n.next,n===this._tail&&(this._tail=void 0)),this._length--,!0;t=n,n=n.next}return!1}clone(){let e=this._createInstance();for(let t of this)e.push(t);return e}filter(e,t){let n=this._createInstance(),i=0;for(let s of this)e.call(t,s,i++,this)&&n.push(s);return n}mapSame(e,t){let n=this._createInstance(),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{},maxLen:this._maxLen}),s=0;for(let o of this)i.push(e.call(n,o,s++,this));return i}createNode(e){return new ue(e)}_isPredicate(e){return typeof e=="function"}_ensureNode(e){return this.isNode(e)?e:this.createNode(e)}_ensurePredicate(e){if(this.isNode(e))return n=>n===e;if(this._isPredicate(e))return e;let t=e;return n=>this._equals(n.value,t)}_getPrevNode(e){if(!this.head||this.head===e)return;let t=this.head;for(;t.next&&t.next!==e;)t=t.next;return t.next===e?t:void 0}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}*_getReverseIterator(){let e=[...this].reverse();for(let t of e)yield t}*_getNodeIterator(){let e=this.head;for(;e;)yield e,e=e.next}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}_spawnLike(e){return this._createLike([],e)}};function St(l,r){if(l instanceof ue)return t=>t===l;if(typeof l=="function")return l;let e=l;return t=>r(t.value,e)}var ye=class extends Z{constructor(e){super(e);h(this,"_next");h(this,"_prev");this._value=e,this._next=void 0,this._prev=void 0}get next(){return this._next}set next(e){this._next=e}get prev(){return this._prev}set prev(e){this._prev=e}},Ge=class extends ee{constructor(e=[],t){super(t);h(this,"_equals",(e,t)=>Object.is(e,t));h(this,"_head");h(this,"_tail");h(this,"_length",0);this._head=void 0,this._tail=void 0,this._length=0,t!=null&&t.maxLen&&Number.isInteger(t.maxLen)&&t.maxLen>0&&(this._maxLen=t.maxLen),this.pushMany(e)}get head(){return this._head}get tail(){return this._tail}get length(){return this._length}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}static fromArray(e){return new this(e)}isNode(e){return e instanceof ye}push(e){let t=this._ensureNode(e);return this.head?(t.prev=this.tail,this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._length++,this._maxLen>0&&this.length>this._maxLen&&this.shift(),!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._length--,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._length--,e.value}unshift(e){let t=this._ensureNode(e);return this.head?(t.next=this.head,this.head.prev=t,this._head=t):(this._head=t,this._tail=t),this._length++,this._maxLen>0&&this._length>this._maxLen&&this.pop(),!0}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}unshiftMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.unshift(this.toElementFn(n))):t.push(this.unshift(n));return t}at(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e&&t;n++)t=t.next;return t==null?void 0:t.value}getNodeAt(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e&&t;n++)t=t.next;return t}getNode(e){if(e===void 0)return;if(this.isNode(e)){let i=e,s=this.head;for(;s;){if(s===i)return i;s=s.next}let o=d=>this._equals(d.value,i.value);for(s=this.head;s;){if(o(s))return s;s=s.next}return}let t=this._ensurePredicate(e),n=this.head;for(;n;){if(t(n))return n;n=n.next}}addAt(e,t){if(e<0||e>this._length)return!1;if(e===0)return this.unshift(t);if(e===this._length)return this.push(t);let n=this._ensureNode(t),i=this.getNodeAt(e-1),s=i.next;return n.prev=i,n.next=s,i.next=n,s.prev=n,this._length++,!0}addBefore(e,t){let n=this.isNode(e)?e:this.getNode(e);if(!n)return!1;let i=this._ensureNode(t);return i.prev=n.prev,n.prev&&(n.prev.next=i),i.next=n,n.prev=i,n===this.head&&(this._head=i),this._length++,!0}addAfter(e,t){let n=this.isNode(e)?e:this.getNode(e);if(!n)return!1;let i=this._ensureNode(t);return i.next=n.next,n.next&&(n.next.prev=i),i.prev=n,n.next=i,n===this.tail&&(this._tail=i),this._length++,!0}setAt(e,t){let n=this.getNodeAt(e);return n?(n.value=t,!0):!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),n=t.prev,i=t.next;return n.next=i,i.prev=n,this._length--,t.value}delete(e){let t=this.getNode(e);if(!t)return!1;if(t===this.head)this.shift();else if(t===this.tail)this.pop();else{let n=t.prev,i=t.next;n.next=i,i.prev=n,this._length--}return!0}isEmpty(){return this._length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}search(e){let t=this._ensurePredicate(e),n=this.head;for(;n;){if(t(n))return n.value;n=n.next}}getBackward(e){return this.findLast(e)}findLast(e){let t=this._ensurePredicate(e),n=this.tail;for(;n;){if(t(n))return n.value;n=n.prev}}findLastIndex(e){let t=this.tail,n=this.length-1;for(;t;){if(e(t.value,n,this))return n;t=t.prev,n--}return-1}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}deleteWhere(e){let t=this.head,n=0;for(;t;){if(e(t.value,n,this))return this.delete(t),!0;t=t.next,n++}return!1}setEquality(e){return this._equals=e,this}clone(){let e=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});for(let t of this)e.push(t);return e}filter(e,t){let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen}),i=0;for(let s of this)e.call(t,s,i++,this)&&n.push(s);return n}mapSame(e,t){let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen}),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{},maxLen:this._maxLen}),s=0;for(let o of this)i.push(e.call(n,o,s++,this));return i}_ensureNode(e){return this.isNode(e)?e:new ye(e)}_ensurePredicate(e){if(this.isNode(e)){let n=e;return i=>i===n}if(typeof e=="function")return e;let t=e;return n=>this._equals(n.value,t)}_getPrevNode(e){return e.prev}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}*_getReverseIterator(){let e=this.tail;for(;e;)yield e.value,e=e.prev}*_getNodeIterator(){let e=this.head;for(;e;)yield e,e=e.next}};var he=class{constructor(r,e,t){h(this,"key");h(this,"value");h(this,"forward");this.key=r,this.value=e,this.forward=new Array(t).fill(void 0)}},O,fe,le=class le extends z{constructor(e=[],t={}){super();v(this,O);v(this,fe);h(this,"_head");h(this,"_level",0);h(this,"_size",0);h(this,"_maxLevel",16);h(this,"_probability",.5);let{comparator:n,toEntryFn:i,maxLevel:s,probability:o}=t;typeof s=="number"&&s>0&&(this._maxLevel=s),typeof o=="number"&&o>0&&o<1&&(this._probability=o),C(this,fe,n===void 0),C(this,O,n!=null?n:le.createDefaultComparator()),this._head=new he(void 0,void 0,this._maxLevel);for(let d of e){let a,u;i?[a,u]=i(d):((!Array.isArray(d)||d.length<2)&&m(TypeError,K.invalidEntry("SkipList")),[a,u]=d),this.set(a,u)}}static createDefaultComparator(){return(e,t)=>{if(typeof e=="number"&&typeof t=="number")return(Number.isNaN(e)||Number.isNaN(t))&&m(TypeError,K.invalidNaN("SkipList")),e-t;if(typeof e=="string"&&typeof t=="string")return e<t?-1:e>t?1:0;if(e instanceof Date&&t instanceof Date){let n=e.getTime(),i=t.getTime();return(Number.isNaN(n)||Number.isNaN(i))&&m(TypeError,K.invalidDate("SkipList")),n-i}if(typeof e=="bigint"&&typeof t=="bigint")return e<t?-1:e>t?1:0;m(TypeError,K.comparatorRequired("SkipList"))}}get size(){return this._size}get maxLevel(){return this._maxLevel}get probability(){return this._probability}get comparator(){return p(this,O)}isEmpty(){return this._size===0}clear(){this._head=new he(void 0,void 0,this._maxLevel),this._level=0,this._size=0}clone(){return new le(this,{comparator:p(this,fe)?void 0:p(this,O),maxLevel:this._maxLevel,probability:this._probability})}set(e,t){let n=p(this,O),i=this._findUpdate(e),s=i[0].forward[0];if(s&&n(s.key,e)===0)return s.value=t,this;let o=this._randomLevel(),d=new he(e,t,o);if(o>this._level){for(let a=this._level;a<o;a++)i[a]=this._head;this._level=o}for(let a=0;a<o;a++)d.forward[a]=i[a].forward[a],i[a].forward[a]=d;return this._size++,this}get(e){let t=this._findNode(e);return t?t.value:void 0}has(e){return this._findNode(e)!==void 0}delete(e){let t=p(this,O),n=this._findUpdate(e),i=n[0].forward[0];if(!i||t(i.key,e)!==0)return!1;for(let s=0;s<this._level&&n[s].forward[s]===i;s++)n[s].forward[s]=i.forward[s];for(;this._level>0&&!this._head.forward[this._level-1];)this._level--;return this._size--,!0}first(){let e=this._head.forward[0];return e?[e.key,e.value]:void 0}last(){let e=this._head;for(let t=this._level-1;t>=0;t--)for(;e.forward[t];)e=e.forward[t];return e===this._head?void 0:[e.key,e.value]}pollFirst(){let e=this.first();if(e)return this.delete(e[0]),e}pollLast(){let e=this.last();if(e)return this.delete(e[0]),e}ceiling(e){let t=p(this,O),n=this._head;for(let s=this._level-1;s>=0;s--)for(;n.forward[s]&&t(n.forward[s].key,e)<0;)n=n.forward[s];let i=n.forward[0];return i?[i.key,i.value]:void 0}floor(e){let t=p(this,O),n=this._head;for(let s=this._level-1;s>=0;s--)for(;n.forward[s]&&t(n.forward[s].key,e)<=0;)n=n.forward[s];let i=n===this._head?void 0:n;if(i&&t(i.key,e)<=0)return[i.key,i.value]}higher(e){let t=p(this,O),n=this._head;for(let s=this._level-1;s>=0;s--)for(;n.forward[s]&&t(n.forward[s].key,e)<=0;)n=n.forward[s];let i=n.forward[0];return i?[i.key,i.value]:void 0}lower(e){let t=p(this,O),n=this._head,i;for(let s=this._level-1;s>=0;s--){for(;n.forward[s]&&t(n.forward[s].key,e)<0;)n=n.forward[s];n!==this._head&&t(n.key,e)<0&&(i=n)}return i?[i.key,i.value]:void 0}rangeSearch(e,t={}){let{lowInclusive:n=!0,highInclusive:i=!0}=t,[s,o]=e,d=p(this,O),a=[],u=this._head;for(let f=this._level-1;f>=0;f--)for(;u.forward[f]&&d(u.forward[f].key,s)<0;)u=u.forward[f];for(u=u.forward[0];u;){let f=d(u.key,o);if(f>0||f===0&&!i)break;let c=d(u.key,s);(c>0||c===0&&n)&&a.push([u.key,u.value]),u=u.forward[0]}return a}map(e,t){let n=new le([],t!=null?t:{}),i=0;for(let[s,o]of this){let[d,a]=e(o,s,i++,this);n.set(d,a)}return n}filter(e,t){let n=new le([],{comparator:p(this,fe)?void 0:p(this,O),maxLevel:this._maxLevel,probability:this._probability}),i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&n.set(s,o);return n}_getIterator(){let e=this._head;return(function*(){let t=e.forward[0];for(;t;)yield[t.key,t.value],t=t.forward[0]})()}_findUpdate(e){let t=p(this,O),n=new Array(this._maxLevel).fill(this._head),i=this._head;for(let s=this._level-1;s>=0;s--){for(;i.forward[s]&&t(i.forward[s].key,e)<0;)i=i.forward[s];n[s]=i}return n}_findNode(e){let t=p(this,O),n=this._head;for(let s=this._level-1;s>=0;s--)for(;n.forward[s]&&t(n.forward[s].key,e)<0;)n=n.forward[s];let i=n.forward[0];if(i&&t(i.key,e)===0)return i}_randomLevel(){let e=1;for(;Math.random()<this._probability&&e<this._maxLevel;)e++;return e}};O=new WeakMap,fe=new WeakMap;var We=le;var $e=class extends P{constructor(e=[],t){super(t);h(this,"_equals",(e,t)=>Object.is(e,t));h(this,"_elements",[]);this.pushMany(e)}get elements(){return this._elements}get size(){return this.elements.length}static fromArray(e,t){return new this(e,t)}isEmpty(){return this.elements.length===0}peek(){return this.isEmpty()?void 0:this.elements[this.elements.length-1]}push(e){return this.elements.push(e),!0}pop(){return this.isEmpty()?void 0:this.elements.pop()}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}delete(e){let t=this._indexOfByEquals(e);return this.deleteAt(t)!==void 0}deleteAt(e){return e<0||e>=this.elements.length?void 0:this.elements.splice(e,1)[0]}deleteWhere(e){for(let t=0;t<this.elements.length;t++)if(e(this.elements[t],t,this))return this.elements.splice(t,1),!0;return!1}clear(){this._elements=[]}clone(){let e=this._createInstance({toElementFn:this.toElementFn});for(let t of this)e.push(t);return e}filter(e,t){let n=this._createInstance({toElementFn:this.toElementFn}),i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}mapSame(e,t){let n=this._createInstance({toElementFn:this.toElementFn}),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{}}),s=0;for(let o of this)i.push(n===void 0?e(o,s,this):e.call(n,o,s,this)),s++;return i}setEquality(e){return this._equals=e,this}_indexOfByEquals(e){for(let t=0;t<this.elements.length;t++)if(this._equals(this.elements[t],e))return t;return-1}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}*_getIterator(){for(let e=0;e<this.elements.length;e++)yield this.elements[e]}};var j=class l extends G{constructor(e=[],t){super(t);h(this,"_elements",[]);h(this,"_offset",0);h(this,"_autoCompactRatio",.5);if(t){let{autoCompactRatio:n=.5}=t;this._autoCompactRatio=n}this.pushMany(e)}get elements(){return this._elements}get offset(){return this._offset}get autoCompactRatio(){return this._autoCompactRatio}set autoCompactRatio(e){this._autoCompactRatio=e}get length(){return this.elements.length-this._offset}get first(){return this.length>0?this.elements[this._offset]:void 0}peek(){return this.first}get last(){return this.length>0?this.elements[this.elements.length-1]:void 0}static fromArray(e){return new l(e)}isEmpty(){return this.length===0}push(e){return this.elements.push(e),this._maxLen>0&&this.length>this._maxLen&&this.shift(),!0}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}shift(){if(this.length===0)return;let e=this.first;return this._offset+=1,this.elements.length>0&&this.offset/this.elements.length>this.autoCompactRatio&&this.compact(),e}delete(e){for(let t=this._offset;t<this.elements.length;t++)if(Object.is(this.elements[t],e))return this.elements.splice(t,1),!0;return!1}at(e){if(!(e<0||e>=this.length))return this._elements[this._offset+e]}deleteAt(e){if(e<0||e>=this.length)return;let t=this._offset+e,[n]=this.elements.splice(t,1);return n}addAt(e,t){return e<0||e>this.length?!1:(this._elements.splice(this._offset+e,0,t),!0)}setAt(e,t){return e<0||e>=this.length?!1:(this._elements[this._offset+e]=t,!0)}deleteWhere(e){for(let t=0;t<this.length;t++)if(e(this._elements[this._offset+t],t,this))return this.deleteAt(t),!0;return!1}reverse(){return this._elements=this.elements.slice(this._offset).reverse(),this._offset=0,this}clear(){this._elements=[],this._offset=0}compact(){return this._elements=this.elements.slice(this._offset),this._offset=0,!0}splice(e,t=0,...n){e=Math.max(0,Math.min(e,this.length)),t=Math.max(0,Math.min(t,this.length-e));let i=this._offset+e,s=this._elements.splice(i,t,...n);this.elements.length>0&&this.offset/this.elements.length>this.autoCompactRatio&&this.compact();let o=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});return o._setAutoCompactRatio(this._autoCompactRatio),o.pushMany(s),o}clone(){let e=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});e._setAutoCompactRatio(this._autoCompactRatio);for(let t=this._offset;t<this.elements.length;t++)e.push(this.elements[t]);return e}filter(e,t){let n=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});n._setAutoCompactRatio(this._autoCompactRatio);let i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}map(e,t,n){var o,d;let i=new this.constructor([],{toElementFn:t==null?void 0:t.toElementFn,maxLen:(o=t==null?void 0:t.maxLen)!=null?o:this._maxLen,autoCompactRatio:(d=t==null?void 0:t.autoCompactRatio)!=null?d:this._autoCompactRatio}),s=0;for(let a of this)i.push(n===void 0?e(a,s++,this):e.call(n,a,s++,this));return i}mapSame(e,t){var o;let n=this.constructor,i=new n([],{toElementFn:this.toElementFn,maxLen:this._maxLen,autoCompactRatio:this._autoCompactRatio});(o=i._setAutoCompactRatio)==null||o.call(i,this._autoCompactRatio);let s=0;for(let d of this){let a=t===void 0?e(d,s++,this):e.call(t,d,s++,this);i.push(a)}return i}_setAutoCompactRatio(e){this._autoCompactRatio=e}*_getIterator(){for(let e=this._offset;e<this.elements.length;e++)yield this.elements[e]}*_getReverseIterator(){for(let e=this.length-1;e>=0;e--){let t=this.at(e);t!==void 0&&(yield t)}}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}},Qe=class extends Ve{clone(){let r=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});for(let e of this)r.push(e);return r}};var Xe=class extends G{constructor(e=[],t){super(t);h(this,"_equals",(e,t)=>Object.is(e,t));h(this,"_bucketSize",4096);h(this,"_autoCompactRatio",.5);h(this,"_compactCounter",0);h(this,"_bucketFirst",0);h(this,"_firstInBucket",0);h(this,"_bucketLast",0);h(this,"_lastInBucket",0);h(this,"_bucketCount",0);h(this,"_buckets",[]);h(this,"_length",0);if(t){let{bucketSize:s,autoCompactRatio:o}=t;typeof s=="number"&&(this._bucketSize=s),typeof o=="number"&&(this._autoCompactRatio=o)}let n;"length"in e?n=typeof e.length=="function"?e.length():e.length:n=typeof e.size=="function"?e.size():e.size,this._bucketCount=Le(n,this._bucketSize)||1;for(let s=0;s<this._bucketCount;++s)this._buckets.push(new Array(this._bucketSize));let i=Le(n,this._bucketSize);this._bucketFirst=this._bucketLast=(this._bucketCount>>1)-(i>>1),this._firstInBucket=this._lastInBucket=this._bucketSize-n%this._bucketSize>>1,this.pushMany(e)}get bucketSize(){return this._bucketSize}get autoCompactRatio(){return this._autoCompactRatio}set autoCompactRatio(e){this._autoCompactRatio=e}get bucketFirst(){return this._bucketFirst}get firstInBucket(){return this._firstInBucket}get bucketLast(){return this._bucketLast}get lastInBucket(){return this._lastInBucket}get bucketCount(){return this._bucketCount}get buckets(){return this._buckets}get length(){return this._length}peek(){return this.first}get first(){if(this._length!==0)return this._buckets[this._bucketFirst][this._firstInBucket]}get last(){if(this._length!==0)return this._buckets[this._bucketLast][this._lastInBucket]}static fromArray(e,t){return new this(e,t)}push(e){return this._length&&(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._length+=1,this._buckets[this._bucketLast][this._lastInBucket]=e,this._maxLen>0&&this._length>this._maxLen&&this.shift(),!0}pop(){if(this._length===0)return;let e=this._buckets[this._bucketLast][this._lastInBucket];return this._length!==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._length-=1,this._autoCompact(),e}shift(){if(this._length===0)return;let e=this._buckets[this._bucketFirst][this._firstInBucket];return this._length!==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._length-=1,this._autoCompact(),e}unshift(e){return this._length&&(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._length+=1,this._buckets[this._bucketFirst][this._firstInBucket]=e,this._maxLen>0&&this._length>this._maxLen&&this.pop(),!0}pushMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.push(this.toElementFn(n))):t.push(this.push(n));return t}unshiftMany(e=[]){let t=[];for(let n of e)this.toElementFn?t.push(this.unshift(this.toElementFn(n))):t.push(this.unshift(n));return t}isEmpty(){return this._length===0}clear(){this._buckets=[new Array(this._bucketSize)],this._bucketCount=1,this._bucketFirst=this._bucketLast=this._length=0,this._firstInBucket=this._lastInBucket=this._bucketSize>>1}at(e){if(e<0||e>=this._length)return;let{bucketIndex:t,indexInBucket:n}=this._getBucketAndPosition(e);return this._buckets[t][n]}setAt(e,t){$(e,0,this._length-1);let{bucketIndex:n,indexInBucket:i}=this._getBucketAndPosition(e);return this._buckets[n][i]=t,!0}addAt(e,t,n=1){let i=this._length;if($(e,0,i),e===0)for(;n--;)this.unshift(t);else if(e===this._length)for(;n--;)this.push(t);else{let s=[];for(let o=e;o<this._length;++o){let d=this.at(o);d!==void 0&&s.push(d)}this.cut(e-1,!0);for(let o=0;o<n;++o)this.push(t);for(let o=0;o<s.length;++o)this.push(s[o])}return!0}cut(e,t=!1){if(t){if(e<0)return this.clear(),this;let{bucketIndex:n,indexInBucket:i}=this._getBucketAndPosition(e);return this._bucketLast=n,this._lastInBucket=i,this._length=e+1,this}else{let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});n._setBucketSize(this._bucketSize);for(let i=0;i<=e;i++){let s=this.at(i);s!==void 0&&n.push(s)}return n}}splice(e,t=this._length-e,...n){$(e,0,this._length),t<0&&(t=0),e+t>this._length&&(t=this._length-e);let i=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});i._setBucketSize(this._bucketSize);for(let o=0;o<t;o++){let d=this.at(e+o);d!==void 0&&i.push(d)}let s=[];for(let o=e+t;o<this._length;o++){let d=this.at(o);d!==void 0&&s.push(d)}this.cut(e-1,!0);for(let o of n)this.push(o);for(let o of s)this.push(o);return i}cutRest(e,t=!1){if(t){if(e<0)return this;let{bucketIndex:n,indexInBucket:i}=this._getBucketAndPosition(e);return this._bucketFirst=n,this._firstInBucket=i,this._length=this._length-e,this}else{let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});n._setBucketSize(this._bucketSize),e<0&&(e=0);for(let i=e;i<this._length;i++){let s=this.at(i);s!==void 0&&n.push(s)}return n}}deleteAt(e){$(e,0,this._length-1);let t;if(e===0)return this.shift();if(e===this._length-1)return t=this.last,this.pop(),t;{let n=this._length-1,{bucketIndex:i,indexInBucket:s}=this._getBucketAndPosition(e);t=this._buckets[i][s];for(let o=e;o<n;o++){let{bucketIndex:d,indexInBucket:a}=this._getBucketAndPosition(o),{bucketIndex:u,indexInBucket:f}=this._getBucketAndPosition(o+1);this._buckets[d][a]=this._buckets[u][f]}return this.pop(),t}}delete(e){let t=this._length;if(t===0)return!1;let n=0,i=0;for(;n<t;){let s=this.at(n);this._equals(s,e)||(this.setAt(i,s),i+=1),n+=1}return this.cut(i-1,!0),!0}deleteWhere(e){for(let t=0;t<this._length;t++){let n=this.at(t);if(e(n,t,this))return this.deleteAt(t),!0}return!1}setEquality(e){return this._equals=e,this}findLast(e){for(let t=this.length-1;t>=0;t--){let n=this.at(t);if(e(n,t,this))return n}}findLastIndex(e){for(let t=this.length-1;t>=0;t--)if(e(this.at(t),t,this))return t;return-1}reverse(){this._buckets.reverse().forEach(function(s){s.reverse()});let{_bucketFirst:e,_bucketLast:t,_firstInBucket:n,_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-n-1,this}unique(){if(this._length<=1)return this;let e=1,t=this.at(0);for(let n=1;n<this._length;++n){let i=this.at(n);this._equals(i,t)||(t=i,this.setAt(e++,i))}return this.cut(e-1,!0),this}_autoCompact(){if(this._autoCompactRatio<=0||this._bucketCount<=1||(this._compactCounter++,this._compactCounter<this._bucketSize))return;this._compactCounter=0,this._length/(this._bucketCount*this._bucketSize)<this._autoCompactRatio&&this.shrinkToFit()}compact(){let e=this._bucketCount;return this.shrinkToFit(),this._bucketCount<e}shrinkToFit(){if(this._length===0)return;let e=[];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,this._bucketCount=e.length,this._compactCounter=0}clone(){return this._createLike(this,{bucketSize:this.bucketSize,toElementFn:this.toElementFn,maxLen:this._maxLen})}filter(e,t){let n=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});n._setBucketSize(this._bucketSize);let i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}mapSame(e,t){let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});n._setBucketSize(this._bucketSize);let i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{},bucketSize:this._bucketSize,maxLen:this._maxLen}),s=0;for(let o of this){let d=n===void 0?e(o,s,this):e.call(n,o,s,this);i.push(d),s++}return i}_setBucketSize(e){this._bucketSize=e,this._length===0&&(this._buckets=[new Array(this._bucketSize)],this._bucketCount=1,this._bucketFirst=this._bucketLast=0,this._firstInBucket=this._lastInBucket=this._bucketSize>>1)}*_getIterator(){for(let e=0;e<this._length;++e){let t=this.at(e);t!==void 0&&(yield t)}}_reallocate(e){let t=[],n=e||this._bucketCount>>1||1;for(let i=0;i<n;++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=n,this._bucketLast=t.length-1;for(let i=0;i<n;++i)t[t.length]=new Array(this._bucketSize);this._buckets=t,this._bucketCount=t.length}_getBucketAndPosition(e){let t,n,i=this._firstInBucket+e;return t=this._bucketFirst+Math.floor(i/this._bucketSize),t>=this._bucketCount&&(t-=this._bucketCount),n=(i+1)%this._bucketSize-1,n<0&&(n=this._bucketSize-1),{bucketIndex:t,indexInBucket:n}}_createInstance(e){let t=this.constructor;return new t([],e)}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}*_getReverseIterator(){for(let e=this._length-1;e>-1;e--){let t=this.at(e);t!==void 0&&(yield t)}}};var H=class l extends P{constructor(e=[],t){super(t);h(this,"_equals",Object.is);h(this,"_elements",[]);h(this,"_DEFAULT_COMPARATOR",(e,t)=>((typeof e=="object"||typeof t=="object")&&m(TypeError,K.comparatorRequired("Heap")),e>t?1:e<t?-1:0));h(this,"_comparator",this._DEFAULT_COMPARATOR);if(t){let{comparator:n}=t;n&&(this._comparator=n)}this.addMany(e)}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 from(e,t){return new this(e,t)}static heapify(e,t){return new l(e,t)}add(e){return this._elements.push(e),this._bubbleUp(this.elements.length-1)}addMany(e){let t=[];for(let n of e)if(this.toElementFn){let i=this.add(this.toElementFn(n));t.push(i)}else{let i=this.add(n);t.push(i)}return t}poll(){return this.pop()}pop(){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=[]}has(e){for(let t of this.elements)if(this._equals(t,e))return!0;return!1}delete(e){let t=-1;for(let n=0;n<this.elements.length;n++)if(this._equals(this.elements[n],e)){t=n;break}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)}deleteBy(e){return this.deleteWhere(e)}deleteWhere(e){let t=-1;for(let n=0;n<this.elements.length;n++)if(e(this.elements[n],n,this)){t=n;break}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)}setEquality(e){return this._equals=e,this}dfs(e="PRE"){let t=[],n=i=>{let s=2*i+1,o=s+1;i<this.size&&(e==="IN"?(n(s),t.push(this.elements[i]),n(o)):e==="PRE"?(t.push(this.elements[i]),n(s),n(o)):e==="POST"&&(n(s),n(o),t.push(this.elements[i])))};return n(0),t}fix(){let e=[];for(let t=Math.floor(this.size/2)-1;t>=0;t--)e.push(this._sinkDown(t,this.elements.length>>1));return e}sort(){let e=[],t=this._createInstance();for(let n of this.elements)t.add(n);for(;!t.isEmpty();){let n=t.poll();n!==void 0&&e.push(n)}return e}clone(){let e=this._createInstance();for(let t of this.elements)e.add(t);return e}filter(e,t){let n=this._createInstance(),i=0;for(let s of this)(t===void 0?e(s,i++,this):e.call(t,s,i++,this))?n.add(s):i++;return n}map(e,t,n){let{comparator:i,toElementFn:s,...o}=t!=null?t:{};i||m(TypeError,K.comparatorRequired("Heap.map"));let d=this._createLike([],{...o,comparator:i,toElementFn:s}),a=0;for(let u of this){let f=n===void 0?e(u,a++,this):e.call(n,u,a++,this);d.add(f)}return d}mapSame(e,t){let n=this._createInstance(),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.add(o)}return n}get comparator(){return this._comparator}*_getIterator(){for(let e of this.elements)yield e}_bubbleUp(e){let t=this.elements[e];for(;e>0;){let n=e-1>>1,i=this.elements[n];if(this.comparator(i,t)<=0)break;this.elements[e]=i,e=n}return this.elements[e]=t,!0}_sinkDown(e,t){let n=this.elements[e];for(;e<t;){let i=e<<1|1,s=i+1,o=this.elements[i];if(s<this.elements.length&&this.comparator(o,this.elements[s])>0&&(i=s,o=this.elements[s]),this.comparator(o,n)>=0)break;this.elements[e]=o,e=i}return this.elements[e]=n,!0}_createInstance(e){let t=this.constructor;return new t([],{comparator:this.comparator,toElementFn:this.toElementFn,...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}_spawnLike(e){return this._createLike([],e)}},ve=class{constructor(r,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=r,this.degree=e,this.marked=!1}},Je=class{constructor(r){h(this,"_root");h(this,"_size",0);h(this,"_min");h(this,"_comparator");this.clear(),this._comparator=r||this._defaultComparator,typeof this.comparator!="function"&&m(TypeError,K.notAFunction("comparator","FibonacciHeap"))}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(r){return this.push(r),!0}push(r){let e=this.createNode(r);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++,!0}peek(){return this.min?this.min.element:void 0}consumeLinkedList(r){let e=[];if(!r)return e;let t=r,n=!1;for(;!(t===r&&n);)t===r&&(n=!0),e.push(t),t=t.right;return e}mergeWithChild(r,e){r.child?(e.right=r.child.right,e.left=r.child,r.child.right.left=e,r.child.right=e):r.child=e}poll(){return this.pop()}pop(){if(this._size===0)return;let r=this.min;if(r.child){let e=this.consumeLinkedList(r.child);for(let t of e)this.mergeWithRoot(t),t.parent=void 0}return this.removeFromRoot(r),r===r.right?(this._min=void 0,this._root=void 0):(this._min=r.right,this._consolidate()),this._size--,r.element}merge(r){if(r.size!==0){if(this.root&&r.root){let e=this.root,t=r.root,n=e.right,i=t.left;e.right=t,t.left=e,n.left=i,i.right=n}else!this.root&&r.root&&(this._root=r.root);(!this.min||r.min&&this.comparator(r.min.element,this.min.element)<0)&&(this._min=r.min),this._size+=r.size,r.clear()}}createNode(r){return new ve(r)}isEmpty(){return this._size===0}_defaultComparator(r,e){return r<e?-1:r>e?1:0}mergeWithRoot(r){this.root?(r.right=this.root.right,r.left=this.root,this.root.right.left=r,this.root.right=r):this._root=r}removeFromRoot(r){this.root===r&&(this._root=r.right),r.left&&(r.left.right=r.right),r.right&&(r.right.left=r.left)}_link(r,e){this.removeFromRoot(r),r.left=r,r.right=r,this.mergeWithChild(e,r),e.degree++,r.parent=e}_consolidate(){let r=new Array(this._size),e=this.consumeLinkedList(this.root),t,n,i,s;for(let o of e){for(t=o,i=t.degree;r[i];)n=r[i],this.comparator(t.element,n.element)>0&&(s=t,t=n,n=s),this._link(n,t),r[i]=void 0,i++;r[i]=t}for(let o=0;o<r.length;o++)r[o]&&(!this.min||this.comparator(r[o].element,this.min.element)<=0)&&(this._min=r[o])}};var Ye=class extends H{constructor(r=[],e){super(r,{comparator:(t,n)=>((typeof t=="object"||typeof n=="object")&&m(TypeError,K.comparatorRequired("MaxHeap")),t<n?1:t>n?-1:0),...e})}};var Ze=class extends H{constructor(r=[],e){super(r,e)}};var w=class{constructor(r,e){h(this,"key");h(this,"value");this.key=r,this.value=e}},Y=class{constructor(r,e){h(this,"value");h(this,"weight");h(this,"_hashCode");this.weight=r!==void 0?r:1,this.value=e,this._hashCode=je()}get hashCode(){return this._hashCode}},ne=class extends z{constructor(e){super();h(this,"_options",{defaultEdgeWeight:1});h(this,"_vertexMap",new Map);let t=e==null?void 0:e.graph;this._options={defaultEdgeWeight:1,...t!=null?t:{}}}get options(){return this._options}get vertexMap(){return this._vertexMap}set vertexMap(e){this._vertexMap=e}get size(){return this._vertexMap.size}getVertex(e){return this._vertexMap.get(e)||void 0}hasVertex(e){return this._vertexMap.has(this._getVertexKey(e))}addVertex(e,t){if(e instanceof w)return this._addVertex(e);{let n=this.createVertex(e,t);return this._addVertex(n)}}isVertexKey(e){let t=typeof e;return t==="string"||t==="number"}removeManyVertices(e){let t=[];for(let n of e)t.push(this.deleteVertex(n));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,n,i){if(e instanceof Y)return this._addEdge(e);if(t instanceof w||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof w&&(e=e.key),t instanceof w&&(t=t.key);let s=this.createEdge(e,t,n,i);return this._addEdge(s)}else m(TypeError,K.invalidArgument("dest must be a Vertex or vertex key when srcOrEdge is an Edge.","Graph"))}setEdgeWeight(e,t,n){let i=this.getEdge(e,t);return i?(i.weight=n,!0):!1}getAllPathsBetween(e,t,n=1e3){let i=[],s=this._getVertex(e),o=this._getVertex(t);if(!(s&&o))return[];let d=[];for(d.push({vertex:s,path:[s]});d.length>0;){let{vertex:a,path:u}=d.pop();if(a===o&&(i.push(u),i.length>=n))return i;let f=this.getNeighbors(a);for(let c of f)if(!u.includes(c)){let g=[...u,c];d.push({vertex:c,path:g})}}return i}getPathSumWeight(e){var n;let t=0;for(let i=0;i<e.length;i++)t+=((n=this.getEdge(e[i],e[i+1]))==null?void 0:n.weight)||0;return t}getMinCostBetween(e,t,n){if(n===void 0&&(n=!1),n){let i=this.getAllPathsBetween(e,t),s=Number.MAX_SAFE_INTEGER;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,d=new j([s]);o.set(s,!0);let a=0;for(;d.length>0;){for(let u=0,f=d.length;u<f;u++){let c=d.shift();if(c===i)return a;if(c!==void 0){let g=this.getNeighbors(c);for(let _ of g)o.has(_)||(o.set(_,!0),d.push(_))}}a++}return}}getMinPathBetween(e,t,n,i=!1){var s,o;if(n===void 0&&(n=!1),n)if(i){let d=this.getAllPathsBetween(e,t,1e4),a=Number.MAX_SAFE_INTEGER,u=-1,f=0;for(let c of d){let g=this.getPathSumWeight(c);g<a&&(a=g,u=f),f++}return d[u]||void 0}else return(o=(s=this.dijkstra(e,t,!0,!0))==null?void 0:s.minPath)!=null?o:[];else{let d=[],a=this._getVertex(e),u=this._getVertex(t);if(!(a&&u))return[];let f=(c,g,_,b)=>{if(_.add(c),c===g){d=[a,...b];return}let N=this.getNeighbors(c);for(let E of N)_.has(E)||(b.push(E),f(E,g,_,b),b.pop());_.delete(c)};return f(a,u,new Set,[]),d}}dijkstraWithoutHeap(e,t=void 0,n=!1,i=!1){let s=Number.MAX_SAFE_INTEGER,o,d=[],a=[],u=this._vertexMap,f=new Map,c=new Set,g=new Map,_=this._getVertex(e),b=t?this._getVertex(t):void 0;if(!_)return;for(let R of u){let y=R[1];y instanceof w&&f.set(y,Number.MAX_SAFE_INTEGER)}f.set(_,0),g.set(_,void 0);let N=()=>{let R=Number.MAX_SAFE_INTEGER,y;for(let[k,V]of f)c.has(k)||V<R&&(R=V,y=k);return y},E=R=>{for(let y of u){let k=y[1];if(k instanceof w){let V=[k],T=g.get(k);for(;T;)V.push(T),T=g.get(T);let M=V.reverse();y[1]===R&&(d=M),a.push(M)}}};for(let R=1;R<u.size;R++){let y=N();if(y){if(c.add(y),b&&b===y)return n&&(s=f.get(b)||Number.MAX_SAFE_INTEGER),i&&E(b),{distMap:f,preMap:g,seen:c,paths:a,minDist:s,minPath:d};let k=this.getNeighbors(y);for(let V of k)if(!c.has(V)){let T=this.getEdge(y,V);if(T){let M=f.get(y),L=f.get(V);M!==void 0&&L!==void 0&&T.weight+M<L&&(f.set(V,T.weight+M),g.set(V,y))}}}}return n&&f.forEach((R,y)=>{y!==_&&R<s&&(s=R,i&&(o=y))}),i&&E(o),{distMap:f,preMap:g,seen:c,paths:a,minDist:s,minPath:d}}dijkstra(e,t=void 0,n=!1,i=!1){var R;let s=Number.MAX_SAFE_INTEGER,o,d=[],a=[],u=this._vertexMap,f=new Map,c=new Set,g=new Map,_=this._getVertex(e),b=t?this._getVertex(t):void 0;if(!_)return;for(let y of u){let k=y[1];k instanceof w&&f.set(k,Number.MAX_SAFE_INTEGER)}let N=new H([],{comparator:(y,k)=>y.key-k.key});N.add({key:0,value:_}),f.set(_,0),g.set(_,void 0);let E=y=>{for(let k of u){let V=k[1];if(V instanceof w){let T=[V],M=g.get(V);for(;M;)T.push(M),M=g.get(M);let L=T.reverse();k[1]===y&&(d=L),a.push(L)}}};for(;N.size>0;){let y=N.poll(),k=y==null?void 0:y.key,V=y==null?void 0:y.value;if(k!==void 0&&V){if(c.add(V),b&&b===V)return n&&(s=f.get(b)||Number.MAX_SAFE_INTEGER),i&&E(b),{distMap:f,preMap:g,seen:c,paths:a,minDist:s,minPath:d};let T=this.getNeighbors(V);for(let M of T)if(!c.has(M)){let L=(R=this.getEdge(V,M))==null?void 0:R.weight;if(typeof L=="number"){let F=f.get(M);F!==void 0&&k+L<F&&(N.add({key:k+L,value:M}),g.set(M,V),f.set(M,k+L))}}}}return n&&f.forEach((y,k)=>{k!==_&&y<s&&(s=y,i&&(o=k))}),i&&E(o),{distMap:f,preMap:g,seen:c,paths:a,minDist:s,minPath:d}}bellmanFord(e,t,n,i){n===void 0&&(n=!1),i===void 0&&(i=!1);let s=this._getVertex(e),o=[],d=new Map,a=new Map,u=Number.MAX_SAFE_INTEGER,f=[],c;if(t&&(c=!1),!s)return{hasNegativeCycle:c,distMap:d,preMap:a,paths:o,min:u,minPath:f};let g=this._vertexMap,_=g.size,b=this.edgeSet(),N=b.length;this._vertexMap.forEach(R=>{d.set(R,Number.MAX_SAFE_INTEGER)}),d.set(s,0);for(let R=1;R<_;++R)for(let y=0;y<N;++y){let k=this.getEndsOfEdge(b[y]);if(k){let[V,T]=k,M=b[y].weight,L=d.get(V),F=d.get(T);L!==void 0&&F!==void 0&&d.get(V)!==Number.MAX_SAFE_INTEGER&&L+M<F&&(d.set(T,L+M),i&&a.set(T,V))}}let E;if(n&&d.forEach((R,y)=>{y!==s&&R<u&&(u=R,i&&(E=y))}),i)for(let R of g){let y=R[1];if(y instanceof w){let k=[y],V=a.get(y);for(;V!==void 0;)k.push(V),V=a.get(V);let T=k.reverse();R[1]===E&&(f=T),o.push(T)}}for(let R=0;R<N;++R){let y=this.getEndsOfEdge(b[R]);if(y){let[k]=y,V=b[R].weight,T=d.get(k);T&&T!==Number.MAX_SAFE_INTEGER&&T+V<T&&(c=!0)}}return{hasNegativeCycle:c,distMap:d,preMap:a,paths:o,min:u,minPath:f}}floydWarshall(){var s;let e=[...this._vertexMap],t=e.length,n=[],i=[];for(let o=0;o<t;o++){n[o]=[],i[o]=[];for(let d=0;d<t;d++)i[o][d]=void 0}for(let o=0;o<t;o++)for(let d=0;d<t;d++)n[o][d]=((s=this.getEdge(e[o][1],e[d][1]))==null?void 0:s.weight)||Number.MAX_SAFE_INTEGER;for(let o=0;o<t;o++)for(let d=0;d<t;d++)for(let a=0;a<t;a++)n[d][a]>n[d][o]+n[o][a]&&(n[d][a]=n[d][o]+n[o][a],i[d][a]=e[o][1]);return{costs:n,predecessor:i}}getCycles(e=!1){let t=[],n=new Set,i=(o,d,a)=>{if(a.has(o)){(!e&&d.length>2||e&&d.length>=2)&&d[0]===o.key&&t.push([...d]);return}a.add(o),d.push(o.key);for(let u of this.getNeighbors(o))u&&i(u,d,a);a.delete(o),d.pop()};for(let o of this.vertexMap.values())i(o,[],n);let s=new Map;for(let o of t){let d=[...o].sort().toString();s.has(d)||s.set(d,o)}return[...s].map(o=>o[1])}filter(e,t){let n=[],i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&n.push([s,o]),i++;return this._createLike(n,this._snapshotOptions())}filterEntries(e,t){let n=[],i=0;for(let[s,o]of this)e.call(t,o,s,i,this)&&n.push([s,o]),i++;return n}map(e,t){let n=[],i=0;for(let[s,o]of this)n.push(e.call(t,o,s,i,this)),i++;return n}clone(){return this._createLike(void 0,this._snapshotOptions())}*_getIterator(){for(let e of this._vertexMap.values())yield[e.key,e.value]}_snapshotOptions(){return{graph:{...this._options}}}_createInstance(e){let t=this.constructor,n=new t,i=e==null?void 0:e.graph;return i?n._options={...n._options,...i}:n._options={...n._options,...this._options},n}_createLike(e,t){let n=this._createInstance(t);if(e)for(let[s,o]of e)n.addVertex(s,o);else for(let[s,o]of this)n.addVertex(s,o);let i=this.edgeSet();for(let s of i){let o=this.getEndsOfEdge(s);if(!o)continue;let[d,a]=o,u=d.key,f=a.key,c=typeof n.hasVertex=="function"?n.hasVertex(u):!1,g=typeof n.hasVertex=="function"?n.hasVertex(f):!1;if(c&&g){let _=n.createEdge(u,f,s.weight,s.value);n._addEdge(_)}}return n}_addVertex(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 w?e.key:e}get _edgeConnector(){return"--"}toVisual(e){var d;let t=(d=e==null?void 0:e.showWeight)!=null?d:!0,n=[...this._vertexMap.values()],i=n.length,s=this.edgeSet().length,o=[`Graph (${i} vertices, ${s} edges):`];for(let a of n){let u=this.getNeighbors(a);if(u.length===0)o.push(` ${a.key} (isolated)`);else{let f=u.map(c=>{let g=this.getEdge(a,c);return g&&t&&g.weight!==void 0&&g.weight!==1?`${c.key} (${g.weight})`:`${c.key}`});o.push(` ${a.key} ${this._edgeConnector} ${f.join(", ")}`)}}return o.join(`
|
|
2
|
+
`)}toDot(e){var u,f;let t=(u=e==null?void 0:e.name)!=null?u:"G",n=(f=e==null?void 0:e.showWeight)!=null?f:!0,i=this._edgeConnector==="->",s=i?"digraph":"graph",o=i?"->":"--",d=[`${s} ${t} {`];for(let c of this._vertexMap.values())d.push(` "${c.key}";`);let a=new Set;for(let c of this._vertexMap.values())for(let g of this.getNeighbors(c)){let _=i?`${c.key}->${g.key}`:[c.key,g.key].sort().join("--");if(a.has(_))continue;a.add(_);let b=this.getEdge(c,g),N=b&&n&&b.weight!==void 0&&b.weight!==1?` [label="${b.weight}"]`:"";d.push(` "${c.key}" ${o} "${g.key}"${N};`)}return d.push("}"),d.join(`
|
|
3
|
+
`)}print(e){console.log(this.toVisual(e))}};var ie=class extends w{constructor(r,e){super(r,e)}},ce=class extends Y{constructor(e,t,n,i){super(n,i);h(this,"src");h(this,"dest");this.src=e,this.dest=t}},Te=class l extends ne{constructor(e){super(e);h(this,"_outEdgeMap",new Map);h(this,"_inEdgeMap",new Map)}get _edgeConnector(){return"->"}get outEdgeMap(){return this._outEdgeMap}set outEdgeMap(e){this._outEdgeMap=e}get inEdgeMap(){return this._inEdgeMap}set inEdgeMap(e){this._inEdgeMap=e}static fromKeys(e){let t=new l({vertexValueInitializer:n=>n});for(let n of e)t.addVertex(n);return t}static fromEntries(e){let t=new l;for(let[n,i]of e)t.addVertex(n,i);return t}createVertex(e,t){return new ie(e,t)}createEdge(e,t,n,i){var s;return new ce(e,t,(s=n!=null?n:this.options.defaultEdgeWeight)!=null?s:1,i)}getEdge(e,t){let n=[];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&&(n=o.filter(d=>d.dest===s.key))}}return n[0]||void 0}deleteEdgeSrcToDest(e,t){let n=this._getVertex(e),i=this._getVertex(t),s;if(!n||!i)return;let o=this._outEdgeMap.get(n);o&&W(o,a=>a.dest===i.key);let d=this._inEdgeMap.get(i);return d&&(s=W(d,a=>a.src===n.key)[0]||void 0),s}deleteEdge(e,t){let n,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&&W(o,a=>a.src===i.key&&a.dest===(s==null?void 0:s.key));let d=this._inEdgeMap.get(s);d&&d.length>0&&(n=W(d,a=>a.src===i.key&&a.dest===s.key)[0])}return n}deleteVertex(e){let t,n;if(this.isVertexKey(e)?(n=this.getVertex(e),t=e):(n=e,t=this._getVertexKey(e)),n){let i=this.getNeighbors(n);for(let s of i)this.deleteEdgeSrcToDest(n,s);this._outEdgeMap.delete(n),this._inEdgeMap.delete(n)}return this._vertexMap.delete(t)}deleteEdgesBetween(e,t){let n=[];if(e&&t){let i=this.deleteEdgeSrcToDest(e,t),s=this.deleteEdgeSrcToDest(t,e);i&&n.push(i),s&&n.push(s)}return n}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=[],n=this.outgoingEdgesOf(e);for(let i of n){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 n=[],i=!1,s=o=>{t.set(o,1);let d=this.getDestinations(o);for(let a of d){let u=t.get(a);u===0?s(a):u===1&&(i=!0)}t.set(o,2),n.push(o)};for(let o of this.vertexMap)t.get(o[1])===0&&s(o[1]);if(!i)return e==="key"&&(n=n.map(o=>o instanceof ie?o.key:o)),n.reverse()}edgeSet(){let e=[];return this._outEdgeMap.forEach(t=>{e=[...e,...t]}),e}getNeighbors(e){let t=[],n=this._getVertex(e);if(n){let i=this.outgoingEdgesOf(n);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),n=this._getVertex(e.dest);if(t&&n)return[t,n]}isEmpty(){return this.vertexMap.size===0&&this.inEdgeMap.size===0&&this.outEdgeMap.size===0}clear(){this._vertexMap=new Map,this._inEdgeMap=new Map,this._outEdgeMap=new Map}clone(){return super.clone()}tarjan(){let e=new Map,t=new Map,n=new Map,i=0,s=[],o=new Set,d=a=>{e.set(a,i),t.set(a,i),i++,s.push(a),o.add(a);let u=this.getNeighbors(a);for(let f of u)e.has(f)?o.has(f)&&t.set(a,Math.min(t.get(a),e.get(f))):(d(f),t.set(a,Math.min(t.get(a),t.get(f))));if(e.get(a)===t.get(a)){let f=[],c;do c=s.pop(),o.delete(c),f.push(c);while(c!==a);n.set(n.size,f)}};for(let a of this.vertexMap.values())e.has(a)||d(a);return{dfnMap:e,lowMap:t,SCCs:n}}getDFNMap(){return this.tarjan().dfnMap}getLowMap(){return this.tarjan().lowMap}getSCCs(){return this.tarjan().SCCs}_addEdge(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let t=this._getVertex(e.src),n=this._getVertex(e.dest);if(t&&n){let i=this._outEdgeMap.get(t);i?i.push(e):this._outEdgeMap.set(t,[e]);let s=this._inEdgeMap.get(n);return s?s.push(e):this._inEdgeMap.set(n,[e]),!0}else return!1}};var Ce=class extends w{constructor(r,e){super(r,e)}},we=class extends Y{constructor(e,t,n,i){super(n,i);h(this,"endpoints");this.endpoints=[e,t]}},et=class l extends ne{constructor(e){super(e);h(this,"_edgeMap");this._edgeMap=new Map}get edgeMap(){return this._edgeMap}set edgeMap(e){this._edgeMap=e}static fromKeys(e){let t=new l({vertexValueInitializer:n=>n});for(let n of e)t.addVertex(n);return t}static fromEntries(e){let t=new l;for(let[n,i]of e)t.addVertex(n,i);return t}createVertex(e,t){return new Ce(e,t)}createEdge(e,t,n,i){var s;return new we(e,t,(s=n!=null?n:this.options.defaultEdgeWeight)!=null?s:1,i)}getEdge(e,t){var i;let n=[];if(e!==void 0&&t!==void 0){let s=this._getVertex(e),o=this._getVertex(t);s&&o&&(n=(i=this._edgeMap.get(s))==null?void 0:i.filter(d=>d.endpoints.includes(o.key)))}return n&&n[0]||void 0}deleteEdgeBetween(e,t){let n=this._getVertex(e),i=this._getVertex(t);if(!n||!i)return;let s=this._edgeMap.get(n),o;s&&(o=W(s,a=>a.endpoints.includes(i.key))[0]||void 0);let d=this._edgeMap.get(i);return d&&W(d,a=>a.endpoints.includes(n.key)),o}deleteEdge(e,t){let n,i;if(this.isVertexKey(e))if(this.isVertexKey(t))n=this._getVertex(e),i=this._getVertex(t);else return;else n=this._getVertex(e.endpoints[0]),i=this._getVertex(e.endpoints[1]);if(n&&i)return this.deleteEdgeBetween(n,i)}deleteVertex(e){let t,n;this.isVertexKey(e)?(n=this.getVertex(e),t=e):(n=e,t=this._getVertexKey(e));let i=this.getNeighbors(e);return n&&(i.forEach(s=>{let o=this._edgeMap.get(s);if(o){let d=o.filter(a=>!a.endpoints.includes(t));this._edgeMap.set(s,d)}}),this._edgeMap.delete(n)),this._vertexMap.delete(t)}degreeOf(e){var n;let t=this._getVertex(e);return t&&((n=this._edgeMap.get(t))==null?void 0:n.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(n=>{e.add(n)})}),[...e]}getNeighbors(e){let t=[],n=this._getVertex(e);if(n){let i=this.edgesOf(n);for(let s of i){let o=this._getVertex(s.endpoints.filter(d=>d!==n.key)[0]);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.endpoints[0],e.endpoints[1]))return;let t=this._getVertex(e.endpoints[0]),n=this._getVertex(e.endpoints[1]);if(t&&n)return[t,n]}isEmpty(){return this.vertexMap.size===0&&this.edgeMap.size===0}clear(){this._vertexMap=new Map,this._edgeMap=new Map}clone(){return super.clone()}tarjan(){let e=new Map,t=new Map,n=[],i=[],s=0,o=(d,a)=>{e.set(d,s),t.set(d,s),s++;let u=this.getNeighbors(d),f=0;for(let c of u)if(e.has(c))c!==a&&t.set(d,Math.min(t.get(d),e.get(c)));else{if(f++,o(c,d),t.set(d,Math.min(t.get(d),t.get(c))),t.get(c)>e.get(d)){let g=this.getEdge(d,c);g&&n.push(g)}a!==void 0&&t.get(c)>=e.get(d)&&i.push(d)}a===void 0&&f>1&&i.push(d)};for(let d of this.vertexMap.values())e.has(d)||o(d,void 0);return{dfnMap:e,lowMap:t,bridges:n,cutVertices:i}}getBiconnectedComponents(){let e=new Map,t=new Map,n=[],i=[],s=0,o=(d,a)=>{e.set(d,s),t.set(d,s),s++;let u=this.getNeighbors(d),f=0;for(let c of u){let g=this.getEdge(d,c);if(g){if(e.has(c))c!==a&&e.get(c)<e.get(d)&&(n.push(g),t.set(d,Math.min(t.get(d),e.get(c))));else if(f++,n.push(g),o(c,d),t.set(d,Math.min(t.get(d),t.get(c))),a===void 0&&f>1||a!==void 0&&t.get(c)>=e.get(d)){let _=[],b;do b=n.pop(),b&&_.push(b);while(b&&b!==g);_.length>0&&i.push(_)}}}};for(let d of this.vertexMap.values())e.has(d)||(o(d,void 0),n.length>0&&(i.push([...n]),n.length=0));return i}hasCycle(){let e=new Set,t=(n,i)=>{e.add(n);for(let s of this.getNeighbors(n))if(e.has(s)){if(s!==i)return!0}else if(t(s,n))return!0;return!1};for(let n of this.vertexMap.values())if(!e.has(n)&&t(n,void 0))return!0;return!1}getBridges(){return this.tarjan().bridges}getCutVertices(){return this.tarjan().cutVertices}getDFNMap(){return this.tarjan().dfnMap}getLowMap(){return this.tarjan().lowMap}_addEdge(e){for(let t of e.endpoints){let n=this._getVertex(t);if(n===void 0)return!1;if(n){let i=this._edgeMap.get(n);i?i.push(e):this._edgeMap.set(n,[e])}}return!0}};var Oe=class extends ie{constructor(e,t,n,i){super(e,t);h(this,"lat");h(this,"long");this.lat=n,this.long=i}},Fe=class extends ce{constructor(r,e,t,n){super(r,e,t,n)}},tt=class l extends Te{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,n=this.originCoord[0],i=this.originCoord[1]){return new Oe(e,t,n,i)}createEdge(e,t,n,i){return new Fe(e,t,n,i)}clone(){return super.clone()}_snapshotOptions(){return{...super._snapshotOptions(),originCoord:this.originCoord,bottomRight:this.bottomRight}}_createInstance(e){let{originCoord:t,bottomRight:n}=e||{},i=t!=null?t:this.originCoord,s=n!=null?n:this.bottomRight;return new l(i,s)}};var pe=class{constructor(r,e){h(this,"key");h(this,"value");h(this,"parent");h(this,"_left");h(this,"_right");h(this,"_height",0);h(this,"_color","BLACK");h(this,"_count",1);this.key=r,this.value=e}get left(){return this._left}set left(r){r&&(r.parent=this),this._left=r}get right(){return this._right}set right(r){r&&(r.parent=this),this._right=r}get height(){return this._height}set height(r){this._height=r}get color(){return this._color}set color(r){this._color=r}get count(){return this._count}set count(r){this._count=r}get familyPosition(){return this.parent?this.parent.left===this?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===this?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},Ee=class l extends z{constructor(e=[],t){super();h(this,"iterationType","ITERATIVE");h(this,"_isMapMode",!0);h(this,"_isDuplicate",!1);h(this,"_store",new Map);h(this,"_root");h(this,"_size",0);h(this,"_NIL",new pe(NaN));h(this,"_toEntryFn");h(this,"_DEFAULT_NODE_CALLBACK",e=>e==null?void 0:e.key);if(t){let{iterationType:n,toEntryFn:i,isMapMode:s,isDuplicate:o}=t;n&&(this.iterationType=n),s!==void 0&&(this._isMapMode=s),o!==void 0&&(this._isDuplicate=o),typeof i=="function"?this._toEntryFn=i:i&&m(TypeError,K.notAFunction("toEntryFn","BinaryTree"))}e&&this.setMany(e)}get isMapMode(){return this._isMapMode}get isDuplicate(){return this._isDuplicate}get store(){return this._store}get root(){return this._root}get size(){return this._size}get NIL(){return this._NIL}get toEntryFn(){return this._toEntryFn}createNode(e,t){return new pe(e,t)}createTree(e){return this._createInstance(e)}ensureNode(e,t=this.iterationType){if(e===null)return null;if(e!==void 0&&e!==this._NIL){if(this.isNode(e))return e;if(this.isEntry(e)){let n=e[0];return n===null?null:n===void 0?void 0:this.getNode(n,this._root,t)}return this.getNode(e,this._root,t)}}isNode(e){return e instanceof pe}isRaw(e){return this._toEntryFn!==void 0&&typeof e=="object"}isRealNode(e){return e===this._NIL||e===null||e===void 0?!1:this.isNode(e)}isRealNodeOrNull(e){return e===null||this.isRealNode(e)}isNIL(e){return e===this._NIL}isRange(e){return e instanceof q}isLeaf(e){return e=this.ensureNode(e),e===void 0?!1:e===null?!0:!this.isRealNode(e.left)&&!this.isRealNode(e.right)}isEntry(e){return Array.isArray(e)&&e.length===2}isValidKey(e){return e===null?!0:te(e)}add(e){return this.set(e)}set(e,t){let[n]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(n===void 0)return!1;if(!this._root)return this._setRoot(n),this._isMapMode&&n!==null&&n!==void 0&&this._store.set(n.key,n),n!==null&&(this._size=1),!0;let i=new j([this._root]),s;for(;i.length>0;){let o=i.shift();if(o){if(!this._isDuplicate&&n!==null&&o.key===n.key)return this._replaceNode(o,n),this._isMapMode&&n!==null&&this._store.set(o.key,n),!0;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)}}return s?(s.left===void 0?s.left=n:s.right===void 0&&(s.right=n),this._isMapMode&&n!==null&&n!==void 0&&this._store.set(n.key,n),n!==null&&this._size++,!0):!1}addMany(e){return this.setMany(e)}setMany(e,t){let n=[],i;t&&(i=t[Symbol.iterator]());for(let s of e){let o;if(i){let d=i.next();d.done||(o=d.value)}this.isRaw(s)&&(s=this._toEntryFn(s)),n.push(this.set(s,o))}return n}merge(e){this.setMany(e,[])}_deleteInternal(e){let t=[];if(!this._root)return t;let n=this.getNode(e);if(!n)return t;let i=n==null?void 0:n.parent,s,o=n;if(!n.left&&!n.right&&!i)this._setRoot(void 0);else if(n.left){let d=this.getRightMost(a=>a,n.left);if(d){let a=d.parent;o=this._swapProperties(n,d),this._isMapMode&&(this._store.set(n.key,n),this._store.set(d.key,d)),a&&(a.right===d?a.right=d.left:a.left=d.left,s=a)}}else if(i){let{familyPosition:d}=n;d==="LEFT"||d==="ROOT_LEFT"?i.left=n.right:(d==="RIGHT"||d==="ROOT_RIGHT")&&(i.right=n.right),s=i}else this._setRoot(n.right),n.right=void 0;return this._size=this._size-1,t.push({deleted:o,needBalanced:s}),this._isMapMode&&o&&this._store.delete(o.key),t}delete(e){return this._deleteInternal(e).length>0}search(e,t=!1,n=this._DEFAULT_NODE_CALLBACK,i=this._root,s=this.iterationType){if(e===void 0)return[];if(e===null)return[];if(i=this.ensureNode(i),!i)return[];let o=this._ensurePredicate(e),d=[];if(s==="RECURSIVE"){let a=u=>{o(u)&&(d.push(n(u)),t)||!this.isRealNode(u.left)&&!this.isRealNode(u.right)||(this.isRealNode(u.left)&&a(u.left),this.isRealNode(u.right)&&a(u.right))};a(i)}else{let a=[i];for(;a.length>0;){let u=a.pop();if(this.isRealNode(u)){if(o(u)&&(d.push(n(u)),t))return d;this.isRealNode(u.left)&&a.push(u.left),this.isRealNode(u.right)&&a.push(u.right)}}}return d}getNodes(e,t=!1,n=this._root,i=this.iterationType){return this.search(e,t,s=>s,n,i)}getNode(e,t=this._root,n=this.iterationType){if(this._isMapMode&&e!==null&&e!==void 0&&!this._isPredicate(e)){let i=this._extractKey(e);return i==null?void 0:this._store.get(i)}return this.search(e,!0,i=>i,t,n)[0]}get(e,t=this._root,n=this.iterationType){var i,s;if(this._isMapMode){let o=this._extractKey(e);return o==null||(i=this._store.get(o))==null?void 0:i.value}return(s=this.getNode(e,t,n))==null?void 0:s.value}has(e,t=this._root,n=this.iterationType){if(this._isMapMode&&e!==void 0&&e!==null&&!this._isPredicate(e)){let i=this._extractKey(e);return i==null?!1:this._store.has(i)}return this.search(e,!0,i=>i,t,n).length>0}clear(){this._clearNodes(),this._isMapMode&&this._clearValues()}isEmpty(){return this._size===0}isPerfectlyBalanced(e=this._root){return this.getMinHeight(e)+1>=this.getHeight(e)}isBST(e=this._root,t=this.iterationType){let n=this.ensureNode(e);if(!n)return!0;if(t==="RECURSIVE"){let i=(d,a,u)=>{if(!this.isRealNode(d))return!0;let f=Number(d.key);return f<=a||f>=u?!1:i(d.left,a,f)&&i(d.right,f,u)},s=i(n,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),o=i(n,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);return s||o}else{let i=(d=!1)=>{let a=[],u=d?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,f=n;for(;this.isRealNode(f)||a.length>0;){for(;this.isRealNode(f);)a.push(f),f=f.left;f=a.pop();let c=Number(f.key);if(!this.isRealNode(f)||!d&&u>=c||d&&u<=c)return!1;u=c,f=f.right}return!0},s=i(),o=i(!0);return s||o}}getDepth(e,t=this._root){let n=this.ensureNode(e),i=this.ensureNode(t),s=0;for(;n!=null&&n.parent;){if(n===i)return s;s++,n=n.parent}return s}getHeight(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!this.isRealNode(e))return-1;if(t==="RECURSIVE"){let n=i=>{if(!this.isRealNode(i))return-1;let s=n(i.left),o=n(i.right);return Math.max(s,o)+1};return n(e)}else{let n=[{node:e,depth:0}],i=0;for(;n.length>0;){let{node:s,depth:o}=n.pop();this.isRealNode(s.left)&&n.push({node:s.left,depth:o+1}),this.isRealNode(s.right)&&n.push({node:s.right,depth:o+1}),i=Math.max(i,o)}return i}}getMinHeight(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!e)return-1;if(t==="RECURSIVE"){let n=i=>{if(!this.isRealNode(i)||!this.isRealNode(i.left)&&!this.isRealNode(i.right))return 0;let s=n(i.left),o=n(i.right);return Math.min(s,o)+1};return n(e)}else{let n=[],i=e,s=null,o=new Map;for(;n.length>0||i;)if(this.isRealNode(i))n.push(i),i=i.left;else if(i=n[n.length-1],!this.isRealNode(i.right)||s===i.right){if(i=n.pop(),this.isRealNode(i)){let d=this.isRealNode(i.left)?o.get(i.left):-1,a=this.isRealNode(i.right)?o.get(i.right):-1;o.set(i,1+Math.min(d,a)),s=i,i=null}}else i=i.right;return o.get(e)}}getPathToRoot(e,t=this._DEFAULT_NODE_CALLBACK,n=!1){let i=[],s=this.ensureNode(e);if(!s)return i;for(;s.parent;)i.push(t(s)),s=s.parent;return i.push(t(s)),n?i.reverse():i}getLeftMost(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){if(this.isNIL(t))return e(void 0);let i=this.ensureNode(t);if(!this.isRealNode(i))return e(void 0);if(n==="RECURSIVE"){let s=o=>{let{left:d}=o;return this.isRealNode(d)?s(d):o};return e(s(i))}else{let s=Se(o=>{let{left:d}=o;return this.isRealNode(d)?Ie(()=>s(d)):o});return e(s(i))}}getRightMost(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){if(this.isNIL(t)||(t=this.ensureNode(t),!t))return e(void 0);if(n==="RECURSIVE"){let i=s=>{let{right:o}=s;return this.isRealNode(o)?i(o):s};return e(i(t))}else{let i=Se(s=>{let{right:o}=s;return this.isRealNode(o)?Ie(()=>i(o)):s});return e(i(t))}}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(n=>n,e.right);let t=e.parent;for(;this.isRealNode(t)&&e===t.right;)e=t,t=t.parent;return t}dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=!1,i=this._root,s=this.iterationType,o=!1){return i=this.ensureNode(i),i?this._dfs(e,t,n,i,s,o):[]}bfs(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType,i=!1){if(t=this.ensureNode(t),!t)return[];let s=[];if(n==="RECURSIVE"){let o=new j([t]),d=a=>{if(o.length===0)return;let u=o.shift();s.push(e(u)),i?(u&&this.isRealNodeOrNull(u.left)&&o.push(u.left),u&&this.isRealNodeOrNull(u.right)&&o.push(u.right)):(this.isRealNode(u.left)&&o.push(u.left),this.isRealNode(u.right)&&o.push(u.right)),d(a+1)};d(0)}else{let o=new j([t]);for(;o.length>0;){let d=o.length;for(let a=0;a<d;a++){let u=o.shift();s.push(e(u)),i?(u&&this.isRealNodeOrNull(u.left)&&o.push(u.left),u&&this.isRealNodeOrNull(u.right)&&o.push(u.right)):(this.isRealNode(u.left)&&o.push(u.left),this.isRealNode(u.right)&&o.push(u.right))}}}return s}leaves(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){t=this.ensureNode(t);let i=[];if(!this.isRealNode(t))return[];if(n==="RECURSIVE"){let s=o=>{this.isLeaf(o)&&i.push(e(o)),!(!this.isRealNode(o.left)&&!this.isRealNode(o.right))&&(this.isRealNode(o.left)&&s(o.left),this.isRealNode(o.right)&&s(o.right))};s(t)}else{let s=[t];for(;s.length>0;){let o=s.pop();this.isRealNode(o)&&(this.isLeaf(o)&&i.push(e(o)),this.isRealNode(o.right)&&s.push(o.right),this.isRealNode(o.left)&&s.push(o.left))}}return i}listLevels(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType,i=!1){t=this.ensureNode(t);let s=[];if(!t)return s;if(n==="RECURSIVE"){let o=(d,a)=>{s[a]||(s[a]=[]),s[a].push(e(d)),i?(d&&this.isRealNodeOrNull(d.left)&&o(d.left,a+1),d&&this.isRealNodeOrNull(d.right)&&o(d.right,a+1)):(d&&d.left&&o(d.left,a+1),d&&d.right&&o(d.right,a+1))};o(t,0)}else{let o=[[t,0]];for(;o.length>0;){let d=o.pop(),[a,u]=d;s[u]||(s[u]=[]),s[u].push(e(a)),i?(a&&this.isRealNodeOrNull(a.right)&&o.push([a.right,u+1]),a&&this.isRealNodeOrNull(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}morris(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=this._root){if(n=this.ensureNode(n),!n)return[];let i=[],s=n,o=a=>{let u=null,f=null;for(;a;)f=a.right,a.right=u,u=a,a=f;return u},d=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,d(s.left)}s=s.right}d(n);break}return i}clone(){let e=this._createInstance();return this._clone(e),e}filter(e,t){let n=this._createInstance(),i=0;for(let[s,o]of this)e.call(t,o,s,i++,this)&&n.set([s,o]);return n}map(e,t,n){let i=this._createLike([],t),s=0;for(let[o,d]of this)i.set(e.call(n,d,o,s++,this));return i}toVisual(e=this._root,t){let n={isShowUndefined:!1,isShowNull:!0,isShowRedBlackNIL:!1,...t};e=this.ensureNode(e);let i="";return e&&(n.isShowUndefined&&(i+=`U for undefined
|
|
4
4
|
`),n.isShowNull&&(i+=`N for null
|
|
5
5
|
`),n.isShowRedBlackNIL&&(i+=`S for Sentinel Node(NIL)
|
|
6
6
|
`),(o=>{let[d]=this._displayAux(o,n),a="";for(let u of d)a+=u+`
|
|
7
|
-
`;i+=a})(e)),i}print(e,t=this._root){console.log(this.toVisual(t,e))}_dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=!1,i=this._root,s=this.iterationType,o=!1,d=c=>!!c,a=c=>!!c,u=c=>o?this.isRealNodeOrNull(c):this.isRealNode(c),f=c=>this.isRealNodeOrNull(c)){if(i=this.ensureNode(i),!i)return[];let c=[];if(s==="RECURSIVE"){let _=g=>{if(!u(g))return;let b=()=>{d(g)&&(g==null?void 0:g.left)!==void 0&&_(g==null?void 0:g.left)},N=()=>{a(g)&&(g==null?void 0:g.right)!==void 0&&_(g==null?void 0:g.right)};switch(t){case"IN":if(b(),f(g)&&(c.push(e(g)),n))return;N();break;case"PRE":if(f(g)&&(c.push(e(g)),n))return;b(),N();break;case"POST":if(b(),N(),f(g)&&(c.push(e(g)),n))return;break}};_(i)}else{let _=[{opt:0,node:i}],g=E=>{var R;d(E.node)&&_.push({opt:0,node:(R=E.node)==null?void 0:R.left})},b=E=>{var R;a(E.node)&&_.push({opt:0,node:(R=E.node)==null?void 0:R.right})},N=E=>{u(E.node)&&_.push({opt:1,node:E.node})};for(;_.length>0;){let E=_.pop();if(E!==void 0&&u(E.node))if(E.opt===1){if(f(E.node)&&E.node!==void 0&&(c.push(e(E.node)),n))return c}else switch(t){case"IN":b(E),N(E),g(E);break;case"PRE":b(E),g(E),N(E);break;case"POST":N(E),b(E),g(E);break}}}return c}*_getIterator(e=this._root){if(e)if(this.iterationType==="ITERATIVE"){let t=[],n=e;for(;n||t.length>0;){for(;this.isRealNode(n);)t.push(n),n=n.left;n=t.pop(),this.isRealNode(n)&&(yield[n.key,n.value],n=n.right)}}else e.left&&this.isRealNode(e)&&(yield*this[Symbol.iterator](e.left)),yield[e.key,e.value],e.right&&this.isRealNode(e)&&(yield*this[Symbol.iterator](e.right))}_snapshotOptions(){return{iterationType:this.iterationType,toEntryFn:this.toEntryFn,isMapMode:this.isMapMode,isDuplicate:this.isDuplicate}}_createInstance(e){let t=this.constructor;return new t([],{...this._snapshotOptions(),...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,{...this._snapshotOptions(),...t!=null?t:{}})}_keyValueNodeOrEntryToNodeAndValue(e,t){if(e===void 0)return[void 0,void 0];if(e===null)return[null,void 0];if(this.isNode(e))return[e,t];if(this.isEntry(e)){let[n,i]=e;if(n===void 0)return[void 0,void 0];if(n===null)return[null,void 0];let s=t!=null?t:i;return[this.createNode(n,s),s]}return[this.createNode(e,t),t]}_clone(e){this.bfs(t=>{t===null?e.set(null):e.set([t.key,t.value])},this._root,this.iterationType,!0)}_displayAux(e,t){let n=[["\u2500"],1,0,0],i=a=>({node:a,stage:0,leftLayout:n,rightLayout:n}),s=[i(e)],o=n,d=a=>{if(s.length===0){o=a;return}let u=s[s.length-1];u.stage===1?u.leftLayout=a:u.rightLayout=a};for(;s.length>0;){let a=s[s.length-1],u=a.node;if(a.stage===0){if(this._isDisplayLeaf(u,t)){s.pop();let f=this._resolveDisplayLeaf(u,t,n);d(f);continue}a.stage=1,s.push(i(u.left))}else if(a.stage===1)a.stage=2,s.push(i(u.right));else{s.pop();let f=this.isNIL(u)?"S":String(u.key),c=l._buildNodeDisplay(f,f.length,a.leftLayout,a.rightLayout);d(c)}}return o}static _buildNodeDisplay(e,t,n,i){let[s,o,d,a]=n,[u,f,c,_]=i,g=" ".repeat(Math.max(0,a+1))+"_".repeat(Math.max(0,o-a-1))+e+"_".repeat(Math.max(0,_))+" ".repeat(Math.max(0,f-_)),b=(d>0?" ".repeat(a)+"/"+" ".repeat(o-a-1):" ".repeat(o))+" ".repeat(t)+(c>0?" ".repeat(_)+"\\"+" ".repeat(f-_-1):" ".repeat(f)),N=[g,b];for(let E=0;E<Math.max(d,c);E++){let R=E<d?s[E]:" ".repeat(o),y=E<c?u[E]:" ".repeat(f);N.push(R+" ".repeat(t)+y)}return[N,o+t+f,Math.max(d,c)+2,o+Math.floor(t/2)]}_isDisplayLeaf(e,t){let{isShowNull:n,isShowUndefined:i,isShowRedBlackNIL:s}=t;if(e===null&&!n||e===void 0&&!i||this.isNIL(e)&&!s||e==null)return!0;let o=this._hasDisplayableChild(e.left,t),d=this._hasDisplayableChild(e.right,t);return!o&&!d}_hasDisplayableChild(e,t){return e===null?!!t.isShowNull:e===void 0?!!t.isShowUndefined:this.isNIL(e)?!!t.isShowRedBlackNIL:!0}_resolveDisplayLeaf(e,t,n){let{isShowNull:i,isShowUndefined:s,isShowRedBlackNIL:o}=t;if(e===null&&!i||e===void 0&&!s||this.isNIL(e)&&!o)return n;if(e!=null){let a=this.isNIL(e)?"S":String(e.key);return l._buildNodeDisplay(a,a.length,n,n)}let d=e===void 0?"U":"N";return l._buildNodeDisplay(d,d.length,[[""],1,0,0],[[""],1,0,0])}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:n,value:i}=t,s=this.createNode(n,i);return s&&(t.key=e.key,this._isMapMode||(t.value=e.value),e.key=s.key,this._isMapMode||(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._setRoot(t),t}_setRoot(e){e&&(e.parent=void 0),this._root=e}_ensurePredicate(e){if(e==null)return t=>!1;if(this._isPredicate(e))return e;if(this.isRealNode(e))return t=>t===e;if(this.isEntry(e)){let[t]=e;return n=>n?n.key===t:!1}return t=>t?t.key===e:!1}_isPredicate(e){return typeof e=="function"}_extractKey(e){if(e===null)return null;if(e!==void 0&&e!==this._NIL)return this.isNode(e)?e.key:this.isEntry(e)?e[0]:e}_setValue(e,t){if(e==null)return!1;let n=this._store.get(e);return n?(n.value=t,!0):!1}_clearNodes(){this._setRoot(void 0),this._size=0}_clearValues(){this._store.clear()}};var Ne=class{constructor(r,e){h(this,"key");h(this,"value");h(this,"parent");h(this,"_left");h(this,"_right");h(this,"_height",0);h(this,"_color","BLACK");h(this,"_count",1);this.key=r,this.value=e}get left(){return this._left}set left(r){r&&(r.parent=this),this._left=r}get right(){return this._right}set right(r){r&&(r.parent=this),this._right=r}get height(){return this._height}set height(r){this._height=r}get color(){return this._color}set color(r){this._color=r}get count(){return this._count}set count(r){this._count=r}get familyPosition(){return this.parent?this.parent.left===this?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===this?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},te=class extends Ee{constructor(e=[],t){super([],t);h(this,"_root");h(this,"_enableOrderStatistic",!1);h(this,"_comparator");t?("comparator"in t&&t.comparator!==void 0?this._comparator=t.comparator:this._comparator=this._createDefaultComparator(),t.enableOrderStatistic&&(this._enableOrderStatistic=!0)):this._comparator=this._createDefaultComparator(),e&&this.setMany(e)}get root(){return this._root}get comparator(){return this._comparator}createNode(e,t){return new Ne(e,t)}ensureNode(e,t=this.iterationType){var n;return(n=super.ensureNode(e,t))!=null?n:void 0}isNode(e){return e instanceof Ne}isValidKey(e){return Y(e)}dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=!1,i=this._root,s=this.iterationType){return super.dfs(e,t,n,i,s)}bfs(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){return super.bfs(e,t,n,!1)}listLevels(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){return super.listLevels(e,t,n,!1)}getNode(e,t=this._root,n=this.iterationType){var u,f;if(e==null)return;if(this._isPredicate(e))return(u=this.getNodes(e,!0,t,n)[0])!=null?u:void 0;if(e instanceof U)return(f=this.getNodes(e,!0,t,n)[0])!=null?f:void 0;let i;if(this.isNode(e))i=e.key;else if(this.isEntry(e)){let c=e[0];if(c==null)return;i=c}else i=e;let s=this.ensureNode(t);if(!s)return;let o=this._NIL,d=s,a=this._comparator;for(;d&&d!==o;){let c=a(i,d.key);if(c===0)return d;d=c<0?d._left:d._right}}search(e,t=!1,n=this._DEFAULT_NODE_CALLBACK,i=this._root,s=this.iterationType){if(e===void 0)return[];if(e===null)return[];if(i=this.ensureNode(i),!i)return[];let o=this.isRange(e),d=!o&&this._isPredicate(e);if(!o&&!d){let c;if(this.isNode(e))c=e.key;else if(this.isEntry(e)){let N=e[0];N!=null&&(c=N)}else c=e;if(c===void 0)return[];let _=this._NIL,g=this._comparator,b=i;for(;b&&b!==_;){let N=g(c,b.key);if(N===0)return[n(b)];b=N<0?b._left:b._right}return[]}let a;o?a=c=>c?e.isInRange(c.key,this._comparator):!1:a=this._ensurePredicate(e);let u=c=>{if(!c||!this.isRealNode(c.left))return!1;if(o){let _=e,g=_.low,b=_.includeLow;return b&&this._compare(c.key,g)>=0||!b&&this._compare(c.key,g)>0}if(!o&&!this._isPredicate(e)){let _=this._extractKey(e);return _!=null&&this._compare(c.key,_)>0}return!0},f=c=>{if(!c||!this.isRealNode(c.right))return!1;if(o){let _=e,g=_.high,b=_.includeHigh;return b&&this._compare(c.key,g)<=0||!b&&this._compare(c.key,g)<0}if(!o&&!this._isPredicate(e)){let _=this._extractKey(e);return _!=null&&this._compare(c.key,_)<0}return!0};return super._dfs(n,"IN",t,i,s,!1,u,f,()=>!0,c=>!!c&&a(c))}rangeSearch(e,t=this._DEFAULT_NODE_CALLBACK,n=this._root,i=this.iterationType){let s=e instanceof U?e:new U(e[0],e[1]);return this.search(s,!1,t,n,i)}getByRank(e,t=this._DEFAULT_NODE_CALLBACK,n=this.iterationType){if(this._enableOrderStatistic||m(Error,K.orderStatisticNotEnabled("getByRank")),e<0||e>=this._size)return;let i,s=this.iterationType;typeof t=="string"?s=t:t&&(i=t,n&&(s=n));let o=s==="RECURSIVE"?this._getByRankRecursive(this._root,e):this._getByRankIterative(this._root,e);if(o)return i?i(o):o.key}getRank(e,t=this.iterationType){var s;if(this._enableOrderStatistic||m(Error,K.orderStatisticNotEnabled("getRank")),!this._root||this._size===0)return-1;let n=this.iterationType;t&&(n=t);let i;if(typeof e=="function"){let o=this.search(e,!0);if(o.length===0||o[0]===void 0)return-1;i=o[0]}else{if(e==null)return-1;if(this.isNode(e))i=e.key;else if(Array.isArray(e)){if(i=(s=e[0])!=null?s:void 0,i==null)return-1}else i=e}return i===void 0?-1:n==="RECURSIVE"?this._getRankRecursive(this._root,i):this._getRankIterative(this._root,i)}rangeByRank(e,t,n=this._DEFAULT_NODE_CALLBACK,i=this.iterationType){if(this._enableOrderStatistic||m(Error,K.orderStatisticNotEnabled("rangeByRank")),this._size===0)return[];let s=Math.max(0,e),o=Math.min(this._size-1,t);if(s>o)return[];let d,a=this.iterationType;typeof n=="string"?a=n:n&&(d=n,i&&(a=i));let u=[],f=o-s+1,c=a==="RECURSIVE"?this._getByRankRecursive(this._root,s):this._getByRankIterative(this._root,s);if(!c)return[];let _=0,g=d!=null?d:this._DEFAULT_NODE_CALLBACK,b=c;for(;b&&_<f;)u.push(g(b)),_++,_<f&&(b=this._next(b));return u}set(e,t){let[n]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(n===void 0)return!1;if(this._root===void 0)return this._setRoot(n),this._isMapMode&&this.isRealNode(n)&&this._store.set(n.key,n),this._size++,this._updateCount(n),!0;let i=this._root;for(;i!==void 0;){if(this._compare(i.key,n.key)===0)return this._replaceNode(i,n),this._isMapMode&&this.isRealNode(n)&&this._store.set(i.key,n),!0;if(this._compare(i.key,n.key)>0){if(i.left===void 0)return i.left=n,this._isMapMode&&this.isRealNode(n)&&this._store.set(n.key,n),this._size++,this._updateCountAlongPath(n),!0;i.left!==null&&(i=i.left)}else{if(i.right===void 0)return i.right=n,this._isMapMode&&this.isRealNode(n)&&this._store.set(n.key,n),this._size++,this._updateCountAlongPath(n),!0;i.right!==null&&(i=i.right)}}return!1}setMany(e,t,n=!0,i=this.iterationType){let s=[],o=t==null?void 0:t[Symbol.iterator]();if(!n){for(let _ of e){let g=o==null?void 0:o.next().value;this.isRaw(_)&&(_=this._toEntryFn(_)),s.push(this.set(_,g))}return s}let d=[],a=0;for(let _ of e)d.push({key:_,value:o==null?void 0:o.next().value,orgIndex:a++});let u=d.sort(({key:_},{key:g})=>{let b,N;return this.isRaw(_)?b=this._toEntryFn(_)[0]:this.isEntry(_)?b=_[0]:this.isRealNode(_)?b=_.key:b=_,this.isRaw(g)?N=this._toEntryFn(g)[0]:this.isEntry(g)?N=g[0]:this.isRealNode(g)?N=g.key:N=g,b!=null&&N!=null?this._compare(b,N):0}),f=_=>{if(_.length===0)return;let g=Math.floor((_.length-1)/2),{key:b,value:N,orgIndex:E}=_[g];if(this.isRaw(b)){let R=this._toEntryFn(b);s[E]=this.set(R)}else s[E]=this.set(b,N);f(_.slice(0,g)),f(_.slice(g+1))};return i==="RECURSIVE"?f(u):(()=>{let g=[[0,u.length-1]];for(;g.length>0;){let b=g.pop();if(!b)continue;let[N,E]=b;if(N>E)continue;let R=N+Math.floor((E-N)/2),{key:y,value:k,orgIndex:V}=u[R];if(this.isRaw(y)){let T=this._toEntryFn(y);s[V]=this.set(T)}else s[V]=this.set(y,k);g.push([R+1,E]),g.push([N,R-1])}})(),s}ceiling(e,t=this._DEFAULT_NODE_CALLBACK,n){let i,s=this.iterationType;typeof t=="string"?s=t:t&&(i=t,n&&(s=n));let o=this._bound(e,!0,s);return i?o?i(o):void 0:o==null?void 0:o.key}higher(e,t=this._DEFAULT_NODE_CALLBACK,n){let i,s=this.iterationType;typeof t=="string"?s=t:t&&(i=t,n&&(s=n));let o=this._bound(e,!1,s);return i?o?i(o):void 0:o==null?void 0:o.key}floor(e,t=this._DEFAULT_NODE_CALLBACK,n){if(e==null)return void 0;let i,s=this.iterationType;if(typeof t=="string"?s=t:t&&(i=t,n&&(s=n)),this._isPredicate(e)){let d=this._floorByPredicate(e,s);return i?d?i(d):void 0:d==null?void 0:d.key}let o;if(this.isNode(e))o=e.key;else if(this.isEntry(e)){let d=e[0];if(d==null)return void 0;o=d}else o=e;if(o!==void 0){let d=this._floorByKey(o,s);return i?d?i(d):void 0:d==null?void 0:d.key}}lower(e,t,n){if(e==null)return void 0;let i,s=this.iterationType;if(typeof t=="string"?s=t:t&&(i=t,n&&(s=n)),this._isPredicate(e)){let d=this._lowerByPredicate(e,s);return i?d?i(d):void 0:d==null?void 0:d.key}let o;if(this.isNode(e))o=e.key;else if(this.isEntry(e)){let d=e[0];if(d==null)return void 0;o=d}else o=e;if(o!==void 0){let d=this._lowerByKey(o,s);return i?d?i(d):void 0:d==null?void 0:d.key}}lesserOrGreaterTraverse(e=this._DEFAULT_NODE_CALLBACK,t=-1,n=this._root,i=this.iterationType){let s=this.ensureNode(n),o=[];if(!this._root||!s)return o;let d=s.key;if(i==="RECURSIVE"){let a=u=>{let f=this._compare(u.key,d);Math.sign(f)==t&&o.push(e(u)),this.isRealNode(u.left)&&a(u.left),this.isRealNode(u.right)&&a(u.right)};return a(this._root),o}else{let a=new P([this._root]);for(;a.length>0;){let u=a.shift();if(this.isRealNode(u)){let f=this._compare(u.key,d);Math.sign(f)==t&&o.push(e(u)),this.isRealNode(u.left)&&a.push(u.left),this.isRealNode(u.right)&&a.push(u.right)}}return o}}perfectlyBalance(e=this.iterationType){let t=this.dfs(o=>o,"IN",!1,this._root,e),n=t.length;if(this._clearNodes(),n===0)return!1;let i=(o,d,a)=>{if(o>d)return;let u=o+(d-o>>1),f=t[u],c=i(o,u-1,f),_=i(u+1,d,f);return f.left=c,f.right=_,f.parent=a,f},s=i(0,n-1,void 0);return this._setRoot(s),this._size=n,!0}isAVLBalanced(e=this.iterationType){if(!this._root)return!0;let t=!0;if(e==="RECURSIVE"){let n=i=>{if(!i)return 0;let s=n(i.left),o=n(i.right);return Math.abs(s-o)>1&&(t=!1),Math.max(s,o)+1};n(this._root)}else{let n=[],i=this._root,s,o=new Map;for(;n.length>0||i;)if(i)n.push(i),i.left!==null&&(i=i.left);else if(i=n[n.length-1],!i.right||s===i.right){if(i=n.pop(),i){let d=i.left?o.get(i.left):-1,a=i.right?o.get(i.right):-1;if(Math.abs(d-a)>1)return!1;o.set(i,1+Math.max(d,a)),s=i,i=void 0}}else i=i.right}return t}map(e,t,n){let i=this._createLike([],t),s=0;for(let[o,d]of this)i.set(e.call(n,d,o,s++,this));return i}deleteWhere(e,t=!1,n=this._root,i=this.iterationType){let s=this.search(e,t,d=>d,n,i),o=[];for(let d of s){let a=this.delete(d);o=o.concat(a)}return o}_createDefaultComparator(){return(e,t)=>{if(Y(e)&&Y(t))return e>t?1:e<t?-1:0;if(e instanceof Date&&t instanceof Date){let n=e.getTime(),i=t.getTime();return(Number.isNaN(n)||Number.isNaN(i))&&m(TypeError,K.invalidDate("BST")),n>i?1:n<i?-1:0}return(typeof e=="object"||typeof t=="object")&&m(TypeError,K.comparatorRequired("BST")),0}}_floorByKey(e,t){var n,i;if(t==="RECURSIVE"){let s=o=>{if(!this.isRealNode(o))return;if(this.comparator(o.key,e)<=0){let a=s(o.right);return a!=null?a:o}else return s(o.left)};return s(this.root)}else{let s=this.root,o;for(;this.isRealNode(s);)this.comparator(s.key,e)<=0?(o=s,s=(n=s.right)!=null?n:void 0):s=(i=s.left)!=null?i:void 0;return o}}_floorByPredicate(e,t){if(t==="RECURSIVE"){let n,i=s=>{this.isRealNode(s)&&(this.isRealNode(s.left)&&i(s.left),e(s)&&(n=s),this.isRealNode(s.right)&&i(s.right))};return i(this.root),n}else{let n=[],i=this.root,s;for(;n.length>0||this.isRealNode(i);)if(this.isRealNode(i))n.push(i),i=i.left;else{let o=n.pop();if(!this.isRealNode(o))break;e(o)&&(s=o),i=o.right}return s}}_lowerByKey(e,t){var n,i;if(t==="RECURSIVE"){let s=o=>{if(!this.isRealNode(o))return;if(this.comparator(o.key,e)<0){let a=s(o.right);return a!=null?a:o}else return s(o.left)};return s(this.root)}else{let s=this.root,o;for(;this.isRealNode(s);)this.comparator(s.key,e)<0?(o=s,s=(n=s.right)!=null?n:void 0):s=(i=s.left)!=null?i:void 0;return o}}_lowerByPredicate(e,t){if(t==="RECURSIVE"){let n,i=s=>{this.isRealNode(s)&&(this.isRealNode(s.left)&&i(s.left),e(s)&&(n=s),this.isRealNode(s.right)&&i(s.right))};return i(this.root),n}else{let n=[],i=this.root,s;for(;n.length>0||this.isRealNode(i);)if(this.isRealNode(i))n.push(i),i=i.left;else{let o=n.pop();if(!this.isRealNode(o))break;e(o)&&(s=o),i=o.right}return s}}_bound(e,t,n){if(e==null)return;if(this._isPredicate(e))return this._boundByPredicate(e,n);let i;if(this.isNode(e))i=e.key;else if(this.isEntry(e)){let s=e[0];if(s==null)return;i=s}else i=e;if(i!==void 0)return this._boundByKey(i,t,n)}_boundByKey(e,t,n){var i,s;if(n==="RECURSIVE"){let o=d=>{if(!this.isRealNode(d))return;let a=this.comparator(d.key,e);if(t?a>=0:a>0){let f=o(d.left);return f!=null?f:d}else return o(d.right)};return o(this.root)}else{let o=this.root,d;for(;this.isRealNode(o);){let a=this.comparator(o.key,e);(t?a>=0:a>0)?(d=o,o=(i=o.left)!=null?i:void 0):o=(s=o.right)!=null?s:void 0}return d}}_boundByPredicate(e,t){if(t==="RECURSIVE"){let n,i=s=>{n||!this.isRealNode(s)||(this.isRealNode(s.left)&&i(s.left),!n&&e(s)&&(n=s),!n&&this.isRealNode(s.right)&&i(s.right))};return i(this.root),n}else{let n=[],i=this.root;for(;n.length>0||this.isRealNode(i);)if(this.isRealNode(i))n.push(i),i=i.left;else{let s=n.pop();if(!this.isRealNode(s))break;if(e(s))return s;i=s.right}return}}_createInstance(e){let t=this.constructor;return new t([],{...this._snapshotOptions(),...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,{...this._snapshotOptions(),...t!=null?t:{}})}_snapshotOptions(){return{...super._snapshotOptions(),comparator:this._comparator,enableOrderStatistic:this._enableOrderStatistic}}_keyValueNodeOrEntryToNodeAndValue(e,t){let[n,i]=super._keyValueNodeOrEntryToNodeAndValue(e,t);return n===null?[void 0,void 0]:[n,t!=null?t:i]}_updateCount(e){this._enableOrderStatistic&&(e._count=1+(this.isRealNode(e.left)?e.left._count:0)+(this.isRealNode(e.right)?e.right._count:0))}_updateCountAlongPath(e){if(!this._enableOrderStatistic)return;let t=e;for(;t;)this._updateCount(t),t=t.parent}_getByRankIterative(e,t){let n=e,i=t;for(;n;){let s=this.isRealNode(n.left)?n.left._count:0;if(i<s)n=n.left;else{if(i===s)return n;i=i-s-1,n=n.right}}}_getByRankRecursive(e,t){if(!e)return;let n=this.isRealNode(e.left)?e.left._count:0;return t<n?this._getByRankRecursive(e.left,t):t===n?e:this._getByRankRecursive(e.right,t-n-1)}_getRankIterative(e,t){let n=0,i=e;for(;this.isRealNode(i);){let s=this._compare(i.key,t);if(s>0)i=i.left;else if(s<0)n+=(this.isRealNode(i.left)?i.left._count:0)+1,i=i.right;else return n+=this.isRealNode(i.left)?i.left._count:0,n}return n}_getRankRecursive(e,t){if(!e)return 0;let n=this._compare(e.key,t);return n>0?this._getRankRecursive(e.left,t):n<0?(this.isRealNode(e.left)?e.left._count:0)+1+this._getRankRecursive(e.right,t):this.isRealNode(e.left)?e.left._count:0}_next(e){if(this.isRealNode(e.right)){let i=e.right;for(;this.isRealNode(i.left);)i=i.left;return i}let t=e,n=t.parent;for(;n&&t===n.right;)t=n,n=n.parent;return n}_setRoot(e){e&&(e.parent=void 0),this._root=e}_compare(e,t){return this._comparator(e,t)}_deleteByKey(e){let t=this._root;for(;t;){let o=this._compare(t.key,e);if(o===0)break;t=o>0?t.left:t.right}if(!t)return!1;let n=(o,d)=>{let a=o==null?void 0:o.parent;a?a.left===o?a.left=d:a.right=d:this._setRoot(d),d&&(d.parent=a)},i=o=>{if(o){for(;o.left!==void 0&&o.left!==null;)o=o.left;return o}},s;if(t.left===void 0)s=t.parent,n(t,t.right);else if(t.right===void 0)s=t.parent,n(t,t.left);else{let o=i(t.right);o.parent!==t?(s=o.parent,n(o,o.right),o.right=t.right,o.right&&(o.right.parent=o)):s=o,n(t,o),o.left=t.left,o.left&&(o.left.parent=o)}return this._updateCountAlongPath(s),this._size=Math.max(0,this._size-1),!0}};var nt=class l{constructor(r){h(this,"_size");h(this,"_tree");if(Array.isArray(r)){this._size=r.length,this._tree=new Array(this._size+1).fill(0);for(let e=0;e<this._size;e++)this._pointUpdate(e+1,r[e])}else(!Number.isInteger(r)||r<0)&&m(RangeError,K.invalidArgument("size must be a non-negative integer","BinaryIndexedTree")),this._size=r,this._tree=new Array(this._size+1).fill(0)}update(r,e){this._checkIndex(r),this._pointUpdate(r+1,e)}set(r,e){this._checkIndex(r);let t=this.get(r);this._pointUpdate(r+1,e-t)}get(r){return this._checkIndex(r),this._pointQuery(r+1)}query(r){return this._checkIndex(r),this._prefixSum(r+1)}queryRange(r,e){return this._checkIndex(r),this._checkIndex(e),r>e?0:r===0?this._prefixSum(e+1):this._prefixSum(e+1)-this._prefixSum(r)}lowerBound(r){let e=0,t=this._highBit(this._size);for(;t>0;){let n=e+t;n<=this._size&&this._tree[n]<r&&(r-=this._tree[n],e=n),t>>=1}return e}upperBound(r){let e=0,t=this._highBit(this._size);for(;t>0;){let n=e+t;n<=this._size&&this._tree[n]<=r&&(r-=this._tree[n],e=n),t>>=1}return e}get size(){return this._size}isEmpty(){return this._size===0}clear(){this._tree.fill(0)}clone(){return new l(this.toArray())}toArray(){let r=[];for(let e=0;e<this._size;e++)r.push(this._pointQuery(e+1));return r}[Symbol.iterator](){let r=this._size,e=0,t=this;return{[Symbol.iterator](){return this},next(){return e<r?{value:t._pointQuery(e+++1),done:!1}:{value:void 0,done:!0}}}}forEach(r){for(let e=0;e<this._size;e++)r(this._pointQuery(e+1),e)}print(){console.log(this.toArray())}_prefixSum(r){let e=0;for(;r>0;)e+=this._tree[r],r-=r&-r;return e}_pointUpdate(r,e){for(;r<=this._size;)this._tree[r]+=e,r+=r&-r}_pointQuery(r){let e=this._tree[r],t=r-(r&-r);for(r--;r>t;)e-=this._tree[r],r-=r&-r;return e}_checkIndex(r){Number.isInteger(r)||m(TypeError,K.invalidIndex("BinaryIndexedTree")),(r<0||r>=this._size)&&m(RangeError,K.indexOutOfRange(r,0,this._size-1,"BinaryIndexedTree"))}_highBit(r){let e=1;for(;e<=r;)e<<=1;return e>>1}};var it=class l{constructor(r,e){h(this,"_merger");h(this,"_identity");h(this,"_n");h(this,"_tree");h(this,"_treeSize");for(this._merger=e.merger,this._identity=e.identity,this._n=r.length,this._treeSize=1;this._treeSize<this._n;)this._treeSize<<=1;this._tree=new Array(2*this._treeSize).fill(this._identity);for(let t=0;t<this._n;t++)this._tree[this._treeSize+t]=r[t];for(let t=this._treeSize-1;t>=1;t--)this._tree[t]=this._merger(this._tree[2*t],this._tree[2*t+1])}static sum(r){return new l(r,{merger:(e,t)=>e+t,identity:0})}static min(r){return new l(r,{merger:(e,t)=>Math.min(e,t),identity:1/0})}static max(r){return new l(r,{merger:(e,t)=>Math.max(e,t),identity:-1/0})}update(r,e){if(r<0||r>=this._n)return;let t=this._treeSize+r;for(this._tree[t]=e,t>>=1;t>=1;)this._tree[t]=this._merger(this._tree[2*t],this._tree[2*t+1]),t>>=1}query(r,e){if(r<0&&(r=0),e>=this._n&&(e=this._n-1),r>e)return this._identity;let t=this._identity,n=this._identity,i=this._treeSize+r,s=this._treeSize+e+1;for(;i<s;)i&1&&(t=this._merger(t,this._tree[i]),i++),s&1&&(s--,n=this._merger(this._tree[s],n)),i>>=1,s>>=1;return this._merger(t,n)}get(r){return r<0||r>=this._n?this._identity:this._tree[this._treeSize+r]}maxRight(r,e){if(r>=this._n)return this._n-1;let t=this._identity;if(!e(t))return r-1;let n=this._treeSize+r;for(;;){for(;n<this._treeSize;){let s=this._merger(t,this._tree[2*n]);e(s)?(t=s,n=2*n+1):n=2*n}let i=this._merger(t,this._tree[n]);if(!e(i))return n-this._treeSize-1;if(t=i,n++,n-this._treeSize>=this._n)return this._n-1;for(;n>1&&(n&1)===0;)n>>=1;if(n===1)return this._n-1}}minLeft(r,e){if(r<0)return 0;r>=this._n&&(r=this._n-1);let t=this._identity;if(!e(t))return r+1;let n=this._treeSize+r;for(;;){for(;n<this._treeSize;){let s=this._merger(this._tree[2*n+1],t);e(s)?(t=s,n=2*n):n=2*n+1}let i=this._merger(this._tree[n],t);if(!e(i))return n-this._treeSize+1;if(t=i,n===this._treeSize)return 0;for(n--;n>1&&(n&1)===1;)n>>=1;if(n===1)return 0}}get size(){return this._n}isEmpty(){return this._n===0}clone(){let r=[];for(let e=0;e<this._n;e++)r.push(this._tree[this._treeSize+e]);return new l(r,{merger:this._merger,identity:this._identity})}toArray(){let r=[];for(let e=0;e<this._n;e++)r.push(this._tree[this._treeSize+e]);return r}[Symbol.iterator](){let r=this._tree,e=this._treeSize,t=this._n,n=0;return{[Symbol.iterator](){return this},next(){return n<t?{value:r[e+n++],done:!1}:{value:void 0,done:!0}}}}forEach(r){for(let e=0;e<this._n;e++)r(this._tree[this._treeSize+e],e)}print(){console.log(this.toArray())}};var Re=class{constructor(r,e){h(this,"key");h(this,"value");h(this,"parent");h(this,"_left");h(this,"_right");h(this,"_height",0);h(this,"_color","BLACK");h(this,"_count",1);this.key=r,this.value=e}get left(){return this._left}set left(r){r&&(r.parent=this),this._left=r}get right(){return this._right}set right(r){r&&(r.parent=this),this._right=r}get height(){return this._height}set height(r){this._height=r}get color(){return this._color}set color(r){this._color=r}get count(){return this._count}set count(r){this._count=r}get familyPosition(){return this.parent?this.parent.left===this?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===this?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},rt=class extends te{constructor(r=[],e){super([],e),r&&super.setMany(r)}createNode(r,e){return new Re(r,e)}isNode(r){return r instanceof Re}set(r,e){if(r===null)return!1;let t=super.set(r,e);return t&&this._balancePath(r),t}delete(r){let e=super.delete(r);for(let{needBalanced:t}of e)t&&this._balancePath(t);return e}perfectlyBalance(r=this.iterationType){let e=this.dfs(s=>s,"IN",!1,this._root,r),t=e.length;if(t===0)return!1;this._clearNodes();let n=(s,o,d)=>{if(s>o)return;let a=s+(o-s>>1),u=e[a];u.left=n(s,a-1,u),u.right=n(a+1,o,u),u.parent=d;let f=u.left?u.left.height:-1,c=u.right?u.right.height:-1;return u.height=Math.max(f,c)+1,u},i=n(0,t-1,void 0);return this._setRoot(i),this._size=t,!0}map(r,e,t){let n=this._createLike([],e),i=0;for(let[s,o]of this)n.set(r.call(t,o,s,i++,this));return n}_createInstance(r){let e=this.constructor;return new e([],{...this._snapshotOptions(),...r!=null?r:{}})}_createLike(r=[],e){let t=this.constructor;return new t(r,{...this._snapshotOptions(),...e!=null?e:{}})}_swapProperties(r,e){let t=this.ensureNode(r),n=this.ensureNode(e);if(t&&n){let{key:i,value:s,height:o}=n,d=this.createNode(i,s);return d&&(d.height=o,n.key=t.key,this._isMapMode||(n.value=t.value),n.height=t.height,t.key=d.key,this._isMapMode||(t.value=d.value),t.height=d.height),n}}_balanceFactor(r){let e=r.left?r.left.height:-1;return(r.right?r.right.height:-1)-e}_updateHeight(r){let e=r.left?r.left.height:-1,t=r.right?r.right.height:-1;r.height=1+Math.max(e,t)}_balanceLL(r){let e=r.parent,t=r.left;t!==null&&(r.parent=t),t&&t.right&&(t.right.parent=r),t&&(t.parent=e),r===this.root?t&&this._setRoot(t):(e==null?void 0:e.left)===r?e.left=t:e&&(e.right=t),t&&(r.left=t.right,t.right=r),this._updateHeight(r),t&&this._updateHeight(t),this._updateCount(r),t&&this._updateCount(t)}_balanceLR(r){let e=r.parent,t=r.left,n;t&&(n=t.right),r&&n!==null&&(r.parent=n),t&&n!==null&&(t.parent=n),n&&(n.left&&t!==null&&(n.left.parent=t),n.right&&(n.right.parent=r),n.parent=e),r===this.root?n&&this._setRoot(n):e&&(e.left===r?e.left=n:e.right=n),n&&(r.left=n.right,t&&(t.right=n.left),n.left=t,n.right=r),this._updateHeight(r),t&&this._updateHeight(t),n&&this._updateHeight(n),this._updateCount(r),t&&this._updateCount(t),n&&this._updateCount(n)}_balanceRR(r){let e=r.parent,t=r.right;t!==null&&(r.parent=t),t&&(t.left&&(t.left.parent=r),t.parent=e),r===this.root?t&&this._setRoot(t):e&&(e.left===r?e.left=t:e.right=t),t&&(r.right=t.left,t.left=r),this._updateHeight(r),t&&this._updateHeight(t),this._updateCount(r),t&&this._updateCount(t)}_balanceRL(r){let e=r.parent,t=r.right,n;t&&(n=t.left),n!==null&&(r.parent=n),t&&n!==null&&(t.parent=n),n&&(n.left&&(n.left.parent=r),n.right&&t!==null&&(n.right.parent=t),n.parent=e),r===this.root?n&&this._setRoot(n):e&&(e.left===r?e.left=n:e.right=n),n&&(r.right=n.left),t&&n&&(t.left=n.right),n&&(n.left=r),n&&(n.right=t),this._updateHeight(r),t&&this._updateHeight(t),n&&this._updateHeight(n),this._updateCount(r),t&&this._updateCount(t),n&&this._updateCount(n)}_balancePath(r){r=this.ensureNode(r);let e=this.getPathToRoot(r,t=>t,!1);for(let t=0;t<e.length;t++){let n=e[t];if(n)switch(this._updateHeight(n),this._updateCount(n),this._balanceFactor(n)){case-2:n&&n.left&&(this._balanceFactor(n.left)<=0?this._balanceLL(n):this._balanceLR(n));break;case 2:n&&n.right&&(this._balanceFactor(n.right)>=0?this._balanceRR(n):this._balanceRL(n))}}}_replaceNode(r,e){return e.height=r.height,super._replaceNode(r,e)}};var fe=class{constructor(r,e,t="BLACK"){h(this,"key");h(this,"value");h(this,"parent");h(this,"_left");h(this,"_right");h(this,"_height",0);h(this,"_color","BLACK");h(this,"_count",1);this.key=r,this.value=e,this.color=t}get left(){return this._left}set left(r){r&&(r.parent=this),this._left=r}get right(){return this._right}set right(r){r&&(r.parent=this),this._right=r}get height(){return this._height}set height(r){this._height=r}get color(){return this._color}set color(r){this._color=r}get count(){return this._count}get familyPosition(){return this.parent?this.parent.left===this?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===this?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},H=class extends te{constructor(e=[],t){super([],t);h(this,"_root");h(this,"_header");h(this,"_minNode");h(this,"_maxNode");this._root=this.NIL,this._header=new fe(void 0,void 0,"BLACK"),this._header.parent=this.NIL,this._header._left=this.NIL,this._header._right=this.NIL,e&&this.setMany(e)}get root(){return this._root}createNode(e,t,n="BLACK"){return new fe(e,t,n)}isNode(e){return e instanceof fe}clear(){super.clear(),this._root=this.NIL,this._header.parent=this.NIL,this._setMinCache(void 0),this._setMaxCache(void 0)}_findNodeByKey(e){var s,o,d;let t=this.NIL,n=this._compare.bind(this),i=(s=this._header.parent)!=null?s:t;for(;i!==t;){let a=n(e,i.key);if(a<0)i=(o=i.left)!=null?o:t;else if(a>0)i=(d=i.right)!=null?d:t;else return i}}_predecessorOf(e){let t=this.NIL;if(e.left&&e.left!==t){let s=e.left;for(;s.right&&s.right!==t;)s=s.right;return s}let n=e,i=e.parent;for(;i&&n===i.left;)n=i,i=i.parent;return i}_successorOf(e){let t=this.NIL;if(e.right&&e.right!==t){let s=e.right;for(;s.left&&s.left!==t;)s=s.left;return s}let n=e,i=e.parent;for(;i&&n===i.right;)n=i,i=i.parent;return i}_attachNewNode(e,t,n){let i=this.NIL;n.parent=e,t==="left"?e.left=n:e.right=n,n.left=i,n.right=i,n.color="RED",this._updateCountAlongPath(n),this._insertFixup(n),this.isRealNode(this._root)&&(this._root.color="BLACK")}_setMinCache(e){this._minNode=e,this._header._left=e!=null?e:this.NIL}_setMaxCache(e){this._maxNode=e,this._header._right=e!=null?e:this.NIL}_setKVNode(e,t){var E,R,y,k,V,T,M;let n=this.NIL,i=this._comparator,s=this._header,o=(E=s._left)!=null?E:n;if(o!==n){let L=i(e,o.key);if(L===0)return o.value=t,this._isMapMode&&this._store.set(e,o),{node:o,created:!1};let F=o.left;if(L<0&&(F===n||F===null||F===void 0)){let A=this.createNode(e,t);return this._attachNewNode(o,"left",A),this._isMapMode&&this._store.set(A.key,A),this._size++,this._setMinCache(A),s._right===n&&this._setMaxCache(A),{node:A,created:!0}}if(L>0){let A=(R=s._right)!=null?R:n,pt=i(e,A.key);if(pt===0)return A.value=t,this._isMapMode&&this._store.set(e,A),{node:A,created:!1};let De=A.right;if(pt>0&&(De===n||De===null||De===void 0)){let se=this.createNode(e,t);return this._attachNewNode(A,"right",se),this._isMapMode&&this._store.set(se.key,se),this._size++,this._setMaxCache(se),s._left===n&&this._setMinCache(se),{node:se,created:!0}}}}let d=i,a=this._isMapMode,u=this._store,f=(y=this._header.parent)!=null?y:n,c,_=0;for(;f!==n;)if(c=f,_=d(e,f.key),_<0)f=(k=f.left)!=null?k:n;else if(_>0)f=(V=f.right)!=null?V:n;else return f.value=t,a&&u.set(e,f),{node:f,created:!1};let g=this.createNode(e,t);if(g.parent=c,c?_<0?c.left=g:c.right=g:this._setRoot(g),g.left=n,g.right=n,g.color="RED",this._updateCountAlongPath(g),this._insertFixup(g),this.isRealNode(this._root))this._root.color="BLACK";else return;a&&u.set(g.key,g),this._size++;let b=(T=this._header._left)!=null?T:n,N=(M=this._header._right)!=null?M:n;return b===n||N===n?(this._setMinCache(g),this._setMaxCache(g)):c===N&&_>0?this._setMaxCache(g):c===b&&_<0?this._setMinCache(g):(d(g.key,b.key)<0&&this._setMinCache(g),d(g.key,N.key)>0&&this._setMaxCache(g)),{node:g,created:!0}}_setKV(e,t){if(this._isMapMode){let i=this._store.get(e);if(i)return i.value=t,!0}return this._setKVNode(e,t)!==void 0}setWithHintNode(e,t,n){var d,a,u,f,c,_,g,b,N,E,R,y,k;if(!n||!this.isRealNode(n))return(d=this._setKVNode(e,t))==null?void 0:d.node;let i=this._compare.bind(this),s=i(e,n.key);if(s===0)return n.value=t,this._isMapMode&&this._store.set(e,n),n;if(s<0){if(!this.isRealNode(n.left)){let T=this.createNode(e,t);if(!this.isRealNode(T))return;this._attachNewNode(n,"left",T),this._isMapMode&&this._store.set(e,T),this._size++;let M=this.NIL,L=(a=this._header._left)!=null?a:M;(L===M||this._compare(T.key,L.key)<0)&&this._setMinCache(T);let F=(u=this._header._right)!=null?u:M;return(F===M||this._compare(T.key,F.key)>0)&&this._setMaxCache(T),T}let V=this._predecessorOf(n);if(V&&i(V.key,e)>=0)return(f=this._setKVNode(e,t))==null?void 0:f.node;if(V&&!this.isRealNode(V.right)){let T=this.createNode(e,t);if(!this.isRealNode(T))return;this._attachNewNode(V,"right",T),this._isMapMode&&this._store.set(e,T),this._size++;let M=this.NIL,L=(c=this._header._left)!=null?c:M;(L===M||this._compare(T.key,L.key)<0)&&this._setMinCache(T);let F=(_=this._header._right)!=null?_:M;return(F===M||this._compare(T.key,F.key)>0)&&this._setMaxCache(T),T}return(g=this._setKVNode(e,t))==null?void 0:g.node}if(!this.isRealNode(n.right)){let V=this.createNode(e,t);if(!this.isRealNode(V))return;this._attachNewNode(n,"right",V),this._isMapMode&&this._store.set(e,V),this._size++;let T=this.NIL,M=(b=this._header._left)!=null?b:T;(M===T||this._compare(V.key,M.key)<0)&&this._setMinCache(V);let L=(N=this._header._right)!=null?N:T;return(L===T||this._compare(V.key,L.key)>0)&&this._setMaxCache(V),V}let o=this._successorOf(n);if(o&&i(o.key,e)<=0)return(E=this._setKVNode(e,t))==null?void 0:E.node;if(o&&!this.isRealNode(o.left)){let V=this.createNode(e,t);if(!this.isRealNode(V))return;this._attachNewNode(o,"left",V),this._isMapMode&&this._store.set(e,V),this._size++;let T=this.NIL,M=(R=this._header._left)!=null?R:T;(M===T||this._compare(V.key,M.key)<0)&&this._setMinCache(V);let L=(y=this._header._right)!=null?y:T;return(L===T||this._compare(V.key,L.key)>0)&&this._setMaxCache(V),V}return(k=this._setKVNode(e,t))==null?void 0:k.node}setWithHint(e,t,n){return this.setWithHintNode(e,t,n)!==void 0}set(e,t){if(!this.isNode(e)){if(e==null)return!1;if(this.isEntry(e)){let o=e[0];if(o==null)return!1;let d=t!=null?t:e[1];return this._setKV(o,d)}return this._setKV(e,t)}let[n,i]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(!this.isRealNode(n))return!1;let s=this._insert(n);if(s==="CREATED"){if(this.isRealNode(this._root))this._root.color="BLACK";else return!1;if(this._isMapMode){let o=this.getNode(n.key);this.isRealNode(o)&&(o.value=i,this._store.set(o.key,o))}return this._size++,!0}if(s==="UPDATED"){if(this._isMapMode){let o=this.getNode(n.key);this.isRealNode(o)&&(o.value=i,this._store.set(o.key,o))}return!0}return!1}delete(e){var c,_,g;if(e===null)return[];let t=[],n;if(this._isPredicate(e)?n=this.getNode(e):n=this.isRealNode(e)?e:this.getNode(e),!n)return t;let i=n===this._minNode,s=n===this._maxNode,o=i?this._successorOf(n):void 0,d=s?this._predecessorOf(n):void 0,a=n.color,u=this.NIL,f=u;if(!this.isRealNode(n.left))f=(c=n.right)!=null?c:u,this._transplant(n,f);else if(!this.isRealNode(n.right))f=n.left,this._transplant(n,f);else{let b=this.getLeftMost(N=>N,n.right);b&&(a=b.color,f=(_=b.right)!=null?_:u,b.parent===n?f.parent=b:(this._transplant(b,f),b.right=n.right,b.right&&(b.right.parent=b)),this._transplant(n,b),b.left=n.left,b.left&&(b.left.parent=b),b.color=n.color)}return this._isMapMode&&this._store.delete(n.key),this._size--,this._updateCountAlongPath((g=f==null?void 0:f.parent)!=null?g:f),this._size<=0?(this._setMinCache(void 0),this._setMaxCache(void 0)):(i&&this._setMinCache(o),s&&this._setMaxCache(d),(!this._minNode||!this.isRealNode(this._minNode))&&this._setMinCache(this.isRealNode(this._root)?this.getLeftMost(b=>b,this._root):void 0),(!this._maxNode||!this.isRealNode(this._maxNode))&&this._setMaxCache(this.isRealNode(this._root)?this.getRightMost(b=>b,this._root):void 0)),a==="BLACK"&&this._deleteFixup(f),t.push({deleted:n,needBalanced:void 0}),t}perfectlyBalance(e){let t=[];for(let[n,i]of this)t.push([n,i]);return t.length<=1||(this.clear(),this.setMany(t.map(([n])=>n),t.map(([,n])=>n),!0)),!0}map(e,t,n){let i=this._createLike([],t),s=0;for(let[o,d]of this)i.set(e.call(n,d,o,s++,this));return i}_createInstance(e){let t=this.constructor;return new t([],{...this._snapshotOptions(),...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,{...this._snapshotOptions(),...t!=null?t:{}})}_setRoot(e){let t=this.NIL;e&&(e.parent=void 0),this._root=e,this._header.parent=e!=null?e:t}_replaceNode(e,t){return t.color=e.color,super._replaceNode(e,t)}_insert(e){var d,a,u;let t=this.NIL,n=this._compare.bind(this),i=(d=this._header.parent)!=null?d:t,s,o=0;for(;i!==t;)if(s=i,o=n(e.key,i.key),o<0)i=(a=i.left)!=null?a:t;else if(o>0)i=(u=i.right)!=null?u:t;else return this._replaceNode(i,e),"UPDATED";return e.parent=s,s?o<0?s.left=e:s.right=e:this._setRoot(e),e.left=t,e.right=t,e.color="RED",this._updateCountAlongPath(e),this._insertFixup(e),"CREATED"}_transplant(e,t){e.parent?e===e.parent.left?e.parent.left=t:e.parent.right=t:this._setRoot(t),t&&(t.parent=e.parent)}_insertFixup(e){let t=this._leftRotate.bind(this),n=this._rightRotate.bind(this);for(;e;){let i=e.parent;if(!i||i.color!=="RED")break;let s=i.parent;if(!s)break;if(i===s.left){let o=s.right;if((o==null?void 0:o.color)==="RED"){i.color="BLACK",o.color="BLACK",s.color="RED",e=s;continue}e===i.right&&(e=i,t(e));let d=e==null?void 0:e.parent,a=d==null?void 0:d.parent;d&&a&&(d.color="BLACK",a.color="RED",n(a))}else{let o=s.left;if((o==null?void 0:o.color)==="RED"){i.color="BLACK",o.color="BLACK",s.color="RED",e=s;continue}e===i.left&&(e=i,n(e));let d=e==null?void 0:e.parent,a=d==null?void 0:d.parent;d&&a&&(d.color="BLACK",a.color="RED",t(a))}break}this.isRealNode(this._root)&&(this._root.color="BLACK")}_deleteFixup(e){if(!e)return;let t=this.NIL,n=e;for(;n!==this.root&&n.color==="BLACK";){let i=n.parent;if(!i)break;let s=n===i.left,o=s?i.right:i.left;o&&o.color==="RED"&&(o.color="BLACK",i.color="RED",s?(this._leftRotate(i),o=i.right):(this._rightRotate(i),o=i.left));let d=o==null?void 0:o.left,a=o==null?void 0:o.right,u=!d||d===t||d.color==="BLACK",f=!a||a===t||a.color==="BLACK";u&&f?(o&&(o.color="RED"),n=i):(s?(f&&(d&&(d.color="BLACK"),o&&(o.color="RED"),o&&this._rightRotate(o),o=i.right),o&&(o.color=i.color),i.color="BLACK",o!=null&&o.right&&(o.right.color="BLACK"),this._leftRotate(i)):(u&&(a&&(a.color="BLACK"),o&&(o.color="RED"),o&&this._leftRotate(o),o=i.left),o&&(o.color=i.color),i.color="BLACK",o!=null&&o.left&&(o.left.color="BLACK"),this._rightRotate(i)),n=this.root)}n.color="BLACK"}_leftRotate(e){if(!e||!e.right)return;let t=e.right;e.right=t.left,t.left&&t.left!==this.NIL&&(t.left.parent=e),t.parent=e.parent,e.parent?e===e.parent.left?e.parent.left=t:e.parent.right=t:this._setRoot(t),t.left=e,e.parent=t,this._updateCount(e),this._updateCount(t)}_rightRotate(e){if(!e||!e.left)return;let t=e.left;e.left=t.right,t.right&&t.right!==this.NIL&&(t.right.parent=e),t.parent=e.parent,e.parent?e===e.parent.left?e.parent.left=t:e.parent.right=t:this._setRoot(t),t.right=e,e.parent=t,this._updateCount(e),this._updateCount(t)}};var C,pe,_e,ce=class ce{constructor(r=[],e={}){S(this,C);S(this,pe);S(this,_e);var i;v(this,_e,e.comparator);let t=e.toElementFn,n=(i=e.comparator)!=null?i:ce.createDefaultComparator();v(this,pe,e.comparator===void 0),v(this,C,new H([],{comparator:n,isMapMode:e.isMapMode,enableOrderStatistic:e.enableOrderStatistic}));for(let s of r){let o=t?t(s):s;this.add(o)}}static createDefaultComparator(){return(r,e)=>{if(typeof r=="number"&&typeof e=="number"){(Number.isNaN(r)||Number.isNaN(e))&&m(TypeError,K.invalidNaN("TreeSet"));let t=Object.is(r,-0)?0:r,n=Object.is(e,-0)?0:e;return t>n?1:t<n?-1:0}if(typeof r=="string"&&typeof e=="string")return r>e?1:r<e?-1:0;if(r instanceof Date&&e instanceof Date){let t=r.getTime(),n=e.getTime();return(Number.isNaN(t)||Number.isNaN(n))&&m(TypeError,K.invalidDate("TreeSet")),t>n?1:t<n?-1:0}m(TypeError,K.comparatorRequired("TreeSet"))}}get size(){return p(this,C).size}isEmpty(){return this.size===0}_validateKey(r){if(p(this,pe)){if(typeof r=="number"){Number.isNaN(r)&&m(TypeError,K.invalidNaN("TreeSet"));return}if(typeof r!="string"){if(r instanceof Date){Number.isNaN(r.getTime())&&m(TypeError,K.invalidDate("TreeSet"));return}m(TypeError,K.comparatorRequired("TreeSet"))}}}add(r){return this._validateKey(r),p(this,C).set(r,void 0),this}has(r){return this._validateKey(r),p(this,C).has(r)}delete(r){var t;this._validateKey(r);let e=p(this,C).delete(r);return Array.isArray(e)&&e.length>0&&!!((t=e[0])!=null&&t.deleted)}clear(){p(this,C).clear()}keys(){return p(this,C).keys()}values(){return this.keys()}*entries(){for(let r of this.keys())yield[r,r]}[Symbol.iterator](){return this.keys()}forEach(r,e){for(let t of this)r.call(e,t,t,this)}map(r,e={},t){let n=new ce([],e),i=0;for(let s of this){let o=t===void 0?r(s,i++,this):r.call(t,s,i++,this);n.add(o)}return n}filter(r,e){let t=new ce([],{comparator:p(this,_e)}),n=0;for(let i of this)(e===void 0?r(i,n++,this):r.call(e,i,n++,this))&&t.add(i);return t}reduce(r,e){let t=e,n=0;for(let i of this)t=r(t,i,n++,this);return t}every(r,e){let t=0;for(let n of this)if(!(e===void 0?r(n,t++,this):r.call(e,n,t++,this)))return!1;return!0}some(r,e){let t=0;for(let n of this)if(e===void 0?r(n,t++,this):r.call(e,n,t++,this))return!0;return!1}find(r,e){let t=0;for(let n of this)if(e===void 0?r(n,t++,this):r.call(e,n,t++,this))return n}toArray(){return[...this]}print(){p(this,C).print()}first(){return p(this,C).getLeftMost()}last(){return p(this,C).getRightMost()}pollFirst(){let r=this.first();if(r!==void 0)return this.delete(r),r}pollLast(){let r=this.last();if(r!==void 0)return this.delete(r),r}ceiling(r){return this._validateKey(r),p(this,C).ceiling(r)}floor(r){return this._validateKey(r),p(this,C).floor(r)}higher(r){return this._validateKey(r),p(this,C).higher(r)}lower(r){return this._validateKey(r),p(this,C).lower(r)}rangeSearch(r,e={}){let{lowInclusive:t=!0,highInclusive:n=!0}=e,[i,s]=r;this._validateKey(i),this._validateKey(s);let o=p(this,C).rangeSearch([i,s]),d=[],a=p(this,C).comparator;for(let u of o)u!==void 0&&(!t&&a(u,i)===0||!n&&a(u,s)===0||d.push(u));return d}getByRank(r){return p(this,C).getByRank(r)}getRank(r){return p(this,C).getRank(r)}rangeByRank(r,e){return p(this,C).rangeByRank(r,e).filter(t=>t!==void 0)}clone(){return new ce(this,{comparator:p(this,pe)?void 0:p(this,_e),isMapMode:p(this,C).isMapMode})}};C=new WeakMap,pe=new WeakMap,_e=new WeakMap;var ne=ce;var B,Me,ke=class ke{constructor(r=[],e={}){S(this,B);S(this,Me);var i;let t=(i=e.comparator)!=null?i:ne.createDefaultComparator();v(this,Me,e.comparator===void 0);let n=e.toEntryFn;v(this,B,new H([],{...e,comparator:t,isMapMode:e.isMapMode,enableOrderStatistic:e.enableOrderStatistic}));for(let s of r)if(s!=null){if(n){let[o,d]=n(s);if(o==null)continue;d!==void 0?p(this,B).set(o,Array.isArray(d)?[...d]:[d]):p(this,B).set(o,[]);continue}if(Array.isArray(s)){let[o,d]=s;if(o==null)continue;d!==void 0?p(this,B).set(o,[...d]):p(this,B).set(o,[]);continue}p(this,B).set(s,[])}}_validateKey(r){if(p(this,Me)){if(typeof r=="number"){Number.isNaN(r)&&m(TypeError,K.invalidNaN("TreeMultiMap"));return}if(typeof r!="string"){if(r instanceof Date){Number.isNaN(r.getTime())&&m(TypeError,K.invalidDate("TreeMultiMap"));return}m(TypeError,K.comparatorRequired("TreeMultiMap"))}}}get size(){return p(this,B).size}isEmpty(){return this.size===0}clear(){p(this,B).clear()}count(r){let e=this.get(r);return Array.isArray(e)?e.length:0}get totalSize(){let r=0;for(let[,e]of this)r+=e.length;return r}has(r){return this._validateKey(r),p(this,B).has(r)}get(r){return this._validateKey(r),p(this,B).get(r)}add(r,e){this._validateKey(r);let t=p(this,B).get(r);return t?(t.push(e),!0):p(this,B).set(r,[e])}set(r,e){if(r==null)return!1;if(Array.isArray(r)){let[t,n]=r;if(t==null)return!1;if(e!==void 0)return this.add(t,e);if(n===void 0)return p(this,B).set(t,[]);let i=p(this,B).get(t);return i?(i.push(...n),!0):p(this,B).set(t,[...n])}return e!==void 0?this.add(r,e):p(this,B).set(r,[])}delete(r){return this._validateKey(r),p(this,B).delete(r).length>0}hasEntry(r,e,t=Object.is){let n=this.get(r);return Array.isArray(n)?n.some(i=>t(i,e)):!1}deleteValue(r,e,t=Object.is){let n=this.get(r);if(!Array.isArray(n))return!1;let i=n.findIndex(s=>t(s,e));return i===-1?!1:(n.splice(i,1),n.length===0&&this.delete(r),!0)}deleteValues(r,e,t=Object.is){let n=this.get(r);if(!Array.isArray(n)||n.length===0)return 0;let i=0;for(let s=n.length-1;s>=0;s--)t(n[s],e)&&(n.splice(s,1),i++);return n.length===0&&i>0&&this.delete(r),i}*[Symbol.iterator](){for(let[r,e]of p(this,B))yield[r,e!=null?e:[]]}*keys(){yield*p(this,B).keys()}*values(){for(let[,r]of this)yield r}*entriesOf(r){let e=this.get(r);if(Array.isArray(e))for(let t of e)yield[r,t]}*valuesOf(r){let e=this.get(r);Array.isArray(e)&&(yield*e)}*flatEntries(){for(let[r,e]of this)for(let t of e)yield[r,t]}first(){let r=p(this,B).getLeftMost();if(r===void 0)return;let e=this.get(r);return e===void 0?void 0:[r,e]}last(){let r=p(this,B).getRightMost();if(r===void 0)return;let e=this.get(r);return e===void 0?void 0:[r,e]}pollFirst(){let r=this.first();if(r)return this.delete(r[0]),r}pollLast(){let r=this.last();if(r)return this.delete(r[0]),r}ceiling(r){this._validateKey(r);let e=p(this,B).ceiling(r);if(e===void 0)return;let t=this.get(e);return t===void 0?void 0:[e,t]}floor(r){this._validateKey(r);let e=p(this,B).floor(r);if(e===void 0)return;let t=this.get(e);return t===void 0?void 0:[e,t]}higher(r){this._validateKey(r);let e=p(this,B).higher(r);if(e===void 0)return;let t=this.get(e);return t===void 0?void 0:[e,t]}lower(r){this._validateKey(r);let e=p(this,B).lower(r);if(e===void 0)return;let t=this.get(e);return t===void 0?void 0:[e,t]}print(){p(this,B).print()}forEach(r){for(let[e,t]of this)r(t,e,this)}filter(r){let e=[];for(let[t,n]of this)r(n,t,this)&&e.push([t,n]);return new ke(e,{comparator:this.comparator})}map(r){let e=[];for(let[t,n]of this)e.push(r(n,t,this));return new ke(e,{comparator:this.comparator})}reduce(r,e){let t=e;for(let[n,i]of this)t=r(t,i,n,this);return t}setMany(r){let e=[];for(let t of r)e.push(this.set(t));return e}rangeSearch(r,e){return p(this,B).rangeSearch(r,e)}getByRank(r){var t;let e=p(this,B).getByRank(r);if(e!==void 0)return[e,(t=p(this,B).get(e))!=null?t:[]]}getRank(r){return p(this,B).getRank(r)}rangeByRank(r,e){return p(this,B).rangeByRank(r,e).filter(n=>n!==void 0).map(n=>{var i;return[n,(i=p(this,B).get(n))!=null?i:[]]})}clone(){return new ke(this,{comparator:this.comparator,isMapMode:p(this,B).isMapMode})}get comparator(){return p(this,B).comparator}};B=new WeakMap,Me=new WeakMap;var st=ke;var I,be,me,ge=class ge{constructor(r=[],e={}){S(this,I);S(this,be);S(this,me);var i;v(this,me,e.comparator);let t=e.toEntryFn,n=(i=e.comparator)!=null?i:ge.createDefaultComparator();v(this,be,e.comparator===void 0),v(this,I,new H([],{comparator:n,isMapMode:e.isMapMode,enableOrderStatistic:e.enableOrderStatistic}));for(let s of r){let o,d;t?[o,d]=t(s):((!Array.isArray(s)||s.length<2)&&m(TypeError,K.invalidEntry("TreeMap")),o=s[0],d=s[1]),this.set(o,d)}}static createDefaultComparator(){return(r,e)=>{if(typeof r=="number"&&typeof e=="number"){(Number.isNaN(r)||Number.isNaN(e))&&m(TypeError,K.invalidNaN("TreeMap"));let t=Object.is(r,-0)?0:r,n=Object.is(e,-0)?0:e;return t>n?1:t<n?-1:0}if(typeof r=="string"&&typeof e=="string")return r>e?1:r<e?-1:0;if(r instanceof Date&&e instanceof Date){let t=r.getTime(),n=e.getTime();return(Number.isNaN(t)||Number.isNaN(n))&&m(TypeError,K.invalidDate("TreeMap")),t>n?1:t<n?-1:0}m(TypeError,K.comparatorRequired("TreeMap"))}}_validateKey(r){if(p(this,be)){if(typeof r=="number"){Number.isNaN(r)&&m(TypeError,K.invalidNaN("TreeMap"));return}if(typeof r!="string"){if(r instanceof Date){Number.isNaN(r.getTime())&&m(TypeError,K.invalidDate("TreeMap"));return}m(TypeError,K.comparatorRequired("TreeMap"))}}}get size(){return p(this,I).size}isEmpty(){return this.size===0}set(r,e){return this._validateKey(r),p(this,I).set(r,e),this}get(r){return this._validateKey(r),p(this,I).get(r)}has(r){return this._validateKey(r),p(this,I).has(r)}delete(r){var t;this._validateKey(r);let e=p(this,I).delete(r);return Array.isArray(e)&&e.length>0&&!!((t=e[0])!=null&&t.deleted)}clear(){p(this,I).clear()}keys(){return p(this,I).keys()}_entryFromKey(r){return[r,p(this,I).get(r)]}*values(){for(let r of this.keys())yield this._entryFromKey(r)[1]}*entries(){for(let r of this.keys())yield this._entryFromKey(r)}[Symbol.iterator](){return this.entries()}forEach(r,e){for(let[t,n]of this)r.call(e,n,t,this)}map(r,e={},t){let n=new ge([],e),i=0;for(let[s,o]of this){let[d,a]=t===void 0?r(o,s,i++,this):r.call(t,o,s,i++,this);n.set(d,a)}return n}filter(r,e){let t=new ge([],{comparator:p(this,me)}),n=0;for(let[i,s]of this)(e===void 0?r(s,i,n++,this):r.call(e,s,i,n++,this))&&t.set(i,s);return t}reduce(r,e){let t=e,n=0;for(let[i,s]of this)t=r(t,s,i,n++,this);return t}every(r,e){let t=0;for(let[n,i]of this)if(!(e===void 0?r(i,n,t++,this):r.call(e,i,n,t++,this)))return!1;return!0}some(r,e){let t=0;for(let[n,i]of this)if(e===void 0?r(i,n,t++,this):r.call(e,i,n,t++,this))return!0;return!1}find(r,e){let t=0;for(let[n,i]of this)if(e===void 0?r(i,n,t++,this):r.call(e,i,n,t++,this))return[n,i]}toArray(){return[...this]}print(){p(this,I).print()}first(){let r=p(this,I).getLeftMost();return r===void 0?void 0:this._entryFromKey(r)}last(){let r=p(this,I).getRightMost();return r===void 0?void 0:this._entryFromKey(r)}pollFirst(){let r=this.first();if(r)return this.delete(r[0]),r}pollLast(){let r=this.last();if(r)return this.delete(r[0]),r}ceiling(r){this._validateKey(r);let e=p(this,I).ceiling(r);return e===void 0?void 0:this._entryFromKey(e)}floor(r){this._validateKey(r);let e=p(this,I).floor(r);return e===void 0?void 0:this._entryFromKey(e)}higher(r){this._validateKey(r);let e=p(this,I).higher(r);return e===void 0?void 0:this._entryFromKey(e)}lower(r){this._validateKey(r);let e=p(this,I).lower(r);return e===void 0?void 0:this._entryFromKey(e)}rangeSearch(r,e={}){let{lowInclusive:t=!0,highInclusive:n=!0}=e,[i,s]=r;this._validateKey(i),this._validateKey(s);let o=p(this,I).rangeSearch([i,s]),d=[],a=p(this,I).comparator;for(let u of o)u!==void 0&&(!t&&a(u,i)===0||!n&&a(u,s)===0||d.push(this._entryFromKey(u)));return d}getByRank(r){let e=p(this,I).getByRank(r);if(e!==void 0)return[e,p(this,I).get(e)]}getRank(r){return p(this,I).getRank(r)}rangeByRank(r,e){return p(this,I).rangeByRank(r,e).filter(n=>n!==void 0).map(n=>[n,p(this,I).get(n)])}clone(){return new ge(this,{comparator:p(this,be)?void 0:p(this,me),isMapMode:p(this,I).isMapMode})}};I=new WeakMap,be=new WeakMap,me=new WeakMap;var ot=ge;var x,ie,Be=class Be{constructor(r=[],e={}){S(this,x);S(this,ie);h(this,"_size",0);var i;let t=e.toElementFn,n=(i=e.comparator)!=null?i:ne.createDefaultComparator();v(this,ie,e.comparator===void 0),v(this,x,new H([],{comparator:n,isMapMode:e.isMapMode,enableOrderStatistic:e.enableOrderStatistic}));for(let s of r){let o=t?t(s):s;this.add(o)}}_validateKey(r){if(p(this,ie)){if(typeof r=="number"){Number.isNaN(r)&&m(TypeError,K.invalidNaN("TreeMultiSet"));return}if(typeof r!="string"){if(r instanceof Date){Number.isNaN(r.getTime())&&m(TypeError,K.invalidDate("TreeMultiSet"));return}m(TypeError,K.comparatorRequired("TreeMultiSet"))}}}_validateCount(r){(!Number.isSafeInteger(r)||r<0)&&m(RangeError,K.invalidArgument("count must be a safe integer >= 0.","TreeMultiSet"))}get size(){return this._size}get distinctSize(){return p(this,x).size}isEmpty(){return this.size===0}has(r){return this._validateKey(r),this.count(r)>0}count(r){var e;return this._validateKey(r),(e=p(this,x).get(r))!=null?e:0}add(r,e=1){var i;if(this._validateKey(r),this._validateCount(e),e===0)return!1;let n=((i=p(this,x).get(r))!=null?i:0)+e;return p(this,x).set(r,n),this._size+=e,!0}setCount(r,e){var n;this._validateKey(r),this._validateCount(e);let t=(n=p(this,x).get(r))!=null?n:0;return t===e?!1:(e===0?t!==0&&p(this,x).delete(r):p(this,x).set(r,e),this._size+=e-t,!0)}delete(r,e=1){var s;if(this._validateKey(r),this._validateCount(e),e===0)return!1;let t=(s=p(this,x).get(r))!=null?s:0;if(t===0)return!1;let n=Math.min(t,e),i=t-n;return i===0?p(this,x).delete(r):p(this,x).set(r,i),this._size-=n,!0}deleteAll(r){var t;this._validateKey(r);let e=(t=p(this,x).get(r))!=null?t:0;return e===0?!1:(p(this,x).delete(r),this._size-=e,!0)}*keysDistinct(){yield*p(this,x).keys()}*entries(){for(let[r,e]of p(this,x))yield[r,e!=null?e:0]}*[Symbol.iterator](){for(let[r,e]of this.entries())for(let t=0;t<e;t++)yield r}toArray(){return[...this]}toDistinctArray(){return[...this.keysDistinct()]}toEntries(){return[...this.entries()]}get comparator(){return p(this,x).comparator}clear(){p(this,x).clear(),this._size=0}first(){return p(this,x).getLeftMost()}last(){return p(this,x).getRightMost()}pollFirst(){let r=this.first();if(r!==void 0)return this.deleteAll(r),r}pollLast(){let r=this.last();if(r!==void 0)return this.deleteAll(r),r}ceiling(r){return this._validateKey(r),p(this,x).ceiling(r)}floor(r){return this._validateKey(r),p(this,x).floor(r)}higher(r){return this._validateKey(r),p(this,x).higher(r)}lower(r){return this._validateKey(r),p(this,x).lower(r)}forEach(r){for(let[e,t]of this.entries())r(e,t)}filter(r){let e=new Be([],{comparator:p(this,ie)?void 0:this.comparator,isMapMode:p(this,x).isMapMode});for(let[t,n]of this.entries())r(t,n)&&e.add(t,n);return e}reduce(r,e){let t=e;for(let[n,i]of this.entries())t=r(t,n,i);return t}map(r,e){let t=new Be([],{comparator:e==null?void 0:e.comparator,isMapMode:p(this,x).isMapMode});for(let[n,i]of this.entries()){let[s,o]=r(n,i);t.add(s,o)}return t}getByRank(r){return p(this,x).getByRank(r)}getRank(r){return p(this,x).getRank(r)}rangeByRank(r,e){return p(this,x).rangeByRank(r,e).filter(t=>t!==void 0)}clone(){let r=new Be([],{comparator:p(this,ie)?void 0:this.comparator,isMapMode:p(this,x).isMapMode});for(let[e,t]of this.entries())r.add(e,t);return r}rangeSearch(r,e){let t=e!=null?e:(n=>n);return p(this,x).rangeSearch(r,n=>t(n.key))}print(){p(this,x).print()}};x=new WeakMap,ie=new WeakMap;var dt=Be;var re=class extends j{constructor(r=[],e){super(r,e)}};var at=class extends re{constructor(r=[],e){super(r,e)}};var ut=class extends re{constructor(r=[],e){super(r,{comparator:(t,n)=>((typeof t=="object"||typeof n=="object")&&m(TypeError,K.comparatorRequired("MaxPriorityQueue")),t<n?1:t>n?-1:0),...e})}};var lt=class l{constructor(r,e){h(this,"_rows",0);h(this,"_cols",0);h(this,"_data");var t,n,i;if(e){let{rows:s,cols:o,addFn:d,subtractFn:a,multiplyFn:u}=e;typeof s=="number"&&s>0?this._rows=s:this._rows=r.length,typeof o=="number"&&o>0?this._cols=o:this._cols=((t=r[0])==null?void 0:t.length)||0,d&&(this._addFn=d),a&&(this._subtractFn=a),u&&(this._multiplyFn=u)}else this._rows=r.length,this._cols=(i=(n=r[0])==null?void 0:n.length)!=null?i:0;if(r.length>0)this._data=r;else{this._data=[];for(let s=0;s<this.rows;s++)this._data[s]=new Array(this.cols).fill(0)}}get rows(){return this._rows}get cols(){return this._cols}get data(){return this._data}get addFn(){return this._addFn}get subtractFn(){return this._subtractFn}get multiplyFn(){return this._multiplyFn}get(r,e){if(this.isValidIndex(r,e))return this.data[r][e]}set(r,e,t){return this.isValidIndex(r,e)?(this.data[r][e]=t,!0):!1}isMatchForCalculate(r){return this.rows===r.rows&&this.cols===r.cols}add(r){var t;this.isMatchForCalculate(r)||m(Error,K.matrixDimensionMismatch("addition"));let e=[];for(let n=0;n<this.rows;n++){e[n]=[];for(let i=0;i<this.cols;i++){let s=this.get(n,i),o=r.get(n,i);s!==void 0&&o!==void 0&&(e[n][i]=(t=this._addFn(s,o))!=null?t:0)}}return new l(e,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}subtract(r){var t;this.isMatchForCalculate(r)||m(Error,K.matrixDimensionMismatch("subtraction"));let e=[];for(let n=0;n<this.rows;n++){e[n]=[];for(let i=0;i<this.cols;i++){let s=this.get(n,i),o=r.get(n,i);s!==void 0&&o!==void 0&&(e[n][i]=(t=this._subtractFn(s,o))!=null?t:0)}}return new l(e,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}multiply(r){this.cols!==r.rows&&m(Error,K.matrixDimensionMismatch("multiplication (A.cols must equal B.rows)"));let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<r.cols;n++){let i;for(let s=0;s<this.cols;s++){let o=this.get(t,s),d=r.get(s,n);if(o!==void 0&&d!==void 0){let a=this.multiplyFn(o,d);a!==void 0&&(i=this.addFn(i,a))}}i!==void 0&&(e[t][n]=i)}}return new l(e,{rows:this.rows,cols:r.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}transpose(){this.data.some(e=>e.length!==this.cols)&&m(Error,K.matrixNotRectangular());let r=[];for(let e=0;e<this.cols;e++){r[e]=[];for(let t=0;t<this.rows;t++){let n=this.get(t,e);n!==void 0&&(r[e][t]=n)}}return new l(r,{rows:this.cols,cols:this.rows,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}inverse(){var n;this.rows!==this.cols&&m(Error,K.matrixNotSquare());let r=[];for(let i=0;i<this.rows;i++){r[i]=this.data[i].slice();for(let s=0;s<this.cols;s++)r[i][this.cols+s]=i===s?1:0}let e=new l(r,{rows:this.rows,cols:this.cols*2,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn});for(let i=0;i<this.rows;i++){let s=i;for(;s<this.rows&&e.get(s,i)===0;)s++;s===this.rows&&m(Error,K.matrixSingular()),e._swapRows(i,s);let o=(n=e.get(i,i))!=null?n:1;o===0&&m(Error,K.matrixSingular()),e._scaleRow(i,1/o);for(let d=0;d<this.rows;d++)if(d!==i){let a=e.get(d,i);a===void 0&&(a=0),e._addScaledRow(d,i,-a)}}let t=[];for(let i=0;i<this.rows;i++)t[i]=e.data[i].slice(this.cols);return new l(t,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}dot(r){this.cols!==r.rows&&m(Error,K.matrixDimensionMismatch("dot product (A.cols must equal B.rows)"));let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<r.cols;n++){let i;for(let s=0;s<this.cols;s++){let o=this.get(t,s),d=r.get(s,n);if(o!==void 0&&d!==void 0){let a=this.multiplyFn(o,d);a!==void 0&&(i=this.addFn(i,a))}}i!==void 0&&(e[t][n]=i)}}return new l(e,{rows:this.rows,cols:r.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}isValidIndex(r,e){return r>=0&&r<this.rows&&e>=0&&e<this.cols}clone(){return new l(this._data.map(r=>[...r]),{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}get size(){return[this._rows,this._cols]}isEmpty(){return this._rows===0||this._cols===0}toArray(){return this._data.map(r=>[...r])}flatten(){let r=[];for(let e of this._data)for(let t of e)r.push(t);return r}[Symbol.iterator](){let r=this._data,e=0;return{[Symbol.iterator](){return this},next(){return e<r.length?{value:[...r[e++]],done:!1}:{value:void 0,done:!0}}}}forEach(r){for(let e=0;e<this._rows;e++)for(let t=0;t<this._cols;t++)r(this._data[e][t],e,t)}map(r){let e=[];for(let t=0;t<this._rows;t++){e[t]=[];for(let n=0;n<this._cols;n++)e[t][n]=r(this._data[t][n],t,n)}return new l(e,{rows:this._rows,cols:this._cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}print(){for(let r of this._data)console.log(r.join(" "))}static zeros(r,e){let t=Array.from({length:r},()=>new Array(e).fill(0));return new l(t)}static identity(r){let e=Array.from({length:r},(t,n)=>Array.from({length:r},(i,s)=>n===s?1:0));return new l(e)}static from(r){return new l(r.map(e=>[...e]))}_addFn(r,e){return r===void 0?e:r+e}_subtractFn(r,e){return r-e}_multiplyFn(r,e){return r*e}_swapRows(r,e){let t=this.data[r];this.data[r]=this.data[e],this.data[e]=t}_scaleRow(r,e){for(let t=0;t<this.cols;t++){let n=this.multiplyFn(this.data[r][t],e);n===void 0&&(n=0),this.data[r][t]=n}}_addScaledRow(r,e,t){for(let n=0;n<this.cols;n++){let i=this.multiplyFn(this.data[e][n],t);i===void 0&&(i=0);let s=i,o=this.addFn(this.data[r][n],s);o===void 0&&(o=0),this.data[r][n]=o}}};var Ae=class l{constructor(r,e){h(this,"direction");h(this,"turn");this.direction=r,this.turn=()=>new l(e[r],e)}},ht=class{constructor({matrix:r,turning:e,onMove:t,init:{cur:n,charDir:i,VISITED:s}}){h(this,"onMove");h(this,"_matrix");h(this,"_cur");h(this,"_character");h(this,"_VISITED");this._matrix=r,this._cur=n,this._character=new Ae(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:r}=this._character;this.check(r)?this.move(r):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(r){let e,t,n=this._matrix,[i,s]=this._cur;switch(r){case"up":if(t=n[i-1],!t)return!1;e=t[s];break;case"right":e=n[i][s+1];break;case"down":if(t=n[i+1],!t)return!1;e=t[s];break;case"left":e=n[i][s-1];break}return e!==void 0&&e!==this._VISITED}move(r){switch(r){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 Ke=class{constructor(r){h(this,"_key");h(this,"_children");h(this,"_isEnd");this._key=r,this._isEnd=!1,this._children=new Map}get key(){return this._key}set key(r){this._key=r}get children(){return this._children}set children(r){this._children=r}get isEnd(){return this._isEnd}set isEnd(r){this._isEnd=r}},ft=class extends z{constructor(e=[],t){super(t);h(this,"_size",0);h(this,"_caseSensitive",!0);h(this,"_root",new Ke(""));if(t){let{caseSensitive:n}=t;n!==void 0&&(this._caseSensitive=n)}e&&this.addMany(e)}get size(){return this._size}get caseSensitive(){return this._caseSensitive}get root(){return this._root}get _total(){return this._size}add(e){e=this._caseProcess(e);let t=this.root,n=!1;for(let i of e){let s=t.children.get(i);s||(s=new Ke(i),t.children.set(i,s)),t=s}return t.isEnd||(n=!0,t.isEnd=!0,this._size++),n}addMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.add(this.toElementFn(n))):t.push(this.add(n));return t}has(e){e=this._caseProcess(e);let t=this.root;for(let n of e){let i=t.children.get(n);if(!i)return!1;t=i}return t.isEnd}isEmpty(){return this._size===0}clear(){this._size=0,this._root=new Ke("")}delete(e){e=this._caseProcess(e);let t=!1,n=(i,s)=>{let o=e[s],d=i.children.get(o);return d?s===e.length-1?d.isEnd?(d.children.size>0?d.isEnd=!1:i.children.delete(o),t=!0,!0):!1:n(d,s+1)&&!i.isEnd&&d.children.size===0?(i.children.delete(o),!0):!1:!1};return n(this.root,0),t&&this._size--,t}getHeight(){let e=this.root,t=0;if(e){let n=(i,s)=>{s>t&&(t=s);let{children:o}=i;if(o)for(let d of o.entries())n(d[1],s+1)};n(e,0)}return t}hasPurePrefix(e){e=this._caseProcess(e);let t=this.root;for(let n of e){let i=t.children.get(n);if(!i)return!1;t=i}return!t.isEnd}hasPrefix(e){e=this._caseProcess(e);let t=this.root;for(let n of e){let i=t.children.get(n);if(!i)return!1;t=i}return!0}hasCommonPrefix(e){e=this._caseProcess(e);let t="",n=i=>{if(t+=i.key,t!==e&&!i.isEnd)if(i&&i.children&&i.children.size===1)n(Array.from(i.children.values())[0]);else return};return n(this.root),t===e}getLongestCommonPrefix(){let e="",t=n=>{if(e+=n.key,!n.isEnd)if(n&&n.children&&n.children.size===1)t(Array.from(n.children.values())[0]);else return};return t(this.root),e}getWords(e="",t=Number.MAX_SAFE_INTEGER,n=!1){e=this._caseProcess(e);let i=[],s=0,o=(a,u)=>{for(let[f,c]of a.children){if(s>=t)return;o(c,u+f)}if(a.isEnd){if(s>=t)return;i.push(u),s++}},d=this.root;if(e)for(let a of e){let u=d.children.get(a);if(u)d=u;else return[]}return(n||d!==this.root)&&o(d,e),i}clone(){let e=this._createInstance();for(let t of this)e.add(t);return e}filter(e,t){let n=this._createInstance(),i=0;for(let s of this)e.call(t,s,i,this)&&n.add(s),i++;return n}map(e,t,n){let i=this._createLike([],t),s=0;for(let o of this){let d=n===void 0?e(o,s++,this):e.call(n,o,s++,this);typeof d!="string"&&m(TypeError,K.callbackReturnType("string",typeof d,"Trie.map")),i.add(d)}return i}mapSame(e,t){let n=this._createInstance(),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.add(o)}return n}_createInstance(e){let t=this.constructor;return new t([],{toElementFn:this.toElementFn,caseSensitive:this.caseSensitive,...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}_spawnLike(e){return this._createLike([],e)}*_getIterator(){function*e(t,n){t.isEnd&&(yield n);for(let[i,s]of t.children)yield*e(s,n+i)}yield*e(this.root,"")}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};var ct=class l{constructor(r,e,t){h(this,"_key");h(this,"_value");h(this,"_children");this._key=r,this._value=e||void 0,t&&(this._children=t)}get key(){return this._key}set key(r){this._key=r}get value(){return this._value}set value(r){this._value=r}get children(){return this._children}set children(r){this._children=r}addChildren(r){this._children||(this._children=[]),r instanceof l?this._children.push(r):this._children=this._children.concat(r)}getHeight(){let r=0;if(this){let e=(t,n)=>{n>r&&(r=n);let{_children:i}=t;if(i)for(let s=0,o=i.length;s<o;s++)e(i[s],n+1)};e(this,0)}return r}};return kt(St);})();
|
|
7
|
+
`;i+=a})(e)),i}print(e,t=this._root){console.log(this.toVisual(t,e))}_dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=!1,i=this._root,s=this.iterationType,o=!1,d=c=>!!c,a=c=>!!c,u=c=>o?this.isRealNodeOrNull(c):this.isRealNode(c),f=c=>this.isRealNodeOrNull(c)){if(i=this.ensureNode(i),!i)return[];let c=[];if(s==="RECURSIVE"){let g=_=>{if(!u(_))return;let b=()=>{d(_)&&(_==null?void 0:_.left)!==void 0&&g(_==null?void 0:_.left)},N=()=>{a(_)&&(_==null?void 0:_.right)!==void 0&&g(_==null?void 0:_.right)};switch(t){case"IN":if(b(),f(_)&&(c.push(e(_)),n))return;N();break;case"PRE":if(f(_)&&(c.push(e(_)),n))return;b(),N();break;case"POST":if(b(),N(),f(_)&&(c.push(e(_)),n))return;break}};g(i)}else{let g=[{opt:0,node:i}],_=E=>{var R;d(E.node)&&g.push({opt:0,node:(R=E.node)==null?void 0:R.left})},b=E=>{var R;a(E.node)&&g.push({opt:0,node:(R=E.node)==null?void 0:R.right})},N=E=>{u(E.node)&&g.push({opt:1,node:E.node})};for(;g.length>0;){let E=g.pop();if(E!==void 0&&u(E.node))if(E.opt===1){if(f(E.node)&&E.node!==void 0&&(c.push(e(E.node)),n))return c}else switch(t){case"IN":b(E),N(E),_(E);break;case"PRE":b(E),_(E),N(E);break;case"POST":N(E),b(E),_(E);break}}}return c}*_getIterator(e=this._root){if(e)if(this.iterationType==="ITERATIVE"){let t=[],n=e;for(;n||t.length>0;){for(;this.isRealNode(n);)t.push(n),n=n.left;n=t.pop(),this.isRealNode(n)&&(yield[n.key,n.value],n=n.right)}}else e.left&&this.isRealNode(e)&&(yield*this[Symbol.iterator](e.left)),yield[e.key,e.value],e.right&&this.isRealNode(e)&&(yield*this[Symbol.iterator](e.right))}_snapshotOptions(){return{iterationType:this.iterationType,toEntryFn:this.toEntryFn,isMapMode:this.isMapMode,isDuplicate:this.isDuplicate}}_createInstance(e){let t=this.constructor;return new t([],{...this._snapshotOptions(),...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,{...this._snapshotOptions(),...t!=null?t:{}})}_keyValueNodeOrEntryToNodeAndValue(e,t){if(e===void 0)return[void 0,void 0];if(e===null)return[null,void 0];if(this.isNode(e))return[e,t];if(this.isEntry(e)){let[n,i]=e;if(n===void 0)return[void 0,void 0];if(n===null)return[null,void 0];let s=t!=null?t:i;return[this.createNode(n,s),s]}return[this.createNode(e,t),t]}_clone(e){this.bfs(t=>{t===null?e.set(null):e.set([t.key,t.value])},this._root,this.iterationType,!0)}_displayAux(e,t){let n=[["\u2500"],1,0,0],i=a=>({node:a,stage:0,leftLayout:n,rightLayout:n}),s=[i(e)],o=n,d=a=>{if(s.length===0){o=a;return}let u=s[s.length-1];u.stage===1?u.leftLayout=a:u.rightLayout=a};for(;s.length>0;){let a=s[s.length-1],u=a.node;if(a.stage===0){if(this._isDisplayLeaf(u,t)){s.pop();let f=this._resolveDisplayLeaf(u,t,n);d(f);continue}a.stage=1,s.push(i(u.left))}else if(a.stage===1)a.stage=2,s.push(i(u.right));else{s.pop();let f=this.isNIL(u)?"S":String(u.key),c=l._buildNodeDisplay(f,f.length,a.leftLayout,a.rightLayout);d(c)}}return o}static _buildNodeDisplay(e,t,n,i){let[s,o,d,a]=n,[u,f,c,g]=i,_=" ".repeat(Math.max(0,a+1))+"_".repeat(Math.max(0,o-a-1))+e+"_".repeat(Math.max(0,g))+" ".repeat(Math.max(0,f-g)),b=(d>0?" ".repeat(a)+"/"+" ".repeat(o-a-1):" ".repeat(o))+" ".repeat(t)+(c>0?" ".repeat(g)+"\\"+" ".repeat(f-g-1):" ".repeat(f)),N=[_,b];for(let E=0;E<Math.max(d,c);E++){let R=E<d?s[E]:" ".repeat(o),y=E<c?u[E]:" ".repeat(f);N.push(R+" ".repeat(t)+y)}return[N,o+t+f,Math.max(d,c)+2,o+Math.floor(t/2)]}_isDisplayLeaf(e,t){let{isShowNull:n,isShowUndefined:i,isShowRedBlackNIL:s}=t;if(e===null&&!n||e===void 0&&!i||this.isNIL(e)&&!s||e==null)return!0;let o=this._hasDisplayableChild(e.left,t),d=this._hasDisplayableChild(e.right,t);return!o&&!d}_hasDisplayableChild(e,t){return e===null?!!t.isShowNull:e===void 0?!!t.isShowUndefined:this.isNIL(e)?!!t.isShowRedBlackNIL:!0}_resolveDisplayLeaf(e,t,n){let{isShowNull:i,isShowUndefined:s,isShowRedBlackNIL:o}=t;if(e===null&&!i||e===void 0&&!s||this.isNIL(e)&&!o)return n;if(e!=null){let a=this.isNIL(e)?"S":String(e.key);return l._buildNodeDisplay(a,a.length,n,n)}let d=e===void 0?"U":"N";return l._buildNodeDisplay(d,d.length,[[""],1,0,0],[[""],1,0,0])}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:n,value:i}=t,s=this.createNode(n,i);return s&&(t.key=e.key,this._isMapMode||(t.value=e.value),e.key=s.key,this._isMapMode||(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._setRoot(t),t}_setRoot(e){e&&(e.parent=void 0),this._root=e}_ensurePredicate(e){if(e==null)return t=>!1;if(this._isPredicate(e))return e;if(this.isRealNode(e))return t=>t===e;if(this.isEntry(e)){let[t]=e;return n=>n?n.key===t:!1}return t=>t?t.key===e:!1}_isPredicate(e){return typeof e=="function"}_extractKey(e){if(e===null)return null;if(e!==void 0&&e!==this._NIL)return this.isNode(e)?e.key:this.isEntry(e)?e[0]:e}_setValue(e,t){if(e==null)return!1;let n=this._store.get(e);return n?(n.value=t,!0):!1}_clearNodes(){this._setRoot(void 0),this._size=0}_clearValues(){this._store.clear()}};var Ne=class{constructor(r,e){h(this,"key");h(this,"value");h(this,"parent");h(this,"_left");h(this,"_right");h(this,"_height",0);h(this,"_color","BLACK");h(this,"_count",1);this.key=r,this.value=e}get left(){return this._left}set left(r){r&&(r.parent=this),this._left=r}get right(){return this._right}set right(r){r&&(r.parent=this),this._right=r}get height(){return this._height}set height(r){this._height=r}get color(){return this._color}set color(r){this._color=r}get count(){return this._count}set count(r){this._count=r}get familyPosition(){return this.parent?this.parent.left===this?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===this?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},re=class extends Ee{constructor(e=[],t){super([],t);h(this,"_root");h(this,"_enableOrderStatistic",!1);h(this,"_comparator");t?("comparator"in t&&t.comparator!==void 0?this._comparator=t.comparator:this._comparator=this._createDefaultComparator(),t.enableOrderStatistic&&(this._enableOrderStatistic=!0)):this._comparator=this._createDefaultComparator(),e&&this.setMany(e)}get root(){return this._root}get comparator(){return this._comparator}createNode(e,t){return new Ne(e,t)}ensureNode(e,t=this.iterationType){var n;return(n=super.ensureNode(e,t))!=null?n:void 0}isNode(e){return e instanceof Ne}isValidKey(e){return te(e)}dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=!1,i=this._root,s=this.iterationType){return super.dfs(e,t,n,i,s)}bfs(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){return super.bfs(e,t,n,!1)}listLevels(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType){return super.listLevels(e,t,n,!1)}getNode(e,t=this._root,n=this.iterationType){var u,f;if(e==null)return;if(this._isPredicate(e))return(u=this.getNodes(e,!0,t,n)[0])!=null?u:void 0;if(e instanceof q)return(f=this.getNodes(e,!0,t,n)[0])!=null?f:void 0;let i;if(this.isNode(e))i=e.key;else if(this.isEntry(e)){let c=e[0];if(c==null)return;i=c}else i=e;let s=this.ensureNode(t);if(!s)return;let o=this._NIL,d=s,a=this._comparator;for(;d&&d!==o;){let c=a(i,d.key);if(c===0)return d;d=c<0?d._left:d._right}}search(e,t=!1,n=this._DEFAULT_NODE_CALLBACK,i=this._root,s=this.iterationType){if(e===void 0)return[];if(e===null)return[];if(i=this.ensureNode(i),!i)return[];let o=this.isRange(e),d=!o&&this._isPredicate(e);if(!o&&!d){let c;if(this.isNode(e))c=e.key;else if(this.isEntry(e)){let N=e[0];N!=null&&(c=N)}else c=e;if(c===void 0)return[];let g=this._NIL,_=this._comparator,b=i;for(;b&&b!==g;){let N=_(c,b.key);if(N===0)return[n(b)];b=N<0?b._left:b._right}return[]}let a;o?a=c=>c?e.isInRange(c.key,this._comparator):!1:a=this._ensurePredicate(e);let u=c=>{if(!c||!this.isRealNode(c.left))return!1;if(o){let g=e,_=g.low,b=g.includeLow;return b&&this._compare(c.key,_)>=0||!b&&this._compare(c.key,_)>0}if(!o&&!this._isPredicate(e)){let g=this._extractKey(e);return g!=null&&this._compare(c.key,g)>0}return!0},f=c=>{if(!c||!this.isRealNode(c.right))return!1;if(o){let g=e,_=g.high,b=g.includeHigh;return b&&this._compare(c.key,_)<=0||!b&&this._compare(c.key,_)<0}if(!o&&!this._isPredicate(e)){let g=this._extractKey(e);return g!=null&&this._compare(c.key,g)<0}return!0};return super._dfs(n,"IN",t,i,s,!1,u,f,()=>!0,c=>!!c&&a(c))}rangeSearch(e,t=this._DEFAULT_NODE_CALLBACK,n=this._root,i=this.iterationType){let s=e instanceof q?e:new q(e[0],e[1]);return this.search(s,!1,t,n,i)}getByRank(e,t=this._DEFAULT_NODE_CALLBACK,n=this.iterationType){if(this._enableOrderStatistic||m(Error,K.orderStatisticNotEnabled("getByRank")),e<0||e>=this._size)return;let i,s=this.iterationType;typeof t=="string"?s=t:t&&(i=t,n&&(s=n));let o=s==="RECURSIVE"?this._getByRankRecursive(this._root,e):this._getByRankIterative(this._root,e);if(o)return i?i(o):o.key}getRank(e,t=this.iterationType){var s;if(this._enableOrderStatistic||m(Error,K.orderStatisticNotEnabled("getRank")),!this._root||this._size===0)return-1;let n=this.iterationType;t&&(n=t);let i;if(typeof e=="function"){let o=this.search(e,!0);if(o.length===0||o[0]===void 0)return-1;i=o[0]}else{if(e==null)return-1;if(this.isNode(e))i=e.key;else if(Array.isArray(e)){if(i=(s=e[0])!=null?s:void 0,i==null)return-1}else i=e}return i===void 0?-1:n==="RECURSIVE"?this._getRankRecursive(this._root,i):this._getRankIterative(this._root,i)}rangeByRank(e,t,n=this._DEFAULT_NODE_CALLBACK,i=this.iterationType){if(this._enableOrderStatistic||m(Error,K.orderStatisticNotEnabled("rangeByRank")),this._size===0)return[];let s=Math.max(0,e),o=Math.min(this._size-1,t);if(s>o)return[];let d,a=this.iterationType;typeof n=="string"?a=n:n&&(d=n,i&&(a=i));let u=[],f=o-s+1,c=a==="RECURSIVE"?this._getByRankRecursive(this._root,s):this._getByRankIterative(this._root,s);if(!c)return[];let g=0,_=d!=null?d:this._DEFAULT_NODE_CALLBACK,b=c;for(;b&&g<f;)u.push(_(b)),g++,g<f&&(b=this._next(b));return u}set(e,t){let[n]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(n===void 0)return!1;if(this._root===void 0)return this._setRoot(n),this._isMapMode&&this.isRealNode(n)&&this._store.set(n.key,n),this._size++,this._updateCount(n),!0;let i=this._root;for(;i!==void 0;){if(this._compare(i.key,n.key)===0)return this._replaceNode(i,n),this._isMapMode&&this.isRealNode(n)&&this._store.set(i.key,n),!0;if(this._compare(i.key,n.key)>0){if(i.left===void 0)return i.left=n,this._isMapMode&&this.isRealNode(n)&&this._store.set(n.key,n),this._size++,this._updateCountAlongPath(n),!0;i.left!==null&&(i=i.left)}else{if(i.right===void 0)return i.right=n,this._isMapMode&&this.isRealNode(n)&&this._store.set(n.key,n),this._size++,this._updateCountAlongPath(n),!0;i.right!==null&&(i=i.right)}}return!1}setMany(e,t,n=!0,i=this.iterationType){let s=[],o=t==null?void 0:t[Symbol.iterator]();if(!n){for(let g of e){let _=o==null?void 0:o.next().value;this.isRaw(g)&&(g=this._toEntryFn(g)),s.push(this.set(g,_))}return s}let d=[],a=0;for(let g of e)d.push({key:g,value:o==null?void 0:o.next().value,orgIndex:a++});let u=d.sort(({key:g},{key:_})=>{let b,N;return this.isRaw(g)?b=this._toEntryFn(g)[0]:this.isEntry(g)?b=g[0]:this.isRealNode(g)?b=g.key:b=g,this.isRaw(_)?N=this._toEntryFn(_)[0]:this.isEntry(_)?N=_[0]:this.isRealNode(_)?N=_.key:N=_,b!=null&&N!=null?this._compare(b,N):0}),f=g=>{if(g.length===0)return;let _=Math.floor((g.length-1)/2),{key:b,value:N,orgIndex:E}=g[_];if(this.isRaw(b)){let R=this._toEntryFn(b);s[E]=this.set(R)}else s[E]=this.set(b,N);f(g.slice(0,_)),f(g.slice(_+1))};return i==="RECURSIVE"?f(u):(()=>{let _=[[0,u.length-1]];for(;_.length>0;){let b=_.pop();if(!b)continue;let[N,E]=b;if(N>E)continue;let R=N+Math.floor((E-N)/2),{key:y,value:k,orgIndex:V}=u[R];if(this.isRaw(y)){let T=this._toEntryFn(y);s[V]=this.set(T)}else s[V]=this.set(y,k);_.push([R+1,E]),_.push([N,R-1])}})(),s}ceiling(e,t=this._DEFAULT_NODE_CALLBACK,n){let i,s=this.iterationType;typeof t=="string"?s=t:t&&(i=t,n&&(s=n));let o=this._bound(e,!0,s);return i?o?i(o):void 0:o==null?void 0:o.key}higher(e,t=this._DEFAULT_NODE_CALLBACK,n){let i,s=this.iterationType;typeof t=="string"?s=t:t&&(i=t,n&&(s=n));let o=this._bound(e,!1,s);return i?o?i(o):void 0:o==null?void 0:o.key}floor(e,t=this._DEFAULT_NODE_CALLBACK,n){if(e==null)return void 0;let i,s=this.iterationType;if(typeof t=="string"?s=t:t&&(i=t,n&&(s=n)),this._isPredicate(e)){let d=this._floorByPredicate(e,s);return i?d?i(d):void 0:d==null?void 0:d.key}let o;if(this.isNode(e))o=e.key;else if(this.isEntry(e)){let d=e[0];if(d==null)return void 0;o=d}else o=e;if(o!==void 0){let d=this._floorByKey(o,s);return i?d?i(d):void 0:d==null?void 0:d.key}}lower(e,t,n){if(e==null)return void 0;let i,s=this.iterationType;if(typeof t=="string"?s=t:t&&(i=t,n&&(s=n)),this._isPredicate(e)){let d=this._lowerByPredicate(e,s);return i?d?i(d):void 0:d==null?void 0:d.key}let o;if(this.isNode(e))o=e.key;else if(this.isEntry(e)){let d=e[0];if(d==null)return void 0;o=d}else o=e;if(o!==void 0){let d=this._lowerByKey(o,s);return i?d?i(d):void 0:d==null?void 0:d.key}}lesserOrGreaterTraverse(e=this._DEFAULT_NODE_CALLBACK,t=-1,n=this._root,i=this.iterationType){let s=this.ensureNode(n),o=[];if(!this._root||!s)return o;let d=s.key;if(i==="RECURSIVE"){let a=u=>{let f=this._compare(u.key,d);Math.sign(f)==t&&o.push(e(u)),this.isRealNode(u.left)&&a(u.left),this.isRealNode(u.right)&&a(u.right)};return a(this._root),o}else{let a=new j([this._root]);for(;a.length>0;){let u=a.shift();if(this.isRealNode(u)){let f=this._compare(u.key,d);Math.sign(f)==t&&o.push(e(u)),this.isRealNode(u.left)&&a.push(u.left),this.isRealNode(u.right)&&a.push(u.right)}}return o}}perfectlyBalance(e=this.iterationType){let t=this.dfs(o=>o,"IN",!1,this._root,e),n=t.length;if(this._clearNodes(),n===0)return!1;let i=(o,d,a)=>{if(o>d)return;let u=o+(d-o>>1),f=t[u],c=i(o,u-1,f),g=i(u+1,d,f);return f.left=c,f.right=g,f.parent=a,f},s=i(0,n-1,void 0);return this._setRoot(s),this._size=n,!0}isAVLBalanced(e=this.iterationType){if(!this._root)return!0;let t=!0;if(e==="RECURSIVE"){let n=i=>{if(!i)return 0;let s=n(i.left),o=n(i.right);return Math.abs(s-o)>1&&(t=!1),Math.max(s,o)+1};n(this._root)}else{let n=[],i=this._root,s,o=new Map;for(;n.length>0||i;)if(i)n.push(i),i.left!==null&&(i=i.left);else if(i=n[n.length-1],!i.right||s===i.right){if(i=n.pop(),i){let d=i.left?o.get(i.left):-1,a=i.right?o.get(i.right):-1;if(Math.abs(d-a)>1)return!1;o.set(i,1+Math.max(d,a)),s=i,i=void 0}}else i=i.right}return t}map(e,t,n){let i=this._createLike([],t),s=0;for(let[o,d]of this)i.set(e.call(n,d,o,s++,this));return i}deleteWhere(e,t=!1,n=this._root,i=this.iterationType){let s=this.search(e,t,d=>d,n,i),o=!1;for(let d of s)this.delete(d)&&(o=!0);return o}_createDefaultComparator(){return(e,t)=>{if(te(e)&&te(t))return e>t?1:e<t?-1:0;if(e instanceof Date&&t instanceof Date){let n=e.getTime(),i=t.getTime();return(Number.isNaN(n)||Number.isNaN(i))&&m(TypeError,K.invalidDate("BST")),n>i?1:n<i?-1:0}return(typeof e=="object"||typeof t=="object")&&m(TypeError,K.comparatorRequired("BST")),0}}_floorByKey(e,t){var n,i;if(t==="RECURSIVE"){let s=o=>{if(!this.isRealNode(o))return;if(this.comparator(o.key,e)<=0){let a=s(o.right);return a!=null?a:o}else return s(o.left)};return s(this.root)}else{let s=this.root,o;for(;this.isRealNode(s);)this.comparator(s.key,e)<=0?(o=s,s=(n=s.right)!=null?n:void 0):s=(i=s.left)!=null?i:void 0;return o}}_floorByPredicate(e,t){if(t==="RECURSIVE"){let n,i=s=>{this.isRealNode(s)&&(this.isRealNode(s.left)&&i(s.left),e(s)&&(n=s),this.isRealNode(s.right)&&i(s.right))};return i(this.root),n}else{let n=[],i=this.root,s;for(;n.length>0||this.isRealNode(i);)if(this.isRealNode(i))n.push(i),i=i.left;else{let o=n.pop();if(!this.isRealNode(o))break;e(o)&&(s=o),i=o.right}return s}}_lowerByKey(e,t){var n,i;if(t==="RECURSIVE"){let s=o=>{if(!this.isRealNode(o))return;if(this.comparator(o.key,e)<0){let a=s(o.right);return a!=null?a:o}else return s(o.left)};return s(this.root)}else{let s=this.root,o;for(;this.isRealNode(s);)this.comparator(s.key,e)<0?(o=s,s=(n=s.right)!=null?n:void 0):s=(i=s.left)!=null?i:void 0;return o}}_lowerByPredicate(e,t){if(t==="RECURSIVE"){let n,i=s=>{this.isRealNode(s)&&(this.isRealNode(s.left)&&i(s.left),e(s)&&(n=s),this.isRealNode(s.right)&&i(s.right))};return i(this.root),n}else{let n=[],i=this.root,s;for(;n.length>0||this.isRealNode(i);)if(this.isRealNode(i))n.push(i),i=i.left;else{let o=n.pop();if(!this.isRealNode(o))break;e(o)&&(s=o),i=o.right}return s}}_bound(e,t,n){if(e==null)return;if(this._isPredicate(e))return this._boundByPredicate(e,n);let i;if(this.isNode(e))i=e.key;else if(this.isEntry(e)){let s=e[0];if(s==null)return;i=s}else i=e;if(i!==void 0)return this._boundByKey(i,t,n)}_boundByKey(e,t,n){var i,s;if(n==="RECURSIVE"){let o=d=>{if(!this.isRealNode(d))return;let a=this.comparator(d.key,e);if(t?a>=0:a>0){let f=o(d.left);return f!=null?f:d}else return o(d.right)};return o(this.root)}else{let o=this.root,d;for(;this.isRealNode(o);){let a=this.comparator(o.key,e);(t?a>=0:a>0)?(d=o,o=(i=o.left)!=null?i:void 0):o=(s=o.right)!=null?s:void 0}return d}}_boundByPredicate(e,t){if(t==="RECURSIVE"){let n,i=s=>{n||!this.isRealNode(s)||(this.isRealNode(s.left)&&i(s.left),!n&&e(s)&&(n=s),!n&&this.isRealNode(s.right)&&i(s.right))};return i(this.root),n}else{let n=[],i=this.root;for(;n.length>0||this.isRealNode(i);)if(this.isRealNode(i))n.push(i),i=i.left;else{let s=n.pop();if(!this.isRealNode(s))break;if(e(s))return s;i=s.right}return}}_createInstance(e){let t=this.constructor;return new t([],{...this._snapshotOptions(),...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,{...this._snapshotOptions(),...t!=null?t:{}})}_snapshotOptions(){return{...super._snapshotOptions(),comparator:this._comparator,enableOrderStatistic:this._enableOrderStatistic}}_keyValueNodeOrEntryToNodeAndValue(e,t){let[n,i]=super._keyValueNodeOrEntryToNodeAndValue(e,t);return n===null?[void 0,void 0]:[n,t!=null?t:i]}_updateCount(e){this._enableOrderStatistic&&(e._count=1+(this.isRealNode(e.left)?e.left._count:0)+(this.isRealNode(e.right)?e.right._count:0))}_updateCountAlongPath(e){if(!this._enableOrderStatistic)return;let t=e;for(;t;)this._updateCount(t),t=t.parent}_getByRankIterative(e,t){let n=e,i=t;for(;n;){let s=this.isRealNode(n.left)?n.left._count:0;if(i<s)n=n.left;else{if(i===s)return n;i=i-s-1,n=n.right}}}_getByRankRecursive(e,t){if(!e)return;let n=this.isRealNode(e.left)?e.left._count:0;return t<n?this._getByRankRecursive(e.left,t):t===n?e:this._getByRankRecursive(e.right,t-n-1)}_getRankIterative(e,t){let n=0,i=e;for(;this.isRealNode(i);){let s=this._compare(i.key,t);if(s>0)i=i.left;else if(s<0)n+=(this.isRealNode(i.left)?i.left._count:0)+1,i=i.right;else return n+=this.isRealNode(i.left)?i.left._count:0,n}return n}_getRankRecursive(e,t){if(!e)return 0;let n=this._compare(e.key,t);return n>0?this._getRankRecursive(e.left,t):n<0?(this.isRealNode(e.left)?e.left._count:0)+1+this._getRankRecursive(e.right,t):this.isRealNode(e.left)?e.left._count:0}_next(e){if(this.isRealNode(e.right)){let i=e.right;for(;this.isRealNode(i.left);)i=i.left;return i}let t=e,n=t.parent;for(;n&&t===n.right;)t=n,n=n.parent;return n}_setRoot(e){e&&(e.parent=void 0),this._root=e}_compare(e,t){return this._comparator(e,t)}_deleteByKey(e){let t=this._root;for(;t;){let o=this._compare(t.key,e);if(o===0)break;t=o>0?t.left:t.right}if(!t)return!1;let n=(o,d)=>{let a=o==null?void 0:o.parent;a?a.left===o?a.left=d:a.right=d:this._setRoot(d),d&&(d.parent=a)},i=o=>{if(o){for(;o.left!==void 0&&o.left!==null;)o=o.left;return o}},s;if(t.left===void 0)s=t.parent,n(t,t.right);else if(t.right===void 0)s=t.parent,n(t,t.left);else{let o=i(t.right);o.parent!==t?(s=o.parent,n(o,o.right),o.right=t.right,o.right&&(o.right.parent=o)):s=o,n(t,o),o.left=t.left,o.left&&(o.left.parent=o)}return this._updateCountAlongPath(s),this._size=Math.max(0,this._size-1),!0}};var nt=class l{constructor(r){h(this,"_size");h(this,"_tree");if(Array.isArray(r)){this._size=r.length,this._tree=new Array(this._size+1).fill(0);for(let e=0;e<this._size;e++)this._pointUpdate(e+1,r[e])}else(!Number.isInteger(r)||r<0)&&m(RangeError,K.invalidArgument("size must be a non-negative integer","BinaryIndexedTree")),this._size=r,this._tree=new Array(this._size+1).fill(0)}update(r,e){this._checkIndex(r),this._pointUpdate(r+1,e)}set(r,e){this._checkIndex(r);let t=this.get(r);this._pointUpdate(r+1,e-t)}get(r){return this._checkIndex(r),this._pointQuery(r+1)}query(r){return this._checkIndex(r),this._prefixSum(r+1)}queryRange(r,e){return this._checkIndex(r),this._checkIndex(e),r>e?0:r===0?this._prefixSum(e+1):this._prefixSum(e+1)-this._prefixSum(r)}lowerBound(r){let e=0,t=this._highBit(this._size);for(;t>0;){let n=e+t;n<=this._size&&this._tree[n]<r&&(r-=this._tree[n],e=n),t>>=1}return e}upperBound(r){let e=0,t=this._highBit(this._size);for(;t>0;){let n=e+t;n<=this._size&&this._tree[n]<=r&&(r-=this._tree[n],e=n),t>>=1}return e}get size(){return this._size}isEmpty(){return this._size===0}clear(){this._tree.fill(0)}clone(){return new l(this.toArray())}toArray(){let r=[];for(let e=0;e<this._size;e++)r.push(this._pointQuery(e+1));return r}[Symbol.iterator](){let r=this._size,e=0,t=this;return{[Symbol.iterator](){return this},next(){return e<r?{value:t._pointQuery(e+++1),done:!1}:{value:void 0,done:!0}}}}forEach(r){for(let e=0;e<this._size;e++)r(this._pointQuery(e+1),e)}print(){console.log(this.toArray())}_prefixSum(r){let e=0;for(;r>0;)e+=this._tree[r],r-=r&-r;return e}_pointUpdate(r,e){for(;r<=this._size;)this._tree[r]+=e,r+=r&-r}_pointQuery(r){let e=this._tree[r],t=r-(r&-r);for(r--;r>t;)e-=this._tree[r],r-=r&-r;return e}_checkIndex(r){Number.isInteger(r)||m(TypeError,K.invalidIndex("BinaryIndexedTree")),(r<0||r>=this._size)&&m(RangeError,K.indexOutOfRange(r,0,this._size-1,"BinaryIndexedTree"))}_highBit(r){let e=1;for(;e<=r;)e<<=1;return e>>1}};var it=class l{constructor(r,e){h(this,"_merger");h(this,"_identity");h(this,"_n");h(this,"_tree");h(this,"_treeSize");for(this._merger=e.merger,this._identity=e.identity,this._n=r.length,this._treeSize=1;this._treeSize<this._n;)this._treeSize<<=1;this._tree=new Array(2*this._treeSize).fill(this._identity);for(let t=0;t<this._n;t++)this._tree[this._treeSize+t]=r[t];for(let t=this._treeSize-1;t>=1;t--)this._tree[t]=this._merger(this._tree[2*t],this._tree[2*t+1])}static sum(r){return new l(r,{merger:(e,t)=>e+t,identity:0})}static min(r){return new l(r,{merger:(e,t)=>Math.min(e,t),identity:1/0})}static max(r){return new l(r,{merger:(e,t)=>Math.max(e,t),identity:-1/0})}update(r,e){if(r<0||r>=this._n)return;let t=this._treeSize+r;for(this._tree[t]=e,t>>=1;t>=1;)this._tree[t]=this._merger(this._tree[2*t],this._tree[2*t+1]),t>>=1}query(r,e){if(r<0&&(r=0),e>=this._n&&(e=this._n-1),r>e)return this._identity;let t=this._identity,n=this._identity,i=this._treeSize+r,s=this._treeSize+e+1;for(;i<s;)i&1&&(t=this._merger(t,this._tree[i]),i++),s&1&&(s--,n=this._merger(this._tree[s],n)),i>>=1,s>>=1;return this._merger(t,n)}get(r){return r<0||r>=this._n?this._identity:this._tree[this._treeSize+r]}maxRight(r,e){if(r>=this._n)return this._n-1;let t=this._identity;if(!e(t))return r-1;let n=this._treeSize+r;for(;;){for(;n<this._treeSize;){let s=this._merger(t,this._tree[2*n]);e(s)?(t=s,n=2*n+1):n=2*n}let i=this._merger(t,this._tree[n]);if(!e(i))return n-this._treeSize-1;if(t=i,n++,n-this._treeSize>=this._n)return this._n-1;for(;n>1&&(n&1)===0;)n>>=1;if(n===1)return this._n-1}}minLeft(r,e){if(r<0)return 0;r>=this._n&&(r=this._n-1);let t=this._identity;if(!e(t))return r+1;let n=this._treeSize+r;for(;;){for(;n<this._treeSize;){let s=this._merger(this._tree[2*n+1],t);e(s)?(t=s,n=2*n):n=2*n+1}let i=this._merger(this._tree[n],t);if(!e(i))return n-this._treeSize+1;if(t=i,n===this._treeSize)return 0;for(n--;n>1&&(n&1)===1;)n>>=1;if(n===1)return 0}}get size(){return this._n}isEmpty(){return this._n===0}clone(){let r=[];for(let e=0;e<this._n;e++)r.push(this._tree[this._treeSize+e]);return new l(r,{merger:this._merger,identity:this._identity})}toArray(){let r=[];for(let e=0;e<this._n;e++)r.push(this._tree[this._treeSize+e]);return r}[Symbol.iterator](){let r=this._tree,e=this._treeSize,t=this._n,n=0;return{[Symbol.iterator](){return this},next(){return n<t?{value:r[e+n++],done:!1}:{value:void 0,done:!0}}}}forEach(r){for(let e=0;e<this._n;e++)r(this._tree[this._treeSize+e],e)}print(){console.log(this.toArray())}};var Re=class{constructor(r,e){h(this,"key");h(this,"value");h(this,"parent");h(this,"_left");h(this,"_right");h(this,"_height",0);h(this,"_color","BLACK");h(this,"_count",1);this.key=r,this.value=e}get left(){return this._left}set left(r){r&&(r.parent=this),this._left=r}get right(){return this._right}set right(r){r&&(r.parent=this),this._right=r}get height(){return this._height}set height(r){this._height=r}get color(){return this._color}set color(r){this._color=r}get count(){return this._count}set count(r){this._count=r}get familyPosition(){return this.parent?this.parent.left===this?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===this?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},rt=class extends re{constructor(r=[],e){super([],e),r&&super.setMany(r)}createNode(r,e){return new Re(r,e)}isNode(r){return r instanceof Re}set(r,e){if(r===null)return!1;let t=super.set(r,e);return t&&this._balancePath(r),t}delete(r){let e=this._deleteInternal(r);for(let{needBalanced:t}of e)t&&this._balancePath(t);return e.length>0}perfectlyBalance(r=this.iterationType){let e=this.dfs(s=>s,"IN",!1,this._root,r),t=e.length;if(t===0)return!1;this._clearNodes();let n=(s,o,d)=>{if(s>o)return;let a=s+(o-s>>1),u=e[a];u.left=n(s,a-1,u),u.right=n(a+1,o,u),u.parent=d;let f=u.left?u.left.height:-1,c=u.right?u.right.height:-1;return u.height=Math.max(f,c)+1,u},i=n(0,t-1,void 0);return this._setRoot(i),this._size=t,!0}map(r,e,t){let n=this._createLike([],e),i=0;for(let[s,o]of this)n.set(r.call(t,o,s,i++,this));return n}_createInstance(r){let e=this.constructor;return new e([],{...this._snapshotOptions(),...r!=null?r:{}})}_createLike(r=[],e){let t=this.constructor;return new t(r,{...this._snapshotOptions(),...e!=null?e:{}})}_swapProperties(r,e){let t=this.ensureNode(r),n=this.ensureNode(e);if(t&&n){let{key:i,value:s,height:o}=n,d=this.createNode(i,s);return d&&(d.height=o,n.key=t.key,this._isMapMode||(n.value=t.value),n.height=t.height,t.key=d.key,this._isMapMode||(t.value=d.value),t.height=d.height),n}}_balanceFactor(r){let e=r.left?r.left.height:-1;return(r.right?r.right.height:-1)-e}_updateHeight(r){let e=r.left?r.left.height:-1,t=r.right?r.right.height:-1;r.height=1+Math.max(e,t)}_balanceLL(r){let e=r.parent,t=r.left;t!==null&&(r.parent=t),t&&t.right&&(t.right.parent=r),t&&(t.parent=e),r===this.root?t&&this._setRoot(t):(e==null?void 0:e.left)===r?e.left=t:e&&(e.right=t),t&&(r.left=t.right,t.right=r),this._updateHeight(r),t&&this._updateHeight(t),this._updateCount(r),t&&this._updateCount(t)}_balanceLR(r){let e=r.parent,t=r.left,n;t&&(n=t.right),r&&n!==null&&(r.parent=n),t&&n!==null&&(t.parent=n),n&&(n.left&&t!==null&&(n.left.parent=t),n.right&&(n.right.parent=r),n.parent=e),r===this.root?n&&this._setRoot(n):e&&(e.left===r?e.left=n:e.right=n),n&&(r.left=n.right,t&&(t.right=n.left),n.left=t,n.right=r),this._updateHeight(r),t&&this._updateHeight(t),n&&this._updateHeight(n),this._updateCount(r),t&&this._updateCount(t),n&&this._updateCount(n)}_balanceRR(r){let e=r.parent,t=r.right;t!==null&&(r.parent=t),t&&(t.left&&(t.left.parent=r),t.parent=e),r===this.root?t&&this._setRoot(t):e&&(e.left===r?e.left=t:e.right=t),t&&(r.right=t.left,t.left=r),this._updateHeight(r),t&&this._updateHeight(t),this._updateCount(r),t&&this._updateCount(t)}_balanceRL(r){let e=r.parent,t=r.right,n;t&&(n=t.left),n!==null&&(r.parent=n),t&&n!==null&&(t.parent=n),n&&(n.left&&(n.left.parent=r),n.right&&t!==null&&(n.right.parent=t),n.parent=e),r===this.root?n&&this._setRoot(n):e&&(e.left===r?e.left=n:e.right=n),n&&(r.right=n.left),t&&n&&(t.left=n.right),n&&(n.left=r),n&&(n.right=t),this._updateHeight(r),t&&this._updateHeight(t),n&&this._updateHeight(n),this._updateCount(r),t&&this._updateCount(t),n&&this._updateCount(n)}_balancePath(r){r=this.ensureNode(r);let e=this.getPathToRoot(r,t=>t,!1);for(let t=0;t<e.length;t++){let n=e[t];if(n)switch(this._updateHeight(n),this._updateCount(n),this._balanceFactor(n)){case-2:n&&n.left&&(this._balanceFactor(n.left)<=0?this._balanceLL(n):this._balanceLR(n));break;case 2:n&&n.right&&(this._balanceFactor(n.right)>=0?this._balanceRR(n):this._balanceRL(n))}}}_replaceNode(r,e){return e.height=r.height,super._replaceNode(r,e)}};var _e=class{constructor(r,e,t="BLACK"){h(this,"key");h(this,"value");h(this,"parent");h(this,"_left");h(this,"_right");h(this,"_height",0);h(this,"_color","BLACK");h(this,"_count",1);this.key=r,this.value=e,this.color=t}get left(){return this._left}set left(r){r&&(r.parent=this),this._left=r}get right(){return this._right}set right(r){r&&(r.parent=this),this._right=r}get height(){return this._height}set height(r){this._height=r}get color(){return this._color}set color(r){this._color=r}get count(){return this._count}get familyPosition(){return this.parent?this.parent.left===this?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===this?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},U=class extends re{constructor(e=[],t){super([],t);h(this,"_root");h(this,"_header");h(this,"_minNode");h(this,"_maxNode");this._root=this.NIL,this._header=new _e(void 0,void 0,"BLACK"),this._header.parent=this.NIL,this._header._left=this.NIL,this._header._right=this.NIL,e&&this.setMany(e)}get root(){return this._root}createNode(e,t,n="BLACK"){return new _e(e,t,n)}isNode(e){return e instanceof _e}clear(){super.clear(),this._root=this.NIL,this._header.parent=this.NIL,this._setMinCache(void 0),this._setMaxCache(void 0)}_findNodeByKey(e){var s,o,d;let t=this.NIL,n=this._compare.bind(this),i=(s=this._header.parent)!=null?s:t;for(;i!==t;){let a=n(e,i.key);if(a<0)i=(o=i.left)!=null?o:t;else if(a>0)i=(d=i.right)!=null?d:t;else return i}}_predecessorOf(e){let t=this.NIL;if(e.left&&e.left!==t){let s=e.left;for(;s.right&&s.right!==t;)s=s.right;return s}let n=e,i=e.parent;for(;i&&n===i.left;)n=i,i=i.parent;return i}_successorOf(e){let t=this.NIL;if(e.right&&e.right!==t){let s=e.right;for(;s.left&&s.left!==t;)s=s.left;return s}let n=e,i=e.parent;for(;i&&n===i.right;)n=i,i=i.parent;return i}_attachNewNode(e,t,n){let i=this.NIL;n.parent=e,t==="left"?e.left=n:e.right=n,n.left=i,n.right=i,n.color="RED",this._updateCountAlongPath(n),this._insertFixup(n),this.isRealNode(this._root)&&(this._root.color="BLACK")}_setMinCache(e){this._minNode=e,this._header._left=e!=null?e:this.NIL}_setMaxCache(e){this._maxNode=e,this._header._right=e!=null?e:this.NIL}_setKVNode(e,t){var E,R,y,k,V,T,M;let n=this.NIL,i=this._comparator,s=this._header,o=(E=s._left)!=null?E:n;if(o!==n){let L=i(e,o.key);if(L===0)return o.value=t,this._isMapMode&&this._store.set(e,o),{node:o,created:!1};let F=o.left;if(L<0&&(F===n||F===null||F===void 0)){let D=this.createNode(e,t);return this._attachNewNode(o,"left",D),this._isMapMode&&this._store.set(D.key,D),this._size++,this._setMinCache(D),s._right===n&&this._setMaxCache(D),{node:D,created:!0}}if(L>0){let D=(R=s._right)!=null?R:n,pt=i(e,D.key);if(pt===0)return D.value=t,this._isMapMode&&this._store.set(e,D),{node:D,created:!1};let De=D.right;if(pt>0&&(De===n||De===null||De===void 0)){let ae=this.createNode(e,t);return this._attachNewNode(D,"right",ae),this._isMapMode&&this._store.set(ae.key,ae),this._size++,this._setMaxCache(ae),s._left===n&&this._setMinCache(ae),{node:ae,created:!0}}}}let d=i,a=this._isMapMode,u=this._store,f=(y=this._header.parent)!=null?y:n,c,g=0;for(;f!==n;)if(c=f,g=d(e,f.key),g<0)f=(k=f.left)!=null?k:n;else if(g>0)f=(V=f.right)!=null?V:n;else return f.value=t,a&&u.set(e,f),{node:f,created:!1};let _=this.createNode(e,t);if(_.parent=c,c?g<0?c.left=_:c.right=_:this._setRoot(_),_.left=n,_.right=n,_.color="RED",this._updateCountAlongPath(_),this._insertFixup(_),this.isRealNode(this._root))this._root.color="BLACK";else return;a&&u.set(_.key,_),this._size++;let b=(T=this._header._left)!=null?T:n,N=(M=this._header._right)!=null?M:n;return b===n||N===n?(this._setMinCache(_),this._setMaxCache(_)):c===N&&g>0?this._setMaxCache(_):c===b&&g<0?this._setMinCache(_):(d(_.key,b.key)<0&&this._setMinCache(_),d(_.key,N.key)>0&&this._setMaxCache(_)),{node:_,created:!0}}_setKV(e,t){if(this._isMapMode){let i=this._store.get(e);if(i)return i.value=t,!0}return this._setKVNode(e,t)!==void 0}setWithHintNode(e,t,n){var d,a,u,f,c,g,_,b,N,E,R,y,k;if(!n||!this.isRealNode(n))return(d=this._setKVNode(e,t))==null?void 0:d.node;let i=this._compare.bind(this),s=i(e,n.key);if(s===0)return n.value=t,this._isMapMode&&this._store.set(e,n),n;if(s<0){if(!this.isRealNode(n.left)){let T=this.createNode(e,t);if(!this.isRealNode(T))return;this._attachNewNode(n,"left",T),this._isMapMode&&this._store.set(e,T),this._size++;let M=this.NIL,L=(a=this._header._left)!=null?a:M;(L===M||this._compare(T.key,L.key)<0)&&this._setMinCache(T);let F=(u=this._header._right)!=null?u:M;return(F===M||this._compare(T.key,F.key)>0)&&this._setMaxCache(T),T}let V=this._predecessorOf(n);if(V&&i(V.key,e)>=0)return(f=this._setKVNode(e,t))==null?void 0:f.node;if(V&&!this.isRealNode(V.right)){let T=this.createNode(e,t);if(!this.isRealNode(T))return;this._attachNewNode(V,"right",T),this._isMapMode&&this._store.set(e,T),this._size++;let M=this.NIL,L=(c=this._header._left)!=null?c:M;(L===M||this._compare(T.key,L.key)<0)&&this._setMinCache(T);let F=(g=this._header._right)!=null?g:M;return(F===M||this._compare(T.key,F.key)>0)&&this._setMaxCache(T),T}return(_=this._setKVNode(e,t))==null?void 0:_.node}if(!this.isRealNode(n.right)){let V=this.createNode(e,t);if(!this.isRealNode(V))return;this._attachNewNode(n,"right",V),this._isMapMode&&this._store.set(e,V),this._size++;let T=this.NIL,M=(b=this._header._left)!=null?b:T;(M===T||this._compare(V.key,M.key)<0)&&this._setMinCache(V);let L=(N=this._header._right)!=null?N:T;return(L===T||this._compare(V.key,L.key)>0)&&this._setMaxCache(V),V}let o=this._successorOf(n);if(o&&i(o.key,e)<=0)return(E=this._setKVNode(e,t))==null?void 0:E.node;if(o&&!this.isRealNode(o.left)){let V=this.createNode(e,t);if(!this.isRealNode(V))return;this._attachNewNode(o,"left",V),this._isMapMode&&this._store.set(e,V),this._size++;let T=this.NIL,M=(R=this._header._left)!=null?R:T;(M===T||this._compare(V.key,M.key)<0)&&this._setMinCache(V);let L=(y=this._header._right)!=null?y:T;return(L===T||this._compare(V.key,L.key)>0)&&this._setMaxCache(V),V}return(k=this._setKVNode(e,t))==null?void 0:k.node}setWithHint(e,t,n){return this.setWithHintNode(e,t,n)!==void 0}set(e,t){if(!this.isNode(e)){if(e==null)return!1;if(this.isEntry(e)){let o=e[0];if(o==null)return!1;let d=t!=null?t:e[1];return this._setKV(o,d)}return this._setKV(e,t)}let[n,i]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(!this.isRealNode(n))return!1;let s=this._insert(n);if(s==="CREATED"){if(this.isRealNode(this._root))this._root.color="BLACK";else return!1;if(this._isMapMode){let o=this.getNode(n.key);this.isRealNode(o)&&(o.value=i,this._store.set(o.key,o))}return this._size++,!0}if(s==="UPDATED"){if(this._isMapMode){let o=this.getNode(n.key);this.isRealNode(o)&&(o.value=i,this._store.set(o.key,o))}return!0}return!1}delete(e){var f,c,g;if(e===null)return!1;let t;if(this._isPredicate(e)?t=this.getNode(e):t=this.isRealNode(e)?e:this.getNode(e),!t)return!1;let n=t===this._minNode,i=t===this._maxNode,s=n?this._successorOf(t):void 0,o=i?this._predecessorOf(t):void 0,d=t.color,a=this.NIL,u=a;if(!this.isRealNode(t.left))u=(f=t.right)!=null?f:a,this._transplant(t,u);else if(!this.isRealNode(t.right))u=t.left,this._transplant(t,u);else{let _=this.getLeftMost(b=>b,t.right);_&&(d=_.color,u=(c=_.right)!=null?c:a,_.parent===t?u.parent=_:(this._transplant(_,u),_.right=t.right,_.right&&(_.right.parent=_)),this._transplant(t,_),_.left=t.left,_.left&&(_.left.parent=_),_.color=t.color)}return this._isMapMode&&this._store.delete(t.key),this._size--,this._updateCountAlongPath((g=u==null?void 0:u.parent)!=null?g:u),this._size<=0?(this._setMinCache(void 0),this._setMaxCache(void 0)):(n&&this._setMinCache(s),i&&this._setMaxCache(o),(!this._minNode||!this.isRealNode(this._minNode))&&this._setMinCache(this.isRealNode(this._root)?this.getLeftMost(_=>_,this._root):void 0),(!this._maxNode||!this.isRealNode(this._maxNode))&&this._setMaxCache(this.isRealNode(this._root)?this.getRightMost(_=>_,this._root):void 0)),d==="BLACK"&&this._deleteFixup(u),!0}perfectlyBalance(e){let t=[];for(let[n,i]of this)t.push([n,i]);return t.length<=1||(this.clear(),this.setMany(t.map(([n])=>n),t.map(([,n])=>n),!0)),!0}map(e,t,n){let i=this._createLike([],t),s=0;for(let[o,d]of this)i.set(e.call(n,d,o,s++,this));return i}_createInstance(e){let t=this.constructor;return new t([],{...this._snapshotOptions(),...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,{...this._snapshotOptions(),...t!=null?t:{}})}_setRoot(e){let t=this.NIL;e&&(e.parent=void 0),this._root=e,this._header.parent=e!=null?e:t}_replaceNode(e,t){return t.color=e.color,super._replaceNode(e,t)}_insert(e){var d,a,u;let t=this.NIL,n=this._compare.bind(this),i=(d=this._header.parent)!=null?d:t,s,o=0;for(;i!==t;)if(s=i,o=n(e.key,i.key),o<0)i=(a=i.left)!=null?a:t;else if(o>0)i=(u=i.right)!=null?u:t;else return this._replaceNode(i,e),"UPDATED";return e.parent=s,s?o<0?s.left=e:s.right=e:this._setRoot(e),e.left=t,e.right=t,e.color="RED",this._updateCountAlongPath(e),this._insertFixup(e),"CREATED"}_transplant(e,t){e.parent?e===e.parent.left?e.parent.left=t:e.parent.right=t:this._setRoot(t),t&&(t.parent=e.parent)}_insertFixup(e){let t=this._leftRotate.bind(this),n=this._rightRotate.bind(this);for(;e;){let i=e.parent;if(!i||i.color!=="RED")break;let s=i.parent;if(!s)break;if(i===s.left){let o=s.right;if((o==null?void 0:o.color)==="RED"){i.color="BLACK",o.color="BLACK",s.color="RED",e=s;continue}e===i.right&&(e=i,t(e));let d=e==null?void 0:e.parent,a=d==null?void 0:d.parent;d&&a&&(d.color="BLACK",a.color="RED",n(a))}else{let o=s.left;if((o==null?void 0:o.color)==="RED"){i.color="BLACK",o.color="BLACK",s.color="RED",e=s;continue}e===i.left&&(e=i,n(e));let d=e==null?void 0:e.parent,a=d==null?void 0:d.parent;d&&a&&(d.color="BLACK",a.color="RED",t(a))}break}this.isRealNode(this._root)&&(this._root.color="BLACK")}_deleteFixup(e){if(!e)return;let t=this.NIL,n=e;for(;n!==this.root&&n.color==="BLACK";){let i=n.parent;if(!i)break;let s=n===i.left,o=s?i.right:i.left;o&&o.color==="RED"&&(o.color="BLACK",i.color="RED",s?(this._leftRotate(i),o=i.right):(this._rightRotate(i),o=i.left));let d=o==null?void 0:o.left,a=o==null?void 0:o.right,u=!d||d===t||d.color==="BLACK",f=!a||a===t||a.color==="BLACK";u&&f?(o&&(o.color="RED"),n=i):(s?(f&&(d&&(d.color="BLACK"),o&&(o.color="RED"),o&&this._rightRotate(o),o=i.right),o&&(o.color=i.color),i.color="BLACK",o!=null&&o.right&&(o.right.color="BLACK"),this._leftRotate(i)):(u&&(a&&(a.color="BLACK"),o&&(o.color="RED"),o&&this._leftRotate(o),o=i.left),o&&(o.color=i.color),i.color="BLACK",o!=null&&o.left&&(o.left.color="BLACK"),this._rightRotate(i)),n=this.root)}n.color="BLACK"}_leftRotate(e){if(!e||!e.right)return;let t=e.right;e.right=t.left,t.left&&t.left!==this.NIL&&(t.left.parent=e),t.parent=e.parent,e.parent?e===e.parent.left?e.parent.left=t:e.parent.right=t:this._setRoot(t),t.left=e,e.parent=t,this._updateCount(e),this._updateCount(t)}_rightRotate(e){if(!e||!e.left)return;let t=e.left;e.left=t.right,t.right&&t.right!==this.NIL&&(t.right.parent=e),t.parent=e.parent,e.parent?e===e.parent.left?e.parent.left=t:e.parent.right=t:this._setRoot(t),t.right=e,e.parent=t,this._updateCount(e),this._updateCount(t)}};var S,Q,X,A=class A{constructor(r=[],e={}){v(this,S);v(this,Q);v(this,X);var i;C(this,X,e.comparator);let t=e.toElementFn,n=(i=e.comparator)!=null?i:A.createDefaultComparator();C(this,Q,e.comparator===void 0),C(this,S,new U([],{comparator:n,isMapMode:e.isMapMode,enableOrderStatistic:e.enableOrderStatistic}));for(let s of r){let o=t?t(s):s;this.add(o)}}static createDefaultComparator(){return(r,e)=>{if(typeof r=="number"&&typeof e=="number"){(Number.isNaN(r)||Number.isNaN(e))&&m(TypeError,K.invalidNaN("TreeSet"));let t=Object.is(r,-0)?0:r,n=Object.is(e,-0)?0:e;return t>n?1:t<n?-1:0}if(typeof r=="string"&&typeof e=="string")return r>e?1:r<e?-1:0;if(r instanceof Date&&e instanceof Date){let t=r.getTime(),n=e.getTime();return(Number.isNaN(t)||Number.isNaN(n))&&m(TypeError,K.invalidDate("TreeSet")),t>n?1:t<n?-1:0}m(TypeError,K.comparatorRequired("TreeSet"))}}get size(){return p(this,S).size}isEmpty(){return this.size===0}_validateKey(r){if(p(this,Q)){if(typeof r=="number"){Number.isNaN(r)&&m(TypeError,K.invalidNaN("TreeSet"));return}if(typeof r!="string"){if(r instanceof Date){Number.isNaN(r.getTime())&&m(TypeError,K.invalidDate("TreeSet"));return}m(TypeError,K.comparatorRequired("TreeSet"))}}}add(r){return this._validateKey(r),p(this,S).set(r,void 0),this}addMany(r){let e=[];for(let t of r)this._validateKey(t),e.push(p(this,S).set(t,void 0));return e}has(r){return this._validateKey(r),p(this,S).has(r)}delete(r){return this._validateKey(r),p(this,S).delete(r)}deleteWhere(r){let e=!1,t=0;for(let n of this)r(n,t++,this)&&(this.delete(n),e=!0);return e}clear(){p(this,S).clear()}keys(){return p(this,S).keys()}values(){return this.keys()}*entries(){for(let r of this.keys())yield[r,r]}[Symbol.iterator](){return this.keys()}forEach(r,e){for(let t of this)r.call(e,t,t,this)}map(r,e={},t){let n=new A([],e),i=0;for(let s of this){let o=t===void 0?r(s,i++,this):r.call(t,s,i++,this);n.add(o)}return n}filter(r,e){let t=new A([],{comparator:p(this,X)}),n=0;for(let i of this)(e===void 0?r(i,n++,this):r.call(e,i,n++,this))&&t.add(i);return t}reduce(r,e){let t=e,n=0;for(let i of this)t=r(t,i,n++,this);return t}every(r,e){let t=0;for(let n of this)if(!(e===void 0?r(n,t++,this):r.call(e,n,t++,this)))return!1;return!0}some(r,e){let t=0;for(let n of this)if(e===void 0?r(n,t++,this):r.call(e,n,t++,this))return!0;return!1}find(r,e){let t=0;for(let n of this)if(e===void 0?r(n,t++,this):r.call(e,n,t++,this))return n}toArray(){return[...this]}print(){p(this,S).print()}first(){return p(this,S).getLeftMost()}last(){return p(this,S).getRightMost()}pollFirst(){let r=this.first();if(r!==void 0)return this.delete(r),r}pollLast(){let r=this.last();if(r!==void 0)return this.delete(r),r}ceiling(r){return this._validateKey(r),p(this,S).ceiling(r)}floor(r){return this._validateKey(r),p(this,S).floor(r)}higher(r){return this._validateKey(r),p(this,S).higher(r)}lower(r){return this._validateKey(r),p(this,S).lower(r)}rangeSearch(r,e={}){let{lowInclusive:t=!0,highInclusive:n=!0}=e,[i,s]=r;this._validateKey(i),this._validateKey(s);let o=p(this,S).rangeSearch([i,s]),d=[],a=p(this,S).comparator;for(let u of o)u!==void 0&&(!t&&a(u,i)===0||!n&&a(u,s)===0||d.push(u));return d}getByRank(r){return p(this,S).getByRank(r)}getRank(r){return p(this,S).getRank(r)}rangeByRank(r,e){return p(this,S).rangeByRank(r,e).filter(t=>t!==void 0)}union(r){let e=this.clone();for(let t of r)e.add(t);return e}intersection(r){let e=r instanceof A||r instanceof Set?r:new Set(r),t=new A([],{comparator:p(this,Q)?void 0:p(this,X)});for(let n of this)e.has(n)&&t.add(n);return t}difference(r){let e=r instanceof A||r instanceof Set?r:new Set(r),t=new A([],{comparator:p(this,Q)?void 0:p(this,X)});for(let n of this)e.has(n)||t.add(n);return t}symmetricDifference(r){let e=r instanceof A||r instanceof Set?r:new Set(r),t=new A([],{comparator:p(this,Q)?void 0:p(this,X)});for(let n of this)e.has(n)||t.add(n);for(let n of e)this.has(n)||t.add(n);return t}isSubsetOf(r){let e=r instanceof A||r instanceof Set?r:new Set(r);for(let t of this)if(!e.has(t))return!1;return!0}isSupersetOf(r){for(let e of r)if(!this.has(e))return!1;return!0}isDisjointFrom(r){let e=r instanceof A||r instanceof Set?r:new Set(r);for(let t of this)if(e.has(t))return!1;return!0}clone(){return new A(this,{comparator:p(this,Q)?void 0:p(this,X),isMapMode:p(this,S).isMapMode})}};S=new WeakMap,Q=new WeakMap,X=new WeakMap;var se=A;var x,Me,ke=class ke{constructor(r=[],e={}){v(this,x);v(this,Me);var i;let t=(i=e.comparator)!=null?i:se.createDefaultComparator();C(this,Me,e.comparator===void 0);let n=e.toEntryFn;C(this,x,new U([],{...e,comparator:t,isMapMode:e.isMapMode,enableOrderStatistic:e.enableOrderStatistic}));for(let s of r)if(s!=null){if(n){let[o,d]=n(s);if(o==null)continue;d!==void 0?p(this,x).set(o,Array.isArray(d)?[...d]:[d]):p(this,x).set(o,[]);continue}if(Array.isArray(s)){let[o,d]=s;if(o==null)continue;d!==void 0?p(this,x).set(o,[...d]):p(this,x).set(o,[]);continue}p(this,x).set(s,[])}}_validateKey(r){if(p(this,Me)){if(typeof r=="number"){Number.isNaN(r)&&m(TypeError,K.invalidNaN("TreeMultiMap"));return}if(typeof r!="string"){if(r instanceof Date){Number.isNaN(r.getTime())&&m(TypeError,K.invalidDate("TreeMultiMap"));return}m(TypeError,K.comparatorRequired("TreeMultiMap"))}}}get size(){return p(this,x).size}isEmpty(){return this.size===0}clear(){p(this,x).clear()}count(r){let e=this.get(r);return Array.isArray(e)?e.length:0}get totalSize(){let r=0;for(let[,e]of this)r+=e.length;return r}has(r){return this._validateKey(r),p(this,x).has(r)}get(r){return this._validateKey(r),p(this,x).get(r)}add(r,e){this._validateKey(r);let t=p(this,x).get(r);return t?(t.push(e),!0):p(this,x).set(r,[e])}set(r,e){if(r==null)return!1;if(Array.isArray(r)){let[t,n]=r;if(t==null)return!1;if(e!==void 0)return this.add(t,e);if(n===void 0)return p(this,x).set(t,[]);let i=p(this,x).get(t);return i?(i.push(...n),!0):p(this,x).set(t,[...n])}return e!==void 0?this.add(r,e):p(this,x).set(r,[])}delete(r){return this._validateKey(r),p(this,x).delete(r)}hasEntry(r,e,t=Object.is){let n=this.get(r);return Array.isArray(n)?n.some(i=>t(i,e)):!1}deleteValue(r,e,t=Object.is){let n=this.get(r);if(!Array.isArray(n))return!1;let i=n.findIndex(s=>t(s,e));return i===-1?!1:(n.splice(i,1),n.length===0&&this.delete(r),!0)}deleteValues(r,e,t=Object.is){let n=this.get(r);if(!Array.isArray(n)||n.length===0)return 0;let i=0;for(let s=n.length-1;s>=0;s--)t(n[s],e)&&(n.splice(s,1),i++);return n.length===0&&i>0&&this.delete(r),i}*[Symbol.iterator](){for(let[r,e]of p(this,x))yield[r,e!=null?e:[]]}*keys(){yield*p(this,x).keys()}*values(){for(let[,r]of this)yield r}*entries(){yield*this}*entriesOf(r){let e=this.get(r);if(Array.isArray(e))for(let t of e)yield[r,t]}*valuesOf(r){let e=this.get(r);Array.isArray(e)&&(yield*e)}*flatEntries(){for(let[r,e]of this)for(let t of e)yield[r,t]}first(){let r=p(this,x).getLeftMost();if(r===void 0)return;let e=this.get(r);return e===void 0?void 0:[r,e]}last(){let r=p(this,x).getRightMost();if(r===void 0)return;let e=this.get(r);return e===void 0?void 0:[r,e]}pollFirst(){let r=this.first();if(r)return this.delete(r[0]),r}pollLast(){let r=this.last();if(r)return this.delete(r[0]),r}ceiling(r){this._validateKey(r);let e=p(this,x).ceiling(r);if(e===void 0)return;let t=this.get(e);return t===void 0?void 0:[e,t]}floor(r){this._validateKey(r);let e=p(this,x).floor(r);if(e===void 0)return;let t=this.get(e);return t===void 0?void 0:[e,t]}higher(r){this._validateKey(r);let e=p(this,x).higher(r);if(e===void 0)return;let t=this.get(e);return t===void 0?void 0:[e,t]}lower(r){this._validateKey(r);let e=p(this,x).lower(r);if(e===void 0)return;let t=this.get(e);return t===void 0?void 0:[e,t]}print(){p(this,x).print()}forEach(r){for(let[e,t]of this)r(t,e,this)}filter(r){let e=[];for(let[t,n]of this)r(n,t,this)&&e.push([t,n]);return new ke(e,{comparator:this.comparator})}map(r){let e=[];for(let[t,n]of this)e.push(r(n,t,this));return new ke(e,{comparator:this.comparator})}reduce(r,e){let t=e;for(let[n,i]of this)t=r(t,i,n,this);return t}setMany(r){let e=[];for(let t of r)e.push(this.set(t));return e}rangeSearch(r,e){return p(this,x).rangeSearch(r,e)}getByRank(r){var t;let e=p(this,x).getByRank(r);if(e!==void 0)return[e,(t=p(this,x).get(e))!=null?t:[]]}getRank(r){return p(this,x).getRank(r)}rangeByRank(r,e){return p(this,x).rangeByRank(r,e).filter(n=>n!==void 0).map(n=>{var i;return[n,(i=p(this,x).get(n))!=null?i:[]]})}clone(){return new ke(this,{comparator:this.comparator,isMapMode:p(this,x).isMapMode})}get comparator(){return p(this,x).comparator}};x=new WeakMap,Me=new WeakMap;var st=ke;var I,be,me,ge=class ge{constructor(r=[],e={}){v(this,I);v(this,be);v(this,me);var i;C(this,me,e.comparator);let t=e.toEntryFn,n=(i=e.comparator)!=null?i:ge.createDefaultComparator();C(this,be,e.comparator===void 0),C(this,I,new U([],{comparator:n,isMapMode:e.isMapMode,enableOrderStatistic:e.enableOrderStatistic}));for(let s of r){let o,d;t?[o,d]=t(s):((!Array.isArray(s)||s.length<2)&&m(TypeError,K.invalidEntry("TreeMap")),o=s[0],d=s[1]),this.set(o,d)}}static createDefaultComparator(){return(r,e)=>{if(typeof r=="number"&&typeof e=="number"){(Number.isNaN(r)||Number.isNaN(e))&&m(TypeError,K.invalidNaN("TreeMap"));let t=Object.is(r,-0)?0:r,n=Object.is(e,-0)?0:e;return t>n?1:t<n?-1:0}if(typeof r=="string"&&typeof e=="string")return r>e?1:r<e?-1:0;if(r instanceof Date&&e instanceof Date){let t=r.getTime(),n=e.getTime();return(Number.isNaN(t)||Number.isNaN(n))&&m(TypeError,K.invalidDate("TreeMap")),t>n?1:t<n?-1:0}m(TypeError,K.comparatorRequired("TreeMap"))}}_validateKey(r){if(p(this,be)){if(typeof r=="number"){Number.isNaN(r)&&m(TypeError,K.invalidNaN("TreeMap"));return}if(typeof r!="string"){if(r instanceof Date){Number.isNaN(r.getTime())&&m(TypeError,K.invalidDate("TreeMap"));return}m(TypeError,K.comparatorRequired("TreeMap"))}}}get size(){return p(this,I).size}isEmpty(){return this.size===0}set(r,e){return this._validateKey(r),p(this,I).set(r,e),this}setMany(r){let e=[];for(let[t,n]of r)this._validateKey(t),e.push(p(this,I).set(t,n));return e}get(r){return this._validateKey(r),p(this,I).get(r)}has(r){return this._validateKey(r),p(this,I).has(r)}delete(r){return this._validateKey(r),p(this,I).delete(r)}deleteWhere(r){let e=!1,t=0;for(let[n,i]of this)r(n,i,t++,this)&&(this.delete(n),e=!0);return e}clear(){p(this,I).clear()}keys(){return p(this,I).keys()}_entryFromKey(r){return[r,p(this,I).get(r)]}*values(){for(let r of this.keys())yield this._entryFromKey(r)[1]}*entries(){for(let r of this.keys())yield this._entryFromKey(r)}[Symbol.iterator](){return this.entries()}forEach(r,e){for(let[t,n]of this)r.call(e,n,t,this)}map(r,e={},t){let n=new ge([],e),i=0;for(let[s,o]of this){let[d,a]=t===void 0?r(o,s,i++,this):r.call(t,o,s,i++,this);n.set(d,a)}return n}filter(r,e){let t=new ge([],{comparator:p(this,me)}),n=0;for(let[i,s]of this)(e===void 0?r(s,i,n++,this):r.call(e,s,i,n++,this))&&t.set(i,s);return t}reduce(r,e){let t=e,n=0;for(let[i,s]of this)t=r(t,s,i,n++,this);return t}every(r,e){let t=0;for(let[n,i]of this)if(!(e===void 0?r(i,n,t++,this):r.call(e,i,n,t++,this)))return!1;return!0}some(r,e){let t=0;for(let[n,i]of this)if(e===void 0?r(i,n,t++,this):r.call(e,i,n,t++,this))return!0;return!1}find(r,e){let t=0;for(let[n,i]of this)if(e===void 0?r(i,n,t++,this):r.call(e,i,n,t++,this))return[n,i]}toArray(){return[...this]}print(){p(this,I).print()}first(){let r=p(this,I).getLeftMost();return r===void 0?void 0:this._entryFromKey(r)}last(){let r=p(this,I).getRightMost();return r===void 0?void 0:this._entryFromKey(r)}pollFirst(){let r=this.first();if(r)return this.delete(r[0]),r}pollLast(){let r=this.last();if(r)return this.delete(r[0]),r}ceiling(r){this._validateKey(r);let e=p(this,I).ceiling(r);return e===void 0?void 0:this._entryFromKey(e)}floor(r){this._validateKey(r);let e=p(this,I).floor(r);return e===void 0?void 0:this._entryFromKey(e)}higher(r){this._validateKey(r);let e=p(this,I).higher(r);return e===void 0?void 0:this._entryFromKey(e)}lower(r){this._validateKey(r);let e=p(this,I).lower(r);return e===void 0?void 0:this._entryFromKey(e)}rangeSearch(r,e={}){let{lowInclusive:t=!0,highInclusive:n=!0}=e,[i,s]=r;this._validateKey(i),this._validateKey(s);let o=p(this,I).rangeSearch([i,s]),d=[],a=p(this,I).comparator;for(let u of o)u!==void 0&&(!t&&a(u,i)===0||!n&&a(u,s)===0||d.push(this._entryFromKey(u)));return d}getByRank(r){let e=p(this,I).getByRank(r);if(e!==void 0)return[e,p(this,I).get(e)]}getRank(r){return p(this,I).getRank(r)}rangeByRank(r,e){return p(this,I).rangeByRank(r,e).filter(n=>n!==void 0).map(n=>[n,p(this,I).get(n)])}clone(){return new ge(this,{comparator:p(this,be)?void 0:p(this,me),isMapMode:p(this,I).isMapMode})}};I=new WeakMap,be=new WeakMap,me=new WeakMap;var ot=ge;var B,oe,xe=class xe{constructor(r=[],e={}){v(this,B);v(this,oe);h(this,"_size",0);var i;let t=e.toElementFn,n=(i=e.comparator)!=null?i:se.createDefaultComparator();C(this,oe,e.comparator===void 0),C(this,B,new U([],{comparator:n,isMapMode:e.isMapMode,enableOrderStatistic:e.enableOrderStatistic}));for(let s of r){let o=t?t(s):s;this.add(o)}}_validateKey(r){if(p(this,oe)){if(typeof r=="number"){Number.isNaN(r)&&m(TypeError,K.invalidNaN("TreeMultiSet"));return}if(typeof r!="string"){if(r instanceof Date){Number.isNaN(r.getTime())&&m(TypeError,K.invalidDate("TreeMultiSet"));return}m(TypeError,K.comparatorRequired("TreeMultiSet"))}}}_validateCount(r){(!Number.isSafeInteger(r)||r<0)&&m(RangeError,K.invalidArgument("count must be a safe integer >= 0.","TreeMultiSet"))}get size(){return this._size}get distinctSize(){return p(this,B).size}isEmpty(){return this.size===0}has(r){return this._validateKey(r),this.count(r)>0}count(r){var e;return this._validateKey(r),(e=p(this,B).get(r))!=null?e:0}add(r,e=1){var i;if(this._validateKey(r),this._validateCount(e),e===0)return!1;let n=((i=p(this,B).get(r))!=null?i:0)+e;return p(this,B).set(r,n),this._size+=e,!0}setCount(r,e){var n;this._validateKey(r),this._validateCount(e);let t=(n=p(this,B).get(r))!=null?n:0;return t===e?!1:(e===0?t!==0&&p(this,B).delete(r):p(this,B).set(r,e),this._size+=e-t,!0)}delete(r,e=1){var s;if(this._validateKey(r),this._validateCount(e),e===0)return!1;let t=(s=p(this,B).get(r))!=null?s:0;if(t===0)return!1;let n=Math.min(t,e),i=t-n;return i===0?p(this,B).delete(r):p(this,B).set(r,i),this._size-=n,!0}deleteAll(r){var t;this._validateKey(r);let e=(t=p(this,B).get(r))!=null?t:0;return e===0?!1:(p(this,B).delete(r),this._size-=e,!0)}*keysDistinct(){yield*p(this,B).keys()}*entries(){for(let[r,e]of p(this,B))yield[r,e!=null?e:0]}*[Symbol.iterator](){for(let[r,e]of this.entries())for(let t=0;t<e;t++)yield r}*keys(){yield*this}*values(){yield*this}toArray(){return[...this]}toDistinctArray(){return[...this.keysDistinct()]}toEntries(){return[...this.entries()]}get comparator(){return p(this,B).comparator}clear(){p(this,B).clear(),this._size=0}first(){return p(this,B).getLeftMost()}last(){return p(this,B).getRightMost()}pollFirst(){let r=this.first();if(r!==void 0)return this.deleteAll(r),r}pollLast(){let r=this.last();if(r!==void 0)return this.deleteAll(r),r}ceiling(r){return this._validateKey(r),p(this,B).ceiling(r)}floor(r){return this._validateKey(r),p(this,B).floor(r)}higher(r){return this._validateKey(r),p(this,B).higher(r)}lower(r){return this._validateKey(r),p(this,B).lower(r)}forEach(r){for(let[e,t]of this.entries())r(e,t)}filter(r){let e=new xe([],{comparator:p(this,oe)?void 0:this.comparator,isMapMode:p(this,B).isMapMode});for(let[t,n]of this.entries())r(t,n)&&e.add(t,n);return e}reduce(r,e){let t=e;for(let[n,i]of this.entries())t=r(t,n,i);return t}map(r,e){let t=new xe([],{comparator:e==null?void 0:e.comparator,isMapMode:p(this,B).isMapMode});for(let[n,i]of this.entries()){let[s,o]=r(n,i);t.add(s,o)}return t}getByRank(r){return p(this,B).getByRank(r)}getRank(r){return p(this,B).getRank(r)}rangeByRank(r,e){return p(this,B).rangeByRank(r,e).filter(t=>t!==void 0)}clone(){let r=new xe([],{comparator:p(this,oe)?void 0:this.comparator,isMapMode:p(this,B).isMapMode});for(let[e,t]of this.entries())r.add(e,t);return r}rangeSearch(r,e){let t=e!=null?e:(n=>n);return p(this,B).rangeSearch(r,n=>t(n.key))}print(){p(this,B).print()}};B=new WeakMap,oe=new WeakMap;var dt=xe;var de=class extends H{constructor(r=[],e){super(r,e)}};var at=class extends de{constructor(r=[],e){super(r,e)}};var ut=class extends de{constructor(r=[],e){super(r,{comparator:(t,n)=>((typeof t=="object"||typeof n=="object")&&m(TypeError,K.comparatorRequired("MaxPriorityQueue")),t<n?1:t>n?-1:0),...e})}};var lt=class l{constructor(r,e){h(this,"_rows",0);h(this,"_cols",0);h(this,"_data");var t,n,i;if(e){let{rows:s,cols:o,addFn:d,subtractFn:a,multiplyFn:u}=e;typeof s=="number"&&s>0?this._rows=s:this._rows=r.length,typeof o=="number"&&o>0?this._cols=o:this._cols=((t=r[0])==null?void 0:t.length)||0,d&&(this._addFn=d),a&&(this._subtractFn=a),u&&(this._multiplyFn=u)}else this._rows=r.length,this._cols=(i=(n=r[0])==null?void 0:n.length)!=null?i:0;if(r.length>0)this._data=r;else{this._data=[];for(let s=0;s<this.rows;s++)this._data[s]=new Array(this.cols).fill(0)}}get rows(){return this._rows}get cols(){return this._cols}get data(){return this._data}get addFn(){return this._addFn}get subtractFn(){return this._subtractFn}get multiplyFn(){return this._multiplyFn}get(r,e){if(this.isValidIndex(r,e))return this.data[r][e]}set(r,e,t){return this.isValidIndex(r,e)?(this.data[r][e]=t,!0):!1}isMatchForCalculate(r){return this.rows===r.rows&&this.cols===r.cols}add(r){var t;this.isMatchForCalculate(r)||m(Error,K.matrixDimensionMismatch("addition"));let e=[];for(let n=0;n<this.rows;n++){e[n]=[];for(let i=0;i<this.cols;i++){let s=this.get(n,i),o=r.get(n,i);s!==void 0&&o!==void 0&&(e[n][i]=(t=this._addFn(s,o))!=null?t:0)}}return new l(e,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}subtract(r){var t;this.isMatchForCalculate(r)||m(Error,K.matrixDimensionMismatch("subtraction"));let e=[];for(let n=0;n<this.rows;n++){e[n]=[];for(let i=0;i<this.cols;i++){let s=this.get(n,i),o=r.get(n,i);s!==void 0&&o!==void 0&&(e[n][i]=(t=this._subtractFn(s,o))!=null?t:0)}}return new l(e,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}multiply(r){this.cols!==r.rows&&m(Error,K.matrixDimensionMismatch("multiplication (A.cols must equal B.rows)"));let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<r.cols;n++){let i;for(let s=0;s<this.cols;s++){let o=this.get(t,s),d=r.get(s,n);if(o!==void 0&&d!==void 0){let a=this.multiplyFn(o,d);a!==void 0&&(i=this.addFn(i,a))}}i!==void 0&&(e[t][n]=i)}}return new l(e,{rows:this.rows,cols:r.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}transpose(){this.data.some(e=>e.length!==this.cols)&&m(Error,K.matrixNotRectangular());let r=[];for(let e=0;e<this.cols;e++){r[e]=[];for(let t=0;t<this.rows;t++){let n=this.get(t,e);n!==void 0&&(r[e][t]=n)}}return new l(r,{rows:this.cols,cols:this.rows,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}inverse(){var n;this.rows!==this.cols&&m(Error,K.matrixNotSquare());let r=[];for(let i=0;i<this.rows;i++){r[i]=this.data[i].slice();for(let s=0;s<this.cols;s++)r[i][this.cols+s]=i===s?1:0}let e=new l(r,{rows:this.rows,cols:this.cols*2,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn});for(let i=0;i<this.rows;i++){let s=i;for(;s<this.rows&&e.get(s,i)===0;)s++;s===this.rows&&m(Error,K.matrixSingular()),e._swapRows(i,s);let o=(n=e.get(i,i))!=null?n:1;o===0&&m(Error,K.matrixSingular()),e._scaleRow(i,1/o);for(let d=0;d<this.rows;d++)if(d!==i){let a=e.get(d,i);a===void 0&&(a=0),e._addScaledRow(d,i,-a)}}let t=[];for(let i=0;i<this.rows;i++)t[i]=e.data[i].slice(this.cols);return new l(t,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}dot(r){this.cols!==r.rows&&m(Error,K.matrixDimensionMismatch("dot product (A.cols must equal B.rows)"));let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<r.cols;n++){let i;for(let s=0;s<this.cols;s++){let o=this.get(t,s),d=r.get(s,n);if(o!==void 0&&d!==void 0){let a=this.multiplyFn(o,d);a!==void 0&&(i=this.addFn(i,a))}}i!==void 0&&(e[t][n]=i)}}return new l(e,{rows:this.rows,cols:r.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}isValidIndex(r,e){return r>=0&&r<this.rows&&e>=0&&e<this.cols}clone(){return new l(this._data.map(r=>[...r]),{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}get size(){return[this._rows,this._cols]}isEmpty(){return this._rows===0||this._cols===0}toArray(){return this._data.map(r=>[...r])}flatten(){let r=[];for(let e of this._data)for(let t of e)r.push(t);return r}[Symbol.iterator](){let r=this._data,e=0;return{[Symbol.iterator](){return this},next(){return e<r.length?{value:[...r[e++]],done:!1}:{value:void 0,done:!0}}}}forEach(r){for(let e=0;e<this._rows;e++)for(let t=0;t<this._cols;t++)r(this._data[e][t],e,t)}map(r){let e=[];for(let t=0;t<this._rows;t++){e[t]=[];for(let n=0;n<this._cols;n++)e[t][n]=r(this._data[t][n],t,n)}return new l(e,{rows:this._rows,cols:this._cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}print(){for(let r of this._data)console.log(r.join(" "))}static zeros(r,e){let t=Array.from({length:r},()=>new Array(e).fill(0));return new l(t)}static identity(r){let e=Array.from({length:r},(t,n)=>Array.from({length:r},(i,s)=>n===s?1:0));return new l(e)}static from(r){return new l(r.map(e=>[...e]))}_addFn(r,e){return r===void 0?e:r+e}_subtractFn(r,e){return r-e}_multiplyFn(r,e){return r*e}_swapRows(r,e){let t=this.data[r];this.data[r]=this.data[e],this.data[e]=t}_scaleRow(r,e){for(let t=0;t<this.cols;t++){let n=this.multiplyFn(this.data[r][t],e);n===void 0&&(n=0),this.data[r][t]=n}}_addScaledRow(r,e,t){for(let n=0;n<this.cols;n++){let i=this.multiplyFn(this.data[e][n],t);i===void 0&&(i=0);let s=i,o=this.addFn(this.data[r][n],s);o===void 0&&(o=0),this.data[r][n]=o}}};var Ae=class l{constructor(r,e){h(this,"direction");h(this,"turn");this.direction=r,this.turn=()=>new l(e[r],e)}},ht=class{constructor({matrix:r,turning:e,onMove:t,init:{cur:n,charDir:i,VISITED:s}}){h(this,"onMove");h(this,"_matrix");h(this,"_cur");h(this,"_character");h(this,"_VISITED");this._matrix=r,this._cur=n,this._character=new Ae(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:r}=this._character;this.check(r)?this.move(r):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(r){let e,t,n=this._matrix,[i,s]=this._cur;switch(r){case"up":if(t=n[i-1],!t)return!1;e=t[s];break;case"right":e=n[i][s+1];break;case"down":if(t=n[i+1],!t)return!1;e=t[s];break;case"left":e=n[i][s-1];break}return e!==void 0&&e!==this._VISITED}move(r){switch(r){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 Ke=class{constructor(r){h(this,"_key");h(this,"_children");h(this,"_isEnd");this._key=r,this._isEnd=!1,this._children=new Map}get key(){return this._key}set key(r){this._key=r}get children(){return this._children}set children(r){this._children=r}get isEnd(){return this._isEnd}set isEnd(r){this._isEnd=r}},ft=class extends P{constructor(e=[],t){super(t);h(this,"_size",0);h(this,"_caseSensitive",!0);h(this,"_root",new Ke(""));if(t){let{caseSensitive:n}=t;n!==void 0&&(this._caseSensitive=n)}e&&this.addMany(e)}get size(){return this._size}get caseSensitive(){return this._caseSensitive}get root(){return this._root}get _total(){return this._size}add(e){e=this._caseProcess(e);let t=this.root,n=!1;for(let i of e){let s=t.children.get(i);s||(s=new Ke(i),t.children.set(i,s)),t=s}return t.isEnd||(n=!0,t.isEnd=!0,this._size++),n}addMany(e){let t=[];for(let n of e)this.toElementFn?t.push(this.add(this.toElementFn(n))):t.push(this.add(n));return t}has(e){e=this._caseProcess(e);let t=this.root;for(let n of e){let i=t.children.get(n);if(!i)return!1;t=i}return t.isEnd}isEmpty(){return this._size===0}clear(){this._size=0,this._root=new Ke("")}delete(e){e=this._caseProcess(e);let t=!1,n=(i,s)=>{let o=e[s],d=i.children.get(o);return d?s===e.length-1?d.isEnd?(d.children.size>0?d.isEnd=!1:i.children.delete(o),t=!0,!0):!1:n(d,s+1)&&!i.isEnd&&d.children.size===0?(i.children.delete(o),!0):!1:!1};return n(this.root,0),t&&this._size--,t}getHeight(){let e=this.root,t=0;if(e){let n=(i,s)=>{s>t&&(t=s);let{children:o}=i;if(o)for(let d of o.entries())n(d[1],s+1)};n(e,0)}return t}hasPurePrefix(e){e=this._caseProcess(e);let t=this.root;for(let n of e){let i=t.children.get(n);if(!i)return!1;t=i}return!t.isEnd}hasPrefix(e){e=this._caseProcess(e);let t=this.root;for(let n of e){let i=t.children.get(n);if(!i)return!1;t=i}return!0}hasCommonPrefix(e){e=this._caseProcess(e);let t="",n=i=>{if(t+=i.key,t!==e&&!i.isEnd)if(i&&i.children&&i.children.size===1)n(Array.from(i.children.values())[0]);else return};return n(this.root),t===e}getLongestCommonPrefix(){let e="",t=n=>{if(e+=n.key,!n.isEnd)if(n&&n.children&&n.children.size===1)t(Array.from(n.children.values())[0]);else return};return t(this.root),e}getWords(e="",t=Number.MAX_SAFE_INTEGER,n=!1){e=this._caseProcess(e);let i=[],s=0,o=(a,u)=>{for(let[f,c]of a.children){if(s>=t)return;o(c,u+f)}if(a.isEnd){if(s>=t)return;i.push(u),s++}},d=this.root;if(e)for(let a of e){let u=d.children.get(a);if(u)d=u;else return[]}return(n||d!==this.root)&&o(d,e),i}clone(){let e=this._createInstance();for(let t of this)e.add(t);return e}filter(e,t){let n=this._createInstance(),i=0;for(let s of this)e.call(t,s,i,this)&&n.add(s),i++;return n}map(e,t,n){let i=this._createLike([],t),s=0;for(let o of this){let d=n===void 0?e(o,s++,this):e.call(n,o,s++,this);typeof d!="string"&&m(TypeError,K.callbackReturnType("string",typeof d,"Trie.map")),i.add(d)}return i}mapSame(e,t){let n=this._createInstance(),i=0;for(let s of this){let o=t===void 0?e(s,i++,this):e.call(t,s,i++,this);n.add(o)}return n}_createInstance(e){let t=this.constructor;return new t([],{toElementFn:this.toElementFn,caseSensitive:this.caseSensitive,...e!=null?e:{}})}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}_spawnLike(e){return this._createLike([],e)}*_getIterator(){function*e(t,n){t.isEnd&&(yield n);for(let[i,s]of t.children)yield*e(s,n+i)}yield*e(this.root,"")}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};var ct=class l{constructor(r,e,t){h(this,"_key");h(this,"_value");h(this,"_children");this._key=r,this._value=e||void 0,t&&(this._children=t)}get key(){return this._key}set key(r){this._key=r}get value(){return this._value}set value(r){this._value=r}get children(){return this._children}set children(r){this._children=r}addChildren(r){this._children||(this._children=[]),r instanceof l?this._children.push(r):this._children=this._children.concat(r)}getHeight(){let r=0;if(this){let e=(t,n)=>{n>r&&(r=n);let{_children:i}=t;if(i)for(let s=0,o=i.length;s<o;s++)e(i[s],n+1)};e(this,0)}return r}};return kt(vt);})();
|
|
8
8
|
/**
|
|
9
9
|
* data-structure-typed
|
|
10
10
|
*
|