data-structure-typed 2.1.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +19 -7
  3. package/dist/cjs/index.cjs +22 -22
  4. package/dist/cjs/index.cjs.map +1 -1
  5. package/dist/esm/index.mjs +22 -22
  6. package/dist/esm/index.mjs.map +1 -1
  7. package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +1 -1
  8. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -1
  9. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +1 -1
  10. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
  11. package/dist/types/data-structures/binary-tree/bst.d.ts +1 -1
  12. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +2 -2
  13. package/dist/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
  14. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
  15. package/dist/types/data-structures/heap/heap.d.ts +4 -4
  16. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +1 -1
  17. package/dist/types/interfaces/binary-tree.d.ts +1 -1
  18. package/dist/umd/data-structure-typed.js +87 -165
  19. package/dist/umd/data-structure-typed.js.map +1 -1
  20. package/dist/umd/data-structure-typed.min.js +2 -2
  21. package/dist/umd/data-structure-typed.min.js.map +1 -1
  22. package/jest.integration.config.js +7 -3
  23. package/package.json +11 -7
  24. package/src/data-structures/binary-tree/avl-tree-counter.ts +4 -4
  25. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +1 -1
  26. package/src/data-structures/binary-tree/avl-tree.ts +2 -2
  27. package/src/data-structures/binary-tree/binary-tree.ts +4 -4
  28. package/src/data-structures/binary-tree/bst.ts +1 -1
  29. package/src/data-structures/binary-tree/red-black-tree.ts +2 -2
  30. package/src/data-structures/binary-tree/tree-counter.ts +4 -4
  31. package/src/data-structures/binary-tree/tree-multi-map.ts +1 -1
  32. package/src/data-structures/heap/heap.ts +5 -5
  33. package/src/data-structures/linked-list/singly-linked-list.ts +2 -2
  34. package/src/interfaces/binary-tree.ts +1 -1
  35. package/test/integration/compile.test.mjs +159 -0
  36. package/test/integration/compile.test.ts +176 -0
  37. package/test/integration/heap.test.js +1 -1
  38. package/test/integration/index.html +1 -1
  39. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +3 -3
  40. package/{tsconfig-base.json → tsconfig.base.json} +0 -1
  41. package/tsconfig.test.json +1 -0
  42. package/{tsconfig-types.json → tsconfig.types.json} +1 -3
  43. package/tsup.config.js +2 -3
  44. package/dist/index.cjs +0 -13091
  45. package/dist/index.cjs.map +0 -1
  46. package/dist/index.js +0 -13013
  47. package/dist/index.js.map +0 -1
  48. package/test/integration/compile.js +0 -144
  49. package/test/integration/compile.mjs +0 -135
  50. package/test/integration/compile.ts +0 -171
  51. /package/{tsup.node.config.ts → tsup.node.config.js} +0 -0
@@ -1,8 +1,8 @@
1
- "use strict";var dataStructureTyped=(()=>{var fe=Object.defineProperty,lt=Object.defineProperties,ut=Object.getOwnPropertyDescriptor,ht=Object.getOwnPropertyDescriptors,ft=Object.getOwnPropertyNames,he=Object.getOwnPropertySymbols;var ke=Object.prototype.hasOwnProperty,it=Object.prototype.propertyIsEnumerable;var Re=(h,s)=>(s=Symbol[h])?s:Symbol.for("Symbol."+h),ct=h=>{throw TypeError(h)};var Ne=(h,s,e)=>s in h?fe(h,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[s]=e,_=(h,s)=>{for(var e in s||(s={}))ke.call(s,e)&&Ne(h,e,s[e]);if(he)for(var e of he(s))it.call(s,e)&&Ne(h,e,s[e]);return h},L=(h,s)=>lt(h,ht(s));var rt=(h,s)=>{var e={};for(var t in h)ke.call(h,t)&&s.indexOf(t)<0&&(e[t]=h[t]);if(h!=null&&he)for(var t of he(h))s.indexOf(t)<0&&it.call(h,t)&&(e[t]=h[t]);return e};var pt=(h,s)=>{for(var e in s)fe(h,e,{get:s[e],enumerable:!0})},Vt=(h,s,e,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of ft(s))!ke.call(h,n)&&n!==e&&fe(h,n,{get:()=>s[n],enumerable:!(t=ut(s,n))||t.enumerable});return h};var _t=h=>Vt(fe({},"__esModule",{value:!0}),h);var u=(h,s,e)=>Ne(h,typeof s!="symbol"?s+"":s,e);var Me=(h,s,e)=>new Promise((t,n)=>{var i=d=>{try{o(e.next(d))}catch(a){n(a)}},r=d=>{try{o(e.throw(d))}catch(a){n(a)}},o=d=>d.done?t(d.value):Promise.resolve(d.value).then(i,r);o((e=e.apply(h,s)).next())}),gt=function(h,s){this[0]=h,this[1]=s};var v=h=>{var s=h[Re("asyncIterator")],e=!1,t,n={};return s==null?(s=h[Re("iterator")](),t=i=>n[i]=r=>s[i](r)):(s=s.call(h),t=i=>n[i]=r=>{if(e){if(e=!1,i==="throw")throw r;return r}return e=!0,{done:!1,value:new gt(new Promise(o=>{var d=s[i](r);d instanceof Object||ct("Object expected"),o(d)}),1)}}),n[Re("iterator")]=()=>n,t("next"),"throw"in s?t("throw"):n.throw=i=>{throw i},"return"in s&&t("return"),n};var Et={};pt(Et,{AVLTree:()=>X,AVLTreeCounter:()=>$e,AVLTreeCounterNode:()=>ue,AVLTreeMultiMap:()=>We,AVLTreeMultiMapNode:()=>ye,AVLTreeNode:()=>A,AbstractEdge:()=>j,AbstractGraph:()=>G,AbstractVertex:()=>M,BST:()=>Q,BSTNode:()=>F,BinaryIndexedTree:()=>qe,BinaryTree:()=>ae,BinaryTreeNode:()=>z,Character:()=>Ee,DFSOperation:()=>Ue,Deque:()=>Ae,DirectedEdge:()=>te,DirectedGraph:()=>de,DirectedVertex:()=>W,DoublyLinkedList:()=>Ie,DoublyLinkedListNode:()=>se,FibonacciHeap:()=>De,FibonacciHeapNode:()=>_e,HashMap:()=>ve,Heap:()=>O,IterableElementBase:()=>B,IterableEntryBase:()=>w,LinkedHashMap:()=>we,LinkedListQueue:()=>Fe,MapEdge:()=>Te,MapGraph:()=>ze,MapVertex:()=>me,Matrix:()=>Ze,MaxHeap:()=>Pe,MaxPriorityQueue:()=>Ye,MinHeap:()=>je,MinPriorityQueue:()=>Je,Navigator:()=>et,PriorityQueue:()=>J,Queue:()=>x,Range:()=>H,RedBlackTree:()=>$,RedBlackTreeNode:()=>D,SegmentTree:()=>Ge,SegmentTreeNode:()=>ne,SinglyLinkedList:()=>re,SinglyLinkedListNode:()=>ee,SkipList:()=>Ce,SkipListNode:()=>oe,Stack:()=>Se,TreeCounter:()=>Xe,TreeCounterNode:()=>le,TreeMultiMap:()=>Qe,TreeMultiMapNode:()=>Ke,TreeNode:()=>nt,Trie:()=>tt,TrieNode:()=>ie,UndirectedEdge:()=>be,UndirectedGraph:()=>He,UndirectedVertex:()=>ge,arrayRemove:()=>C,asyncTrampoline:()=>dt,calcMinUnitsRequired:()=>ce,getMSB:()=>Be,isComparable:()=>I,isTrampolineThunk:()=>Oe,isWeakKey:()=>q,makeAsyncTrampoline:()=>Tt,makeTrampoline:()=>Ve,makeTrampolineThunk:()=>pe,rangeCheck:()=>S,roundFixed:()=>mt,throwRangeError:()=>bt,toBinaryString:()=>yt,trampoline:()=>ot,uuidV4:()=>xe});var w=class{*[Symbol.iterator](...s){yield*v(this._getIterator(...s))}*entries(){for(let s of this)yield s}*keys(){for(let s of this)yield s[0]}*values(){for(let s of this)yield s[1]}every(s,e){let t=0;for(let n of this)if(!s.call(e,n[0],n[1],t++,this))return!1;return!0}some(s,e){let t=0;for(let n of this)if(s.call(e,n[0],n[1],t++,this))return!0;return!1}forEach(s,e){let t=0;for(let n of this){let[i,r]=n;s.call(e,i,r,t++,this)}}find(s,e){let t=0;for(let n of this){let[i,r]=n;if(s.call(e,i,r,t++,this))return n}}has(s){for(let e of this){let[t]=e;if(t===s)return!0}return!1}hasValue(s){for(let[,e]of this)if(e===s)return!0;return!1}get(s){for(let e of this){let[t,n]=e;if(t===s)return n}}reduce(s,e){let t=e,n=0;for(let i of this){let[r,o]=i;t=s(t,o,r,n++,this)}return t}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var B=class{constructor(s){u(this,"_toElementFn");if(s){let{toElementFn:e}=s;if(typeof e=="function")this._toElementFn=e;else if(e)throw new TypeError("toElementFn must be a function type")}}get toElementFn(){return this._toElementFn}*[Symbol.iterator](...s){yield*v(this._getIterator(...s))}*values(){for(let s of this)yield s}every(s,e){let t=0;for(let n of this)if(e===void 0){if(!s(n,t++,this))return!1}else if(!s.call(e,n,t++,this))return!1;return!0}some(s,e){let t=0;for(let n of this)if(e===void 0){if(s(n,t++,this))return!0}else if(s.call(e,n,t++,this))return!0;return!1}forEach(s,e){let t=0;for(let n of this)e===void 0?s(n,t++,this):s.call(e,n,t++,this)}find(s,e){let t=0;for(let n of this)if(e===void 0){if(s(n,t++,this))return n}else if(s.call(e,n,t++,this))return n}has(s){for(let e of this)if(e===s)return!0;return!1}reduce(s,e){let t=0,n=this[Symbol.iterator](),i;if(arguments.length>=2)i=e;else{let r=n.next();if(r.done)throw new TypeError("Reduce of empty structure with no initial value");i=r.value,t=1}for(let r of n)i=s(i,r,t++,this);return i}toArray(){return[...this]}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var xe=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(h){let s=Math.random()*16|0;return(h=="x"?s:s&3|8).toString(16)})},C=function(h,s){let e=-1,t=h?h.length:0,n=[];for(;++e<t;){let i=h[e];s(i,e,h)&&(n.push(i),Array.prototype.splice.call(h,e--,1),t--)}return n},Be=h=>h<=0?0:1<<31-Math.clz32(h),S=(h,s,e,t="Index out of bounds.")=>{if(h<s||h>e)throw new RangeError(t)},bt=(h="The value is off-limits.")=>{throw new RangeError(h)},q=h=>{let s=typeof h;return s==="object"&&h!==null||s==="function"},ce=(h,s)=>Math.floor((h+s-1)/s),mt=(h,s=10)=>{let e=Math.pow(10,s);return Math.round(h*e)/e};function Le(h){let s=typeof h;return s==="number"?!0:s==="bigint"||s==="string"||s==="boolean"}function st(h){if(typeof h.valueOf=="function"){let s=h.valueOf();if(s!==h){if(Le(s))return s;if(typeof s=="object"&&s!==null)return st(s)}}if(typeof h.toString=="function"){let s=h.toString();if(s!=="[object Object]")return s}return null}function I(h,s=!1){if(h==null)return!1;if(Le(h))return!0;if(typeof h!="object")return!1;if(h instanceof Date||s)return!0;let e=st(h);return e==null?!1:Le(e)}var pe=h=>({isThunk:!0,fn:h}),Oe=h=>typeof h=="object"&&h!==null&&"isThunk"in h&&h.isThunk;function ot(h){let s=h;for(;Oe(s);)s=s.fn();return s}function Ve(h){return(...s)=>ot(h(...s))}function dt(h){return Me(this,null,function*(){let s=yield h;for(;Oe(s);)s=yield s.fn();return s})}function Tt(h){return(...s)=>Me(null,null,function*(){return dt(h(...s))})}function yt(h,s=32){let e=(h>>>0).toString(2);return e=e.padStart(s,"0"),e}var ve=class extends w{constructor(e=[],t){super();u(this,"_store",{});u(this,"_objMap",new Map);u(this,"_toEntryFn");u(this,"_size",0);u(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,r;this.isEntry(n)?[i,r]=n:this._toEntryFn&&([i,r]=this._toEntryFn(n)),i!==void 0&&r!==void 0&&t.push(this.set(i,r))}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[r,o]of this)n.set(r,e.call(t,r,o,i++,this));return n}filter(e,t){let n=this._createLike(),i=0;for(let[r,o]of this)e.call(t,r,o,i++,this)&&n.set(r,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}},we=class extends w{constructor(e=[],t){super();u(this,"_sentinel");u(this,"_hashFn",e=>String(e));u(this,"_objHashFn",e=>e);u(this,"_noObjMap",{});u(this,"_objMap",new WeakMap);u(this,"_head");u(this,"_tail");u(this,"_toEntryFn",e=>{if(this.isEntry(e))return e;throw new Error("If `entryOrRawElements` does not adhere to [key,value], provide `options.toEntryFn` to transform raw records.")});u(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:r}=t;n&&(this._hashFn=n),i&&(this._objHashFn=i),r&&(this._toEntryFn=r)}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(q(e)){let r=this._objHashFn(e);n=this.objMap.get(r),!n&&i?(n={key:r,value:t,prev:this.tail,next:this._sentinel},this.objMap.set(r,n)):n&&(n.value=t)}else{let r=this._hashFn(e);n=this.noObjMap[r],!n&&i?this.noObjMap[r]=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,r;this.isEntry(n)?[i,r]=n:this._toEntryFn&&([i,r]=this._toEntryFn(n)),i!==void 0&&r!==void 0&&t.push(this.set(i,r))}return t}has(e){if(q(e)){let n=this._objHashFn(e);return this.objMap.has(n)}return this._hashFn(e)in this.noObjMap}get(e){if(q(e)){let i=this._objHashFn(e),r=this.objMap.get(i);return r?r.value:void 0}let t=this._hashFn(e),n=this.noObjMap[t];return n?n.value:void 0}at(e){S(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return t.value}delete(e){let t;if(q(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)){if(q(i.key))this._objMap.delete(i.key);else{let r=this._hashFn(i.key);delete this._noObjMap[r]}return this._deleteNode(i)}}return!1}deleteAt(e){S(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[r,o]of this)e.call(t,r,o,i,this)&&n.set(r,o),i++;return n}map(e,t){let n=this._createLike(),i=0;for(let[r,o]of this){let[d,a]=e.call(t,r,o,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{prev:t,next:n}=e;return t.next=n,n.prev=t,e===this.head&&(this._head=n),e===this.tail&&(this._tail=t),this._size-=1,!0}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}};var Y=class{constructor(s){u(this,"_value");u(this,"_next");this._value=s,this._next=void 0}get value(){return this._value}set value(s){this._value=s}get next(){return this._next}set next(s){this._next=s}},P=class h extends B{constructor(e){super(e);u(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 h?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 r=0;r<t;r++){let o=this.deleteAt(e);o!==void 0&&i.push(o)}for(let r=0;r<n.length;r++)this.addAt(e+r,n[r]);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}},Z=class extends P{constructor(s){if(super(s),s){let{maxLen:e}=s;typeof e=="number"&&e>0&&e%1===0&&(this._maxLen=e)}}indexOf(s,e=0){let t=this._getIterator(),n=t.next(),i=0;for(;i<e;)n=t.next(),i++;for(;!n.done;){if(n.value===s)return i;n=t.next(),i++}return-1}lastIndexOf(s,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===s)return i;n=t.next(),i--}return-1}concat(...s){let e=this.clone();for(let t of s)t instanceof P?e.pushMany(t):e.push(t);return e}slice(s=0,e=this.length){s=s<0?this.length+s:s,e=e<0?this.length+e:e;let t=this._createInstance(),n=this._getIterator(),i=n.next(),r=0;for(;r<s;)i=n.next(),r++;for(let o=s;o<e;o++)t.push(i.value),i=n.next();return t}splice(s,e=0,...t){let n=this._createInstance();s=s<0?this.length+s:s,s=Math.max(0,Math.min(s,this.length)),e=Math.max(0,e);let i=0,r,o,d=this._getNodeIterator();for(let a of d){if(i===s){r=a;break}o=a,i++}for(let a=0;a<e&&r;a++){n.push(r.value);let l=r.next;this.delete(r),r=l}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(s,e){let t=e!=null?e:0,n=this.length-1;for(let i of this._getReverseIterator())t=s(t,i,n--,this);return t}};var ee=class extends Y{constructor(e){super(e);u(this,"_next");this._value=e,this._next=void 0}get next(){return this._next}set next(e){this._next=e}},re=class extends Z{constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(this,"_head");u(this,"_tail");u(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(){if(!this.head)return;if(this.head===this.tail){let n=this.head.value;return this._head=void 0,this._tail=void 0,this._length--,n}let e=this.head;for(;e.next!==this.tail;)e=e.next;let t=this.tail.value;return e.next=void 0,this._tail=e,this._length--,t}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;n++)t=t.next;return t.value}isNode(e){return e instanceof ee}getNodeAt(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e;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),r=this._ensureNode(t);return i?(i.next=r,r.next=n,this._length++):(r.next=this._head,this._head=r,this._tail||(this._tail=r),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(),r=e===0?void 0:this.getNodeAt(e-1),o=r?r.next:this.head,d=0;for(;d<t&&o;)i.push(o.value),o=o.next,d++;let a=o;if(r?r.next=a:this._head=a,a||(this._tail=r),n.length>0){let l,f;for(let c of n){let V=this._ensureNode(c);l||(l=V),f&&(f.next=V),f=V}r?r.next=l:this._head=l,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=Kt(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 r of this)e.call(t,r,i++,this)&&n.push(r);return n}mapSame(e,t){let n=this._createInstance(),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],L(_({},t!=null?t:{}),{maxLen:this._maxLen})),r=0;for(let o of this)i.push(e.call(n,o,r++,this));return i}_createNode(e){return new ee(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 Kt(h,s){if(h instanceof ee)return t=>t===h;if(typeof h=="function")return h;let e=h;return t=>s(t.value,e)}var se=class extends Y{constructor(e){super(e);u(this,"_next");u(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}},Ie=class extends Z{constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(this,"_head");u(this,"_tail");u(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 se}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;n++)t=t.next;return t.value}getNodeAt(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e;n++)t=t.next;return t}getNode(e){if(e===void 0)return;if(this.isNode(e)){let i=e,r=this.head;for(;r;){if(r===i)return i;r=r.next}let o=d=>this._equals(d.value,i.value);for(r=this.head;r;){if(o(r))return r;r=r.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),r=i.next;return n.prev=i,n.next=r,i.next=n,r.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 r of this)e.call(t,r,i++,this)&&n.push(r);return n}mapSame(e,t){let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen}),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],L(_({},t!=null?t:{}),{maxLen:this._maxLen})),r=0;for(let o of this)i.push(e.call(n,o,r++,this));return i}_ensureNode(e){return this.isNode(e)?e:new se(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 oe=class{constructor(s,e,t){u(this,"key");u(this,"value");u(this,"forward");this.key=s,this.value=e,this.forward=new Array(t)}},Ce=class{constructor(s=[],e){u(this,"_head",new oe(void 0,void 0,this.maxLevel));u(this,"_level",0);u(this,"_maxLevel",16);u(this,"_probability",.5);if(e){let{maxLevel:t,probability:n}=e;typeof t=="number"&&(this._maxLevel=t),typeof n=="number"&&(this._probability=n)}if(s)for(let[t,n]of s)this.add(t,n)}get head(){return this._head}get level(){return this._level}get maxLevel(){return this._maxLevel}get probability(){return this._probability}get first(){let s=this.head.forward[0];return s?s.value:void 0}get last(){let s=this.head;for(let e=this.level-1;e>=0;e--)for(;s.forward[e];)s=s.forward[e];return s.value}add(s,e){let t=new oe(s,e,this._randomLevel()),n=new Array(this.maxLevel).fill(this.head),i=this.head;for(let r=this.level-1;r>=0;r--){for(;i.forward[r]&&i.forward[r].key<s;)i=i.forward[r];n[r]=i}for(let r=0;r<t.forward.length;r++)t.forward[r]=n[r].forward[r],n[r].forward[r]=t;t.forward[0]||(this._level=Math.max(this.level,t.forward.length))}get(s){let e=this.head;for(let t=this.level-1;t>=0;t--)for(;e.forward[t]&&e.forward[t].key<s;)e=e.forward[t];if(e=e.forward[0],e&&e.key===s)return e.value}has(s){return this.get(s)!==void 0}delete(s){let e=new Array(this.maxLevel).fill(this.head),t=this.head;for(let n=this.level-1;n>=0;n--){for(;t.forward[n]&&t.forward[n].key<s;)t=t.forward[n];e[n]=t}if(t=t.forward[0],t&&t.key===s){for(let n=0;n<this.level&&e[n].forward[n]===t;n++)e[n].forward[n]=t.forward[n];for(;this.level>0&&!this.head.forward[this.level-1];)this._level--;return!0}return!1}higher(s){let e=this.head;for(let n=this.level-1;n>=0;n--)for(;e.forward[n]&&e.forward[n].key<=s;)e=e.forward[n];let t=e.forward[0];return t?t.value:void 0}lower(s){let e=this.head,t;for(let n=this.level-1;n>=0;n--){for(;e.forward[n]&&e.forward[n].key<s;)e=e.forward[n];e.key<s&&(t=e)}return t?t.value:void 0}_randomLevel(){let s=1;for(;Math.random()<this.probability&&s<this.maxLevel;)s++;return s}};var Se=class extends B{constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(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 r of this)e.call(t,r,i,this)&&n.push(r),i++;return n}mapSame(e,t){let n=this._createInstance({toElementFn:this.toElementFn}),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],_({},t!=null?t:{})),r=0;for(let o of this)i.push(n===void 0?e(o,r,this):e.call(n,o,r,this)),r++;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 x=class h extends P{constructor(e=[],t){super(t);u(this,"_elements",[]);u(this,"_offset",0);u(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 h(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,r=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(r),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 r of this)e.call(t,r,i,this)&&n.push(r),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}),r=0;for(let a of this)i.push(n===void 0?e(a,r++,this):e.call(n,a,r++,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 r=0;for(let d of this){let a=t===void 0?e(d,r++,this):e.call(t,d,r++,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)}},Fe=class extends re{clone(){let s=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});for(let e of this)s.push(e);return s}};var Ae=class extends P{constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(this,"_bucketSize",4096);u(this,"_bucketFirst",0);u(this,"_firstInBucket",0);u(this,"_bucketLast",0);u(this,"_lastInBucket",0);u(this,"_bucketCount",0);u(this,"_buckets",[]);u(this,"_length",0);if(t){let{bucketSize:r}=t;typeof r=="number"&&(this._bucketSize=r)}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=ce(n,this._bucketSize)||1;for(let r=0;r<this._bucketCount;++r)this._buckets.push(new Array(this._bucketSize));let i=ce(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 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,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,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){S(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(S(e,0,i),e===0)for(;n--;)this.unshift(t);else if(e===this._length)for(;n--;)this.push(t);else{let r=[];for(let o=e;o<this._length;++o){let d=this.at(o);d!==void 0&&r.push(d)}this.cut(e-1,!0);for(let o=0;o<n;++o)this.push(t);for(let o=0;o<r.length;++o)this.push(r[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 r=this.at(i);r!==void 0&&n.push(r)}return n}}splice(e,t=this._length-e,...n){S(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 r=[];for(let o=e+t;o<this._length;o++){let d=this.at(o);d!==void 0&&r.push(d)}this.cut(e-1,!0);for(let o of n)this.push(o);for(let o of r)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 r=this.at(i);r!==void 0&&n.push(r)}return n}}deleteAt(e){S(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:r}=this._getBucketAndPosition(e);t=this._buckets[i][r];for(let o=e;o<n;o++){let{bucketIndex:d,indexInBucket:a}=this._getBucketAndPosition(o),{bucketIndex:l,indexInBucket:f}=this._getBucketAndPosition(o+1);this._buckets[d][a]=this._buckets[l][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 r=this.at(n);this._equals(r,e)||(this.setAt(i,r),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(r){r.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}shrinkToFit(){if(this._length===0)return;let e=[];if(this._bucketFirst!==this._bucketLast){if(this._bucketFirst<this._bucketLast)for(let t=this._bucketFirst;t<=this._bucketLast;++t)e.push(this._buckets[t]);else{for(let t=this._bucketFirst;t<this._bucketCount;++t)e.push(this._buckets[t]);for(let t=0;t<=this._bucketLast;++t)e.push(this._buckets[t])}this._bucketFirst=0,this._bucketLast=e.length-1,this._buckets=e}}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 r of this)e.call(t,r,i,this)&&n.push(r),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 r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],L(_({},t!=null?t:{}),{bucketSize:this._bucketSize,maxLen:this._maxLen})),r=0;for(let o of this){let d=n===void 0?e(o,r,this):e.call(n,o,r,this);i.push(d),r++}return i}_setBucketSize(e){this._bucketSize=e}*_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 O=class h extends B{constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(this,"_elements",[]);u(this,"_DEFAULT_COMPARATOR",(e,t)=>{if(typeof e=="object"||typeof t=="object")throw TypeError("When comparing object types, define a custom comparator in options.");return e>t?1:e<t?-1:0});u(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 h(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 r=2*i+1,o=r+1;i<this.size&&(e==="IN"?(n(r),t.push(this.elements[i]),n(o)):e==="PRE"?(t.push(this.elements[i]),n(r),n(o)):e==="POST"&&(n(r),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 r of this)(t===void 0?e(r,i++,this):e.call(t,r,i++,this))?n.add(r):i++;return n}map(e,t,n){let l=t!=null?t:{},{comparator:i,toElementFn:r}=l,o=rt(l,["comparator","toElementFn"]);if(!i)throw new TypeError("Heap.map requires options.comparator for EM");let d=this._createLike([],L(_({},o),{comparator:i,toElementFn:r})),a=0;for(let f of this){let c=n===void 0?e(f,a++,this):e.call(n,f,a++,this);d.add(c)}return d}mapSame(e,t){let n=this._createInstance(),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,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,r=i+1,o=this.elements[i];if(r<this.elements.length&&this.comparator(o,this.elements[r])>0&&(i=r,o=this.elements[r]),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)}},_e=class{constructor(s,e=0){u(this,"element");u(this,"degree");u(this,"left");u(this,"right");u(this,"child");u(this,"parent");u(this,"marked");this.element=s,this.degree=e,this.marked=!1}},De=class{constructor(s){u(this,"_root");u(this,"_size",0);u(this,"_min");u(this,"_comparator");if(this.clear(),this._comparator=s||this._defaultComparator,typeof this.comparator!="function")throw new Error("FibonacciHeap: comparator must be a function.")}get root(){return this._root}get size(){return this._size}get min(){return this._min}get comparator(){return this._comparator}clear(){this._root=void 0,this._min=void 0,this._size=0}add(s){return this.push(s),!0}push(s){let e=this._createNode(s);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(s){let e=[];if(!s)return e;let t=s,n=!1;for(;!(t===s&&n);)t===s&&(n=!0),e.push(t),t=t.right;return e}mergeWithChild(s,e){s.child?(e.right=s.child.right,e.left=s.child,s.child.right.left=e,s.child.right=e):s.child=e}poll(){return this.pop()}pop(){if(this._size===0)return;let s=this.min;if(s.child){let e=this.consumeLinkedList(s.child);for(let t of e)this.mergeWithRoot(t),t.parent=void 0}return this.removeFromRoot(s),s===s.right?(this._min=void 0,this._root=void 0):(this._min=s.right,this._consolidate()),this._size--,s.element}merge(s){if(s.size!==0){if(this.root&&s.root){let e=this.root,t=s.root,n=e.right,i=t.left;e.right=t,t.left=e,n.left=i,i.right=n}else!this.root&&s.root&&(this._root=s.root);(!this.min||s.min&&this.comparator(s.min.element,this.min.element)<0)&&(this._min=s.min),this._size+=s.size,s.clear()}}_createNode(s){return new _e(s)}isEmpty(){return this._size===0}_defaultComparator(s,e){return s<e?-1:s>e?1:0}mergeWithRoot(s){this.root?(s.right=this.root.right,s.left=this.root,this.root.right.left=s,this.root.right=s):this._root=s}removeFromRoot(s){this.root===s&&(this._root=s.right),s.left&&(s.left.right=s.right),s.right&&(s.right.left=s.left)}_link(s,e){this.removeFromRoot(s),s.left=s,s.right=s,this.mergeWithChild(e,s),e.degree++,s.parent=e}_consolidate(){let s=new Array(this._size),e=this.consumeLinkedList(this.root),t,n,i,r;for(let o of e){for(t=o,i=t.degree;s[i];)n=s[i],this.comparator(t.element,n.element)>0&&(r=t,t=n,n=r),this._link(n,t),s[i]=void 0,i++;s[i]=t}for(let o=0;o<s.length;o++)s[o]&&(!this.min||this.comparator(s[o].element,this.min.element)<=0)&&(this._min=s[o])}};var Pe=class extends O{constructor(s=[],e){super(s,_({comparator:(t,n)=>{if(typeof t=="object"||typeof n=="object")throw TypeError("When comparing object types, a custom comparator must be defined in the constructor's options parameter.");return t<n?1:t>n?-1:0}},e))}};var je=class extends O{constructor(s=[],e){super(s,e)}};var M=class{constructor(s,e){u(this,"key");u(this,"value");this.key=s,this.value=e}},j=class{constructor(s,e){u(this,"value");u(this,"weight");u(this,"_hashCode");this.weight=s!==void 0?s:1,this.value=e,this._hashCode=xe()}get hashCode(){return this._hashCode}},G=class extends w{constructor(e){super();u(this,"_options",{defaultEdgeWeight:1});u(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 M)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 j)return this._addEdge(e);if(t instanceof M||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof M&&(e=e.key),t instanceof M&&(t=t.key);let r=this.createEdge(e,t,n,i);return this._addEdge(r)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(e,t,n){let i=this.getEdge(e,t);return i?(i.weight=n,!0):!1}getAllPathsBetween(e,t,n=1e3){let i=[],r=this._getVertex(e),o=this._getVertex(t);if(!(r&&o))return[];let d=[];for(d.push({vertex:r,path:[r]});d.length>0;){let{vertex:a,path:l}=d.pop();if(a===o&&(i.push(l),i.length>=n))return i;let f=this.getNeighbors(a);for(let c of f)if(!l.includes(c)){let V=[...l,c];d.push({vertex:c,path:V})}}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),r=Number.MAX_SAFE_INTEGER;for(let o of i)r=Math.min(this.getPathSumWeight(o),r);return r}else{let i=this._getVertex(t),r=this._getVertex(e);if(!(r&&i))return;let o=new Map,d=new x([r]);o.set(r,!0);let a=0;for(;d.length>0;){for(let l=0,f=d.length;l<f;l++){let c=d.shift();if(c===i)return a;if(c!==void 0){let V=this.getNeighbors(c);for(let p of V)o.has(p)||(o.set(p,!0),d.push(p))}}a++}return}}getMinPathBetween(e,t,n,i=!1){var r,o;if(n===void 0&&(n=!1),n)if(i){let d=this.getAllPathsBetween(e,t,1e4),a=Number.MAX_SAFE_INTEGER,l=-1,f=0;for(let c of d){let V=this.getPathSumWeight(c);V<a&&(a=V,l=f),f++}return d[l]||void 0}else return(o=(r=this.dijkstra(e,t,!0,!0))==null?void 0:r.minPath)!=null?o:[];else{let d=[],a=this._getVertex(e),l=this._getVertex(t);if(!(a&&l))return[];let f=(c,V,p,b)=>{if(p.add(c),c===V){d=[a,...b];return}let y=this.getNeighbors(c);for(let T of y)p.has(T)||(b.push(T),f(T,V,p,b),b.pop());p.delete(c)};return f(a,l,new Set,[]),d}}dijkstraWithoutHeap(e,t=void 0,n=!1,i=!1){let r=Number.MAX_SAFE_INTEGER,o,d=[],a=[],l=this._vertexMap,f=new Map,c=new Set,V=new Map,p=this._getVertex(e),b=t?this._getVertex(t):void 0;if(!p)return;for(let m of l){let g=m[1];g instanceof M&&f.set(g,Number.MAX_SAFE_INTEGER)}f.set(p,0),V.set(p,void 0);let y=()=>{let m=Number.MAX_SAFE_INTEGER,g;for(let[K,E]of f)c.has(K)||E<m&&(m=E,g=K);return g},T=m=>{for(let g of l){let K=g[1];if(K instanceof M){let E=[K],R=V.get(K);for(;R;)E.push(R),R=V.get(R);let N=E.reverse();g[1]===m&&(d=N),a.push(N)}}};for(let m=1;m<l.size;m++){let g=y();if(g){if(c.add(g),b&&b===g)return n&&(r=f.get(b)||Number.MAX_SAFE_INTEGER),i&&T(b),{distMap:f,preMap:V,seen:c,paths:a,minDist:r,minPath:d};let K=this.getNeighbors(g);for(let E of K)if(!c.has(E)){let R=this.getEdge(g,E);if(R){let N=f.get(g),k=f.get(E);N!==void 0&&k!==void 0&&R.weight+N<k&&(f.set(E,R.weight+N),V.set(E,g))}}}}return n&&f.forEach((m,g)=>{g!==p&&m<r&&(r=m,i&&(o=g))}),i&&T(o),{distMap:f,preMap:V,seen:c,paths:a,minDist:r,minPath:d}}dijkstra(e,t=void 0,n=!1,i=!1){var m;let r=Number.MAX_SAFE_INTEGER,o,d=[],a=[],l=this._vertexMap,f=new Map,c=new Set,V=new Map,p=this._getVertex(e),b=t?this._getVertex(t):void 0;if(!p)return;for(let g of l){let K=g[1];K instanceof M&&f.set(K,Number.MAX_SAFE_INTEGER)}let y=new O([],{comparator:(g,K)=>g.key-K.key});y.add({key:0,value:p}),f.set(p,0),V.set(p,void 0);let T=g=>{for(let K of l){let E=K[1];if(E instanceof M){let R=[E],N=V.get(E);for(;N;)R.push(N),N=V.get(N);let k=R.reverse();K[1]===g&&(d=k),a.push(k)}}};for(;y.size>0;){let g=y.poll(),K=g==null?void 0:g.key,E=g==null?void 0:g.value;if(K!==void 0&&E){if(c.add(E),b&&b===E)return n&&(r=f.get(b)||Number.MAX_SAFE_INTEGER),i&&T(b),{distMap:f,preMap:V,seen:c,paths:a,minDist:r,minPath:d};let R=this.getNeighbors(E);for(let N of R)if(!c.has(N)){let k=(m=this.getEdge(E,N))==null?void 0:m.weight;if(typeof k=="number"){let U=f.get(N);U!==void 0&&K+k<U&&(y.add({key:K+k,value:N}),V.set(N,E),f.set(N,K+k))}}}}return n&&f.forEach((g,K)=>{K!==p&&g<r&&(r=g,i&&(o=K))}),i&&T(o),{distMap:f,preMap:V,seen:c,paths:a,minDist:r,minPath:d}}bellmanFord(e,t,n,i){n===void 0&&(n=!1),i===void 0&&(i=!1);let r=this._getVertex(e),o=[],d=new Map,a=new Map,l=Number.MAX_SAFE_INTEGER,f=[],c;if(t&&(c=!1),!r)return{hasNegativeCycle:c,distMap:d,preMap:a,paths:o,min:l,minPath:f};let V=this._vertexMap,p=V.size,b=this.edgeSet(),y=b.length;this._vertexMap.forEach(m=>{d.set(m,Number.MAX_SAFE_INTEGER)}),d.set(r,0);for(let m=1;m<p;++m)for(let g=0;g<y;++g){let K=this.getEndsOfEdge(b[g]);if(K){let[E,R]=K,N=b[g].weight,k=d.get(E),U=d.get(R);k!==void 0&&U!==void 0&&d.get(E)!==Number.MAX_SAFE_INTEGER&&k+N<U&&(d.set(R,k+N),i&&a.set(R,E))}}let T;if(n&&d.forEach((m,g)=>{g!==r&&m<l&&(l=m,i&&(T=g))}),i)for(let m of V){let g=m[1];if(g instanceof M){let K=[g],E=a.get(g);for(;E!==void 0;)K.push(E),E=a.get(E);let R=K.reverse();m[1]===T&&(f=R),o.push(R)}}for(let m=0;m<y;++m){let g=this.getEndsOfEdge(b[m]);if(g){let[K]=g,E=b[m].weight,R=d.get(K);R&&R!==Number.MAX_SAFE_INTEGER&&R+E<R&&(c=!0)}}return{hasNegativeCycle:c,distMap:d,preMap:a,paths:o,min:l,minPath:f}}floydWarshall(){var r;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]=((r=this.getEdge(e[o][1],e[d][1]))==null?void 0:r.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 l of this.getNeighbors(o))l&&i(l,d,a);a.delete(o),d.pop()};for(let o of this.vertexMap.values())i(o,[],n);let r=new Map;for(let o of t){let d=[...o].sort().toString();r.has(d)||r.set(d,o)}return[...r].map(o=>o[1])}filter(e,t){let n=[],i=0;for(let[r,o]of this)e.call(t,r,o,i,this)&&n.push([r,o]),i++;return this._createLike(n,this._snapshotOptions())}filterEntries(e,t){let n=[],i=0;for(let[r,o]of this)e.call(t,r,o,i,this)&&n.push([r,o]),i++;return n}map(e,t){let n=[],i=0;for(let[r,o]of this)n.push(e.call(t,r,o,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[r,o]of e)n.addVertex(r,o);else for(let[r,o]of this)n.addVertex(r,o);let i=this.edgeSet();for(let r of i){let o=this.getEndsOfEdge(r);if(!o)continue;let[d,a]=o,l=d.key,f=a.key,c=n.hasVertex?n.hasVertex(l):!1,V=n.hasVertex?n.hasVertex(f):!1;if(c&&V){let p=r.weight,b=r.value,y=n.createEdge(l,f,p,b);n._addEdge(y)}}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 M?e.key:e}};var W=class extends M{constructor(s,e){super(s,e)}},te=class extends j{constructor(e,t,n,i){super(n,i);u(this,"src");u(this,"dest");this.src=e,this.dest=t}},de=class h extends G{constructor(e){super(e);u(this,"_outEdgeMap",new Map);u(this,"_inEdgeMap",new Map)}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 h({vertexValueInitializer:n=>n});for(let n of e)t.addVertex(n);return t}static fromEntries(e){let t=new h;for(let[n,i]of e)t.addVertex(n,i);return t}createVertex(e,t){return new W(e,t)}createEdge(e,t,n,i){var r;return new te(e,t,(r=n!=null?n:this.options.defaultEdgeWeight)!=null?r:1,i)}getEdge(e,t){let n=[];if(e!==void 0&&t!==void 0){let i=this._getVertex(e),r=this._getVertex(t);if(i&&r){let o=this._outEdgeMap.get(i);o&&(n=o.filter(d=>d.dest===r.key))}}return n[0]||void 0}deleteEdgeSrcToDest(e,t){let n=this._getVertex(e),i=this._getVertex(t),r;if(!n||!i)return;let o=this._outEdgeMap.get(n);o&&C(o,a=>a.dest===i.key);let d=this._inEdgeMap.get(i);return d&&(r=C(d,a=>a.src===n.key)[0]||void 0),r}deleteEdge(e,t){let n,i,r;if(this.isVertexKey(e))if(this.isVertexKey(t))i=this._getVertex(e),r=this._getVertex(t);else return;else i=this._getVertex(e.src),r=this._getVertex(e.dest);if(i&&r){let o=this._outEdgeMap.get(i);o&&o.length>0&&C(o,a=>a.src===i.key&&a.dest===(r==null?void 0:r.key));let d=this._inEdgeMap.get(r);d&&d.length>0&&(n=C(d,a=>a.src===i.key&&a.dest===r.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 r of i)this.deleteEdgeSrcToDest(n,r);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),r=this.deleteEdgeSrcToDest(t,e);i&&n.push(i),r&&n.push(r)}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 r=this.getEdgeDest(i);r&&t.push(r)}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,r=o=>{t.set(o,1);let d=this.getDestinations(o);for(let a of d){let l=t.get(a);l===0?r(a):l===1&&(i=!0)}t.set(o,2),n.push(o)};for(let o of this.vertexMap)t.get(o[1])===0&&r(o[1]);if(!i)return e==="key"&&(n=n.map(o=>o instanceof W?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 r of i){let o=this._getVertex(r.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,r=[],o=new Set,d=a=>{e.set(a,i),t.set(a,i),i++,r.push(a),o.add(a);let l=this.getNeighbors(a);for(let f of l)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=r.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 r=this._inEdgeMap.get(n);return r?r.push(e):this._inEdgeMap.set(n,[e]),!0}else return!1}};var ge=class extends M{constructor(s,e){super(s,e)}},be=class extends j{constructor(e,t,n,i){super(n,i);u(this,"endpoints");this.endpoints=[e,t]}},He=class h extends G{constructor(e){super(e);u(this,"_edgeMap");this._edgeMap=new Map}get edgeMap(){return this._edgeMap}set edgeMap(e){this._edgeMap=e}static fromKeys(e){let t=new h({vertexValueInitializer:n=>n});for(let n of e)t.addVertex(n);return t}static fromEntries(e){let t=new h;for(let[n,i]of e)t.addVertex(n,i);return t}createVertex(e,t){return new ge(e,t)}createEdge(e,t,n,i){var r;return new be(e,t,(r=n!=null?n:this.options.defaultEdgeWeight)!=null?r:1,i)}getEdge(e,t){var i;let n=[];if(e!==void 0&&t!==void 0){let r=this._getVertex(e),o=this._getVertex(t);r&&o&&(n=(i=this._edgeMap.get(r))==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 r=this._edgeMap.get(n),o;r&&(o=C(r,a=>a.endpoints.includes(i.key))[0]||void 0);let d=this._edgeMap.get(i);return d&&C(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(r=>{let o=this._edgeMap.get(r);if(o){let d=o.filter(a=>!a.endpoints.includes(t));this._edgeMap.set(r,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 r of i){let o=this._getVertex(r.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=[],r=0,o=(d,a)=>{e.set(d,r),t.set(d,r),r++;let l=this.getNeighbors(d),f=0;for(let c of l)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 V=this.getEdge(d,c);V&&n.push(V)}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}}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 me=class extends W{constructor(e,t,n,i){super(e,t);u(this,"lat");u(this,"long");this.lat=n,this.long=i}},Te=class extends te{constructor(s,e,t,n){super(s,e,t,n)}},ze=class h extends de{constructor(e,t){super();u(this,"_originCoord",[0,0]);u(this,"_bottomRight");this._originCoord=e,this._bottomRight=t}get originCoord(){return this._originCoord}get bottomRight(){return this._bottomRight}createVertex(e,t,n=this.originCoord[0],i=this.originCoord[1]){return new me(e,t,n,i)}createEdge(e,t,n,i){return new Te(e,t,n,i)}clone(){return super.clone()}_snapshotOptions(){return L(_({},super._snapshotOptions()),{originCoord:this.originCoord,bottomRight:this.bottomRight})}_createInstance(e){let{originCoord:t,bottomRight:n}=e||{},i=t!=null?t:this.originCoord,r=n!=null?n:this.bottomRight;return new h(i,r)}};var Ue=(e=>(e[e.VISIT=0]="VISIT",e[e.PROCESS=1]="PROCESS",e))(Ue||{}),H=class{constructor(s,e,t=!0,n=!0){this.low=s;this.high=e;this.includeLow=t;this.includeHigh=n;if(!(I(s)&&I(e)))throw new RangeError("low or high is not comparable");if(s>e)throw new RangeError("low must be less than or equal to high")}isInRange(s,e){let t=this.includeLow?e(s,this.low)>=0:e(s,this.low)>0,n=this.includeHigh?e(s,this.high)<=0:e(s,this.high)<0;return t&&n}};var z=class{constructor(s,e){u(this,"key");u(this,"value");u(this,"parent");u(this,"_left");u(this,"_right");u(this,"_height",0);u(this,"_color","BLACK");u(this,"_count",1);this.key=s,this.value=e}get left(){return this._left}set left(s){s&&(s.parent=this),this._left=s}get right(){return this._right}set right(s){s&&(s.parent=this),this._right=s}get height(){return this._height}set height(s){this._height=s}get color(){return this._color}set color(s){this._color=s}get count(){return this._count}set count(s){this._count=s}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"}},ae=class extends w{constructor(e=[],t){super();u(this,"iterationType","ITERATIVE");u(this,"_isMapMode",!0);u(this,"_isDuplicate",!1);u(this,"_store",new Map);u(this,"_root");u(this,"_size",0);u(this,"_NIL",new z(NaN));u(this,"_toEntryFn");u(this,"_DEFAULT_NODE_CALLBACK",e=>e?e.key:void 0);if(t){let{iterationType:n,toEntryFn:i,isMapMode:r,isDuplicate:o}=t;if(n&&(this.iterationType=n),r!==void 0&&(this._isMapMode=r),o!==void 0&&(this._isDuplicate=o),typeof i=="function")this._toEntryFn=i;else if(i)throw TypeError("toEntryFn must be a function type")}e&&this.addMany(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 z(e,this._isMapMode?void 0: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 z}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 H}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:I(e)}add(e,t){let[n,i]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(n===void 0)return!1;if(!this._root)return this._setRoot(n),this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size=1,!0;let r=new x([this._root]),o;for(;r.length>0;){let d=r.shift();if(d){if(!this._isDuplicate&&n!==null&&d.key===n.key)return this._replaceNode(d,n),this._isMapMode&&this._setValue(d.key,i),!0;o===void 0&&(d.left===void 0||d.right===void 0)&&(o=d),d.left!==null&&d.left&&r.push(d.left),d.right!==null&&d.right&&r.push(d.right)}}return o?(o.left===void 0?o.left=n:o.right===void 0&&(o.right=n),this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size++,!0):!1}addMany(e,t){let n=[],i;t&&(i=t[Symbol.iterator]());for(let r of e){let o;if(i){let d=i.next();d.done||(o=d.value)}this.isRaw(r)&&(r=this._toEntryFn(r)),n.push(this.add(r,o))}return n}merge(e){this.addMany(e,[])}refill(e,t){this.clear(),this.addMany(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,r,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),a&&(a.right===d?a.right=d.left:a.left=d.left,r=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),r=i}else this._setRoot(n.right),n.right=void 0;return this._size=this._size-1,t.push({deleted:o,needBalanced:r}),this._isMapMode&&o&&this._store.delete(o.key),t}search(e,t=!1,n=this._DEFAULT_NODE_CALLBACK,i=this._root,r=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(r==="RECURSIVE"){let a=l=>{o(l)&&(d.push(n(l)),t)||!this.isRealNode(l.left)&&!this.isRealNode(l.right)||(this.isRealNode(l.left)&&a(l.left),this.isRealNode(l.right)&&a(l.right))};a(i)}else{let a=[i];for(;a.length>0;){let l=a.pop();if(this.isRealNode(l)){if(o(l)&&(d.push(n(l)),t))return d;this.isRealNode(l.left)&&a.push(l.left),this.isRealNode(l.right)&&a.push(l.right)}}}return d}getNodes(e,t=!1,n=this._root,i=this.iterationType){return this.search(e,t,r=>r,n,i)}getNode(e,t=this._root,n=this.iterationType){return this.search(e,!0,i=>i,t,n)[0]}get(e,t=this._root,n=this.iterationType){var i;if(this._isMapMode){let r=this._extractKey(e);return r==null?void 0:this._store.get(r)}return(i=this.getNode(e,t,n))==null?void 0:i.value}has(e,t=this._root,n=this.iterationType){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,l)=>{if(!this.isRealNode(d))return!0;let f=Number(d.key);return f<=a||f>=l?!1:i(d.left,a,f)&&i(d.right,f,l)},r=i(n,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),o=i(n,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);return r||o}else{let i=(d=!1)=>{let a=[],l=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&&l>=c||d&&l<=c)return!1;l=c,f=f.right}return!0},r=i(!1),o=i(!0);return r||o}}getDepth(e,t=this._root){let n=this.ensureNode(e),i=this.ensureNode(t),r=0;for(;n!=null&&n.parent;){if(n===i)return r;r++,n=n.parent}return r}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 r=n(i.left),o=n(i.right);return Math.max(r,o)+1};return n(e)}else{let n=[{node:e,depth:0}],i=0;for(;n.length>0;){let{node:r,depth:o}=n.pop();this.isRealNode(r.left)&&n.push({node:r.left,depth:o+1}),this.isRealNode(r.right)&&n.push({node:r.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 r=n(i.left),o=n(i.right);return Math.min(r,o)+1};return n(e)}else{let n=[],i=e,r=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)||r===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)),r=i,i=null}}else i=i.right;return o.get(e)}}getPathToRoot(e,t=this._DEFAULT_NODE_CALLBACK,n=!1){let i=[],r=this.ensureNode(e);if(!r)return i;for(;r.parent;)i.push(t(r)),r=r.parent;return i.push(t(r)),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 r=o=>{let{left:d}=o;return this.isRealNode(d)?r(d):o};return e(r(i))}else{let r=Ve(o=>{let{left:d}=o;return this.isRealNode(d)?pe(()=>r(d)):o});return e(r(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=r=>{let{right:o}=r;return this.isRealNode(o)?i(o):r};return e(i(t))}else{let i=Ve(r=>{let{right:o}=r;return this.isRealNode(o)?pe(()=>i(o)):r});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,r=this.iterationType,o=!1){return i=this.ensureNode(i),i?this._dfs(e,t,n,i,r,o):[]}bfs(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType,i=!1){if(t=this.ensureNode(t),!t)return[];let r=[];if(n==="RECURSIVE"){let o=new x([t]),d=a=>{if(o.length===0)return;let l=o.shift();r.push(e(l)),i?(l&&this.isRealNodeOrNull(l.left)&&o.push(l.left),l&&this.isRealNodeOrNull(l.right)&&o.push(l.right)):(this.isRealNode(l.left)&&o.push(l.left),this.isRealNode(l.right)&&o.push(l.right)),d(a+1)};d(0)}else{let o=new x([t]);for(;o.length>0;){let d=o.length;for(let a=0;a<d;a++){let l=o.shift();r.push(e(l)),i?(l&&this.isRealNodeOrNull(l.left)&&o.push(l.left),l&&this.isRealNodeOrNull(l.right)&&o.push(l.right)):(this.isRealNode(l.left)&&o.push(l.left),this.isRealNode(l.right)&&o.push(l.right))}}}return r}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 r=o=>{this.isLeaf(o)&&i.push(e(o)),!(!this.isRealNode(o.left)&&!this.isRealNode(o.right))&&(this.isRealNode(o.left)&&r(o.left),this.isRealNode(o.right)&&r(o.right))};r(t)}else{let r=new x([t]);for(;r.length>0;){let o=r.shift();this.isRealNode(o)&&(this.isLeaf(o)&&i.push(e(o)),this.isRealNode(o.left)&&r.push(o.left),this.isRealNode(o.right)&&r.push(o.right))}}return i}listLevels(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType,i=!1){t=this.ensureNode(t);let r=[];if(!t)return r;if(n==="RECURSIVE"){let o=(d,a)=>{r[a]||(r[a]=[]),r[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,l]=d;r[l]||(r[l]=[]),r[l].push(e(a)),i?(a&&this.isRealNodeOrNull(a.right)&&o.push([a.right,l+1]),a&&this.isRealNodeOrNull(a.left)&&o.push([a.left,l+1])):(a&&a.right&&o.push([a.right,l+1]),a&&a.left&&o.push([a.left,l+1]))}}return r}morris(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=this._root){if(n=this.ensureNode(n),!n)return[];let i=[],r=n,o=a=>{let l=null,f=null;for(;a;)f=a.right,a.right=l,l=a,a=f;return l},d=a=>{let l=o(a),f=l;for(;f;)i.push(e(f)),f=f.right;o(l)};switch(t){case"IN":for(;r;){if(r.left){let a=this.getPredecessor(r);if(a.right)a.right=null;else{a.right=r,r=r.left;continue}}i.push(e(r)),r=r.right}break;case"PRE":for(;r;){if(r.left){let a=this.getPredecessor(r);if(a.right)a.right=null;else{a.right=r,i.push(e(r)),r=r.left;continue}}else i.push(e(r));r=r.right}break;case"POST":for(;r;){if(r.left){let a=this.getPredecessor(r);if(a.right===null){a.right=r,r=r.left;continue}else a.right=null,d(r.left)}r=r.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[r,o]of this)e.call(t,r,o,i++,this)&&n.add([r,o]);return n}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,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 ae=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var et=Object.getOwnPropertyNames;var tt=Object.prototype.hasOwnProperty;var nt=(h,s,e)=>s in h?ae(h,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[s]=e;var it=(h,s)=>{for(var e in s)ae(h,e,{get:s[e],enumerable:!0})},rt=(h,s,e,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of et(s))!tt.call(h,n)&&n!==e&&ae(h,n,{get:()=>s[n],enumerable:!(t=Ze(s,n))||t.enumerable});return h};var st=h=>rt(ae({},"__esModule",{value:!0}),h);var u=(h,s,e)=>nt(h,typeof s!="symbol"?s+"":s,e);var ht={};it(ht,{AVLTree:()=>G,AVLTreeCounter:()=>He,AVLTreeCounterNode:()=>de,AVLTreeMultiMap:()=>De,AVLTreeMultiMapNode:()=>ge,AVLTreeNode:()=>C,AbstractEdge:()=>A,AbstractGraph:()=>z,AbstractVertex:()=>k,BST:()=>q,BSTNode:()=>w,BinaryIndexedTree:()=>Fe,BinaryTree:()=>se,BinaryTreeNode:()=>P,Character:()=>me,DFSOperation:()=>Se,Deque:()=>Be,DirectedEdge:()=>Y,DirectedGraph:()=>re,DirectedVertex:()=>U,DoublyLinkedList:()=>ke,DoublyLinkedListNode:()=>ne,FibonacciHeap:()=>Oe,FibonacciHeapNode:()=>fe,HashMap:()=>Re,Heap:()=>x,IterableElementBase:()=>L,IterableEntryBase:()=>B,LinkedHashMap:()=>Ne,LinkedListQueue:()=>xe,MapEdge:()=>_e,MapGraph:()=>Ce,MapVertex:()=>Ve,Matrix:()=>qe,MaxHeap:()=>ve,MaxPriorityQueue:()=>Ue,MinHeap:()=>Ie,MinPriorityQueue:()=>ze,Navigator:()=>Ge,PriorityQueue:()=>Q,Queue:()=>M,Range:()=>D,RedBlackTree:()=>W,RedBlackTreeNode:()=>S,SegmentTree:()=>Ae,SegmentTreeNode:()=>Z,SinglyLinkedList:()=>te,SinglyLinkedListNode:()=>J,SkipList:()=>Me,SkipListNode:()=>ie,Stack:()=>Le,TreeCounter:()=>je,TreeCounterNode:()=>oe,TreeMultiMap:()=>Pe,TreeMultiMapNode:()=>be,TreeNode:()=>Qe,Trie:()=>We,TrieNode:()=>ee,UndirectedEdge:()=>pe,UndirectedGraph:()=>we,UndirectedVertex:()=>ce,arrayRemove:()=>v,asyncTrampoline:()=>Je,calcMinUnitsRequired:()=>le,getMSB:()=>Ke,isComparable:()=>O,isTrampolineThunk:()=>Ee,isWeakKey:()=>H,makeAsyncTrampoline:()=>at,makeTrampoline:()=>he,makeTrampolineThunk:()=>ue,rangeCheck:()=>I,roundFixed:()=>dt,throwRangeError:()=>ot,toBinaryString:()=>lt,trampoline:()=>$e,uuidV4:()=>ye});var B=class{*[Symbol.iterator](...s){yield*this._getIterator(...s)}*entries(){for(let s of this)yield s}*keys(){for(let s of this)yield s[0]}*values(){for(let s of this)yield s[1]}every(s,e){let t=0;for(let n of this)if(!s.call(e,n[0],n[1],t++,this))return!1;return!0}some(s,e){let t=0;for(let n of this)if(s.call(e,n[0],n[1],t++,this))return!0;return!1}forEach(s,e){let t=0;for(let n of this){let[i,r]=n;s.call(e,i,r,t++,this)}}find(s,e){let t=0;for(let n of this){let[i,r]=n;if(s.call(e,i,r,t++,this))return n}}has(s){for(let e of this){let[t]=e;if(t===s)return!0}return!1}hasValue(s){for(let[,e]of this)if(e===s)return!0;return!1}get(s){for(let e of this){let[t,n]=e;if(t===s)return n}}reduce(s,e){let t=e,n=0;for(let i of this){let[r,o]=i;t=s(t,o,r,n++,this)}return t}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var L=class{constructor(s){u(this,"_toElementFn");if(s){let{toElementFn:e}=s;if(typeof e=="function")this._toElementFn=e;else if(e)throw new TypeError("toElementFn must be a function type")}}get toElementFn(){return this._toElementFn}*[Symbol.iterator](...s){yield*this._getIterator(...s)}*values(){for(let s of this)yield s}every(s,e){let t=0;for(let n of this)if(e===void 0){if(!s(n,t++,this))return!1}else if(!s.call(e,n,t++,this))return!1;return!0}some(s,e){let t=0;for(let n of this)if(e===void 0){if(s(n,t++,this))return!0}else if(s.call(e,n,t++,this))return!0;return!1}forEach(s,e){let t=0;for(let n of this)e===void 0?s(n,t++,this):s.call(e,n,t++,this)}find(s,e){let t=0;for(let n of this)if(e===void 0){if(s(n,t++,this))return n}else if(s.call(e,n,t++,this))return n}has(s){for(let e of this)if(e===s)return!0;return!1}reduce(s,e){let t=0,n=this[Symbol.iterator](),i;if(arguments.length>=2)i=e;else{let r=n.next();if(r.done)throw new TypeError("Reduce of empty structure with no initial value");i=r.value,t=1}for(let r of n)i=s(i,r,t++,this);return i}toArray(){return[...this]}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var ye=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(h){let s=Math.random()*16|0;return(h=="x"?s:s&3|8).toString(16)})},v=function(h,s){let e=-1,t=h?h.length:0,n=[];for(;++e<t;){let i=h[e];s(i,e,h)&&(n.push(i),Array.prototype.splice.call(h,e--,1),t--)}return n},Ke=h=>h<=0?0:1<<31-Math.clz32(h),I=(h,s,e,t="Index out of bounds.")=>{if(h<s||h>e)throw new RangeError(t)},ot=(h="The value is off-limits.")=>{throw new RangeError(h)},H=h=>{let s=typeof h;return s==="object"&&h!==null||s==="function"},le=(h,s)=>Math.floor((h+s-1)/s),dt=(h,s=10)=>{let e=Math.pow(10,s);return Math.round(h*e)/e};function Te(h){let s=typeof h;return s==="number"?!0:s==="bigint"||s==="string"||s==="boolean"}function Xe(h){if(typeof h.valueOf=="function"){let s=h.valueOf();if(s!==h){if(Te(s))return s;if(typeof s=="object"&&s!==null)return Xe(s)}}if(typeof h.toString=="function"){let s=h.toString();if(s!=="[object Object]")return s}return null}function O(h,s=!1){if(h==null)return!1;if(Te(h))return!0;if(typeof h!="object")return!1;if(h instanceof Date||s)return!0;let e=Xe(h);return e==null?!1:Te(e)}var ue=h=>({isThunk:!0,fn:h}),Ee=h=>typeof h=="object"&&h!==null&&"isThunk"in h&&h.isThunk;function $e(h){let s=h;for(;Ee(s);)s=s.fn();return s}function he(h){return(...s)=>$e(h(...s))}async function Je(h){let s=await h;for(;Ee(s);)s=await s.fn();return s}function at(h){return async(...s)=>Je(h(...s))}function lt(h,s=32){let e=(h>>>0).toString(2);return e=e.padStart(s,"0"),e}var Re=class extends B{constructor(e=[],t){super();u(this,"_store",{});u(this,"_objMap",new Map);u(this,"_toEntryFn");u(this,"_size",0);u(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,r;this.isEntry(n)?[i,r]=n:this._toEntryFn&&([i,r]=this._toEntryFn(n)),i!==void 0&&r!==void 0&&t.push(this.set(i,r))}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[r,o]of this)n.set(r,e.call(t,r,o,i++,this));return n}filter(e,t){let n=this._createLike(),i=0;for(let[r,o]of this)e.call(t,r,o,i++,this)&&n.set(r,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}},Ne=class extends B{constructor(e=[],t){super();u(this,"_sentinel");u(this,"_hashFn",e=>String(e));u(this,"_objHashFn",e=>e);u(this,"_noObjMap",{});u(this,"_objMap",new WeakMap);u(this,"_head");u(this,"_tail");u(this,"_toEntryFn",e=>{if(this.isEntry(e))return e;throw new Error("If `entryOrRawElements` does not adhere to [key,value], provide `options.toEntryFn` to transform raw records.")});u(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:r}=t;n&&(this._hashFn=n),i&&(this._objHashFn=i),r&&(this._toEntryFn=r)}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(H(e)){let r=this._objHashFn(e);n=this.objMap.get(r),!n&&i?(n={key:r,value:t,prev:this.tail,next:this._sentinel},this.objMap.set(r,n)):n&&(n.value=t)}else{let r=this._hashFn(e);n=this.noObjMap[r],!n&&i?this.noObjMap[r]=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,r;this.isEntry(n)?[i,r]=n:this._toEntryFn&&([i,r]=this._toEntryFn(n)),i!==void 0&&r!==void 0&&t.push(this.set(i,r))}return t}has(e){if(H(e)){let n=this._objHashFn(e);return this.objMap.has(n)}return this._hashFn(e)in this.noObjMap}get(e){if(H(e)){let i=this._objHashFn(e),r=this.objMap.get(i);return r?r.value:void 0}let t=this._hashFn(e),n=this.noObjMap[t];return n?n.value:void 0}at(e){I(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return t.value}delete(e){let t;if(H(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)){if(H(i.key))this._objMap.delete(i.key);else{let r=this._hashFn(i.key);delete this._noObjMap[r]}return this._deleteNode(i)}}return!1}deleteAt(e){I(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[r,o]of this)e.call(t,r,o,i,this)&&n.set(r,o),i++;return n}map(e,t){let n=this._createLike(),i=0;for(let[r,o]of this){let[d,a]=e.call(t,r,o,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{prev:t,next:n}=e;return t.next=n,n.prev=t,e===this.head&&(this._head=n),e===this.tail&&(this._tail=t),this._size-=1,!0}_createLike(e=[],t){let n=this.constructor;return new n(e,t)}};var X=class{constructor(s){u(this,"_value");u(this,"_next");this._value=s,this._next=void 0}get value(){return this._value}set value(s){this._value=s}get next(){return this._next}set next(s){this._next=s}},F=class h extends L{constructor(e){super(e);u(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 h?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 r=0;r<t;r++){let o=this.deleteAt(e);o!==void 0&&i.push(o)}for(let r=0;r<n.length;r++)this.addAt(e+r,n[r]);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}},$=class extends F{constructor(s){if(super(s),s){let{maxLen:e}=s;typeof e=="number"&&e>0&&e%1===0&&(this._maxLen=e)}}indexOf(s,e=0){let t=this._getIterator(),n=t.next(),i=0;for(;i<e;)n=t.next(),i++;for(;!n.done;){if(n.value===s)return i;n=t.next(),i++}return-1}lastIndexOf(s,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===s)return i;n=t.next(),i--}return-1}concat(...s){let e=this.clone();for(let t of s)t instanceof F?e.pushMany(t):e.push(t);return e}slice(s=0,e=this.length){s=s<0?this.length+s:s,e=e<0?this.length+e:e;let t=this._createInstance(),n=this._getIterator(),i=n.next(),r=0;for(;r<s;)i=n.next(),r++;for(let o=s;o<e;o++)t.push(i.value),i=n.next();return t}splice(s,e=0,...t){let n=this._createInstance();s=s<0?this.length+s:s,s=Math.max(0,Math.min(s,this.length)),e=Math.max(0,e);let i=0,r,o,d=this._getNodeIterator();for(let a of d){if(i===s){r=a;break}o=a,i++}for(let a=0;a<e&&r;a++){n.push(r.value);let l=r.next;this.delete(r),r=l}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(s,e){let t=e!=null?e:0,n=this.length-1;for(let i of this._getReverseIterator())t=s(t,i,n--,this);return t}};var J=class extends X{constructor(e){super(e);u(this,"_next");this._value=e,this._next=void 0}get next(){return this._next}set next(e){this._next=e}},te=class extends ${constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(this,"_head");u(this,"_tail");u(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(){if(!this.head)return;if(this.head===this.tail){let n=this.head.value;return this._head=void 0,this._tail=void 0,this._length--,n}let e=this.head;for(;e.next!==this.tail;)e=e.next;let t=this.tail.value;return e.next=void 0,this._tail=e,this._length--,t}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;n++)t=t.next;return t.value}isNode(e){return e instanceof J}getNodeAt(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e;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),r=this._ensureNode(t);return i?(i.next=r,r.next=n,this._length++):(r.next=this._head,this._head=r,this._tail||(this._tail=r),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(),r=e===0?void 0:this.getNodeAt(e-1),o=r?r.next:this.head,d=0;for(;d<t&&o;)i.push(o.value),o=o.next,d++;let a=o;if(r?r.next=a:this._head=a,a||(this._tail=r),n.length>0){let l,f;for(let c of n){let V=this._ensureNode(c);l||(l=V),f&&(f.next=V),f=V}r?r.next=l:this._head=l,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=ut(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 r of this)e.call(t,r,i++,this)&&n.push(r);return n}mapSame(e,t){let n=this._createInstance(),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{},maxLen:this._maxLen}),r=0;for(let o of this)i.push(e.call(n,o,r++,this));return i}createNode(e){return new J(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 ut(h,s){if(h instanceof J)return t=>t===h;if(typeof h=="function")return h;let e=h;return t=>s(t.value,e)}var ne=class extends X{constructor(e){super(e);u(this,"_next");u(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}},ke=class extends ${constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(this,"_head");u(this,"_tail");u(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 ne}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;n++)t=t.next;return t.value}getNodeAt(e){if(e<0||e>=this._length)return;let t=this.head;for(let n=0;n<e;n++)t=t.next;return t}getNode(e){if(e===void 0)return;if(this.isNode(e)){let i=e,r=this.head;for(;r;){if(r===i)return i;r=r.next}let o=d=>this._equals(d.value,i.value);for(r=this.head;r;){if(o(r))return r;r=r.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),r=i.next;return n.prev=i,n.next=r,i.next=n,r.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 r of this)e.call(t,r,i++,this)&&n.push(r);return n}mapSame(e,t){let n=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen}),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{},maxLen:this._maxLen}),r=0;for(let o of this)i.push(e.call(n,o,r++,this));return i}_ensureNode(e){return this.isNode(e)?e:new ne(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 ie=class{constructor(s,e,t){u(this,"key");u(this,"value");u(this,"forward");this.key=s,this.value=e,this.forward=new Array(t)}},Me=class{constructor(s=[],e){u(this,"_head",new ie(void 0,void 0,this.maxLevel));u(this,"_level",0);u(this,"_maxLevel",16);u(this,"_probability",.5);if(e){let{maxLevel:t,probability:n}=e;typeof t=="number"&&(this._maxLevel=t),typeof n=="number"&&(this._probability=n)}if(s)for(let[t,n]of s)this.add(t,n)}get head(){return this._head}get level(){return this._level}get maxLevel(){return this._maxLevel}get probability(){return this._probability}get first(){let s=this.head.forward[0];return s?s.value:void 0}get last(){let s=this.head;for(let e=this.level-1;e>=0;e--)for(;s.forward[e];)s=s.forward[e];return s.value}add(s,e){let t=new ie(s,e,this._randomLevel()),n=new Array(this.maxLevel).fill(this.head),i=this.head;for(let r=this.level-1;r>=0;r--){for(;i.forward[r]&&i.forward[r].key<s;)i=i.forward[r];n[r]=i}for(let r=0;r<t.forward.length;r++)t.forward[r]=n[r].forward[r],n[r].forward[r]=t;t.forward[0]||(this._level=Math.max(this.level,t.forward.length))}get(s){let e=this.head;for(let t=this.level-1;t>=0;t--)for(;e.forward[t]&&e.forward[t].key<s;)e=e.forward[t];if(e=e.forward[0],e&&e.key===s)return e.value}has(s){return this.get(s)!==void 0}delete(s){let e=new Array(this.maxLevel).fill(this.head),t=this.head;for(let n=this.level-1;n>=0;n--){for(;t.forward[n]&&t.forward[n].key<s;)t=t.forward[n];e[n]=t}if(t=t.forward[0],t&&t.key===s){for(let n=0;n<this.level&&e[n].forward[n]===t;n++)e[n].forward[n]=t.forward[n];for(;this.level>0&&!this.head.forward[this.level-1];)this._level--;return!0}return!1}higher(s){let e=this.head;for(let n=this.level-1;n>=0;n--)for(;e.forward[n]&&e.forward[n].key<=s;)e=e.forward[n];let t=e.forward[0];return t?t.value:void 0}lower(s){let e=this.head,t;for(let n=this.level-1;n>=0;n--){for(;e.forward[n]&&e.forward[n].key<s;)e=e.forward[n];e.key<s&&(t=e)}return t?t.value:void 0}_randomLevel(){let s=1;for(;Math.random()<this.probability&&s<this.maxLevel;)s++;return s}};var Le=class extends L{constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(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 r of this)e.call(t,r,i,this)&&n.push(r),i++;return n}mapSame(e,t){let n=this._createInstance({toElementFn:this.toElementFn}),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{}}),r=0;for(let o of this)i.push(n===void 0?e(o,r,this):e.call(n,o,r,this)),r++;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 M=class h extends F{constructor(e=[],t){super(t);u(this,"_elements",[]);u(this,"_offset",0);u(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 h(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,r=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(r),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 r of this)e.call(t,r,i,this)&&n.push(r),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}),r=0;for(let a of this)i.push(n===void 0?e(a,r++,this):e.call(n,a,r++,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 r=0;for(let d of this){let a=t===void 0?e(d,r++,this):e.call(t,d,r++,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)}},xe=class extends te{clone(){let s=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen});for(let e of this)s.push(e);return s}};var Be=class extends F{constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(this,"_bucketSize",4096);u(this,"_bucketFirst",0);u(this,"_firstInBucket",0);u(this,"_bucketLast",0);u(this,"_lastInBucket",0);u(this,"_bucketCount",0);u(this,"_buckets",[]);u(this,"_length",0);if(t){let{bucketSize:r}=t;typeof r=="number"&&(this._bucketSize=r)}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 r=0;r<this._bucketCount;++r)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 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,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,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){I(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(I(e,0,i),e===0)for(;n--;)this.unshift(t);else if(e===this._length)for(;n--;)this.push(t);else{let r=[];for(let o=e;o<this._length;++o){let d=this.at(o);d!==void 0&&r.push(d)}this.cut(e-1,!0);for(let o=0;o<n;++o)this.push(t);for(let o=0;o<r.length;++o)this.push(r[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 r=this.at(i);r!==void 0&&n.push(r)}return n}}splice(e,t=this._length-e,...n){I(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 r=[];for(let o=e+t;o<this._length;o++){let d=this.at(o);d!==void 0&&r.push(d)}this.cut(e-1,!0);for(let o of n)this.push(o);for(let o of r)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 r=this.at(i);r!==void 0&&n.push(r)}return n}}deleteAt(e){I(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:r}=this._getBucketAndPosition(e);t=this._buckets[i][r];for(let o=e;o<n;o++){let{bucketIndex:d,indexInBucket:a}=this._getBucketAndPosition(o),{bucketIndex:l,indexInBucket:f}=this._getBucketAndPosition(o+1);this._buckets[d][a]=this._buckets[l][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 r=this.at(n);this._equals(r,e)||(this.setAt(i,r),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(r){r.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}shrinkToFit(){if(this._length===0)return;let e=[];if(this._bucketFirst!==this._bucketLast){if(this._bucketFirst<this._bucketLast)for(let t=this._bucketFirst;t<=this._bucketLast;++t)e.push(this._buckets[t]);else{for(let t=this._bucketFirst;t<this._bucketCount;++t)e.push(this._buckets[t]);for(let t=0;t<=this._bucketLast;++t)e.push(this._buckets[t])}this._bucketFirst=0,this._bucketLast=e.length-1,this._buckets=e}}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 r of this)e.call(t,r,i,this)&&n.push(r),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 r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,i++,this);n.push(o)}return n}map(e,t,n){let i=this._createLike([],{...t!=null?t:{},bucketSize:this._bucketSize,maxLen:this._maxLen}),r=0;for(let o of this){let d=n===void 0?e(o,r,this):e.call(n,o,r,this);i.push(d),r++}return i}_setBucketSize(e){this._bucketSize=e}*_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 x=class h extends L{constructor(e=[],t){super(t);u(this,"_equals",Object.is);u(this,"_elements",[]);u(this,"_DEFAULT_COMPARATOR",(e,t)=>{if(typeof e=="object"||typeof t=="object")throw TypeError("When comparing object types, define a custom comparator in options.");return e>t?1:e<t?-1:0});u(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 h(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 r=2*i+1,o=r+1;i<this.size&&(e==="IN"?(n(r),t.push(this.elements[i]),n(o)):e==="PRE"?(t.push(this.elements[i]),n(r),n(o)):e==="POST"&&(n(r),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 r of this)(t===void 0?e(r,i++,this):e.call(t,r,i++,this))?n.add(r):i++;return n}map(e,t,n){let{comparator:i,toElementFn:r,...o}=t!=null?t:{};if(!i)throw new TypeError("Heap.map requires options.comparator for EM");let d=this._createLike([],{...o,comparator:i,toElementFn:r}),a=0;for(let l of this){let f=n===void 0?e(l,a++,this):e.call(n,l,a++,this);d.add(f)}return d}mapSame(e,t){let n=this._createInstance(),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,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,r=i+1,o=this.elements[i];if(r<this.elements.length&&this.comparator(o,this.elements[r])>0&&(i=r,o=this.elements[r]),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)}},fe=class{constructor(s,e=0){u(this,"element");u(this,"degree");u(this,"left");u(this,"right");u(this,"child");u(this,"parent");u(this,"marked");this.element=s,this.degree=e,this.marked=!1}},Oe=class{constructor(s){u(this,"_root");u(this,"_size",0);u(this,"_min");u(this,"_comparator");if(this.clear(),this._comparator=s||this._defaultComparator,typeof this.comparator!="function")throw new Error("FibonacciHeap: comparator must be a function.")}get root(){return this._root}get size(){return this._size}get min(){return this._min}get comparator(){return this._comparator}clear(){this._root=void 0,this._min=void 0,this._size=0}add(s){return this.push(s),!0}push(s){let e=this.createNode(s);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(s){let e=[];if(!s)return e;let t=s,n=!1;for(;!(t===s&&n);)t===s&&(n=!0),e.push(t),t=t.right;return e}mergeWithChild(s,e){s.child?(e.right=s.child.right,e.left=s.child,s.child.right.left=e,s.child.right=e):s.child=e}poll(){return this.pop()}pop(){if(this._size===0)return;let s=this.min;if(s.child){let e=this.consumeLinkedList(s.child);for(let t of e)this.mergeWithRoot(t),t.parent=void 0}return this.removeFromRoot(s),s===s.right?(this._min=void 0,this._root=void 0):(this._min=s.right,this._consolidate()),this._size--,s.element}merge(s){if(s.size!==0){if(this.root&&s.root){let e=this.root,t=s.root,n=e.right,i=t.left;e.right=t,t.left=e,n.left=i,i.right=n}else!this.root&&s.root&&(this._root=s.root);(!this.min||s.min&&this.comparator(s.min.element,this.min.element)<0)&&(this._min=s.min),this._size+=s.size,s.clear()}}createNode(s){return new fe(s)}isEmpty(){return this._size===0}_defaultComparator(s,e){return s<e?-1:s>e?1:0}mergeWithRoot(s){this.root?(s.right=this.root.right,s.left=this.root,this.root.right.left=s,this.root.right=s):this._root=s}removeFromRoot(s){this.root===s&&(this._root=s.right),s.left&&(s.left.right=s.right),s.right&&(s.right.left=s.left)}_link(s,e){this.removeFromRoot(s),s.left=s,s.right=s,this.mergeWithChild(e,s),e.degree++,s.parent=e}_consolidate(){let s=new Array(this._size),e=this.consumeLinkedList(this.root),t,n,i,r;for(let o of e){for(t=o,i=t.degree;s[i];)n=s[i],this.comparator(t.element,n.element)>0&&(r=t,t=n,n=r),this._link(n,t),s[i]=void 0,i++;s[i]=t}for(let o=0;o<s.length;o++)s[o]&&(!this.min||this.comparator(s[o].element,this.min.element)<=0)&&(this._min=s[o])}};var ve=class extends x{constructor(s=[],e){super(s,{comparator:(t,n)=>{if(typeof t=="object"||typeof n=="object")throw TypeError("When comparing object types, a custom comparator must be defined in the constructor's options parameter.");return t<n?1:t>n?-1:0},...e})}};var Ie=class extends x{constructor(s=[],e){super(s,e)}};var k=class{constructor(s,e){u(this,"key");u(this,"value");this.key=s,this.value=e}},A=class{constructor(s,e){u(this,"value");u(this,"weight");u(this,"_hashCode");this.weight=s!==void 0?s:1,this.value=e,this._hashCode=ye()}get hashCode(){return this._hashCode}},z=class extends B{constructor(e){super();u(this,"_options",{defaultEdgeWeight:1});u(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 k)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 A)return this._addEdge(e);if(t instanceof k||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof k&&(e=e.key),t instanceof k&&(t=t.key);let r=this.createEdge(e,t,n,i);return this._addEdge(r)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(e,t,n){let i=this.getEdge(e,t);return i?(i.weight=n,!0):!1}getAllPathsBetween(e,t,n=1e3){let i=[],r=this._getVertex(e),o=this._getVertex(t);if(!(r&&o))return[];let d=[];for(d.push({vertex:r,path:[r]});d.length>0;){let{vertex:a,path:l}=d.pop();if(a===o&&(i.push(l),i.length>=n))return i;let f=this.getNeighbors(a);for(let c of f)if(!l.includes(c)){let V=[...l,c];d.push({vertex:c,path:V})}}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),r=Number.MAX_SAFE_INTEGER;for(let o of i)r=Math.min(this.getPathSumWeight(o),r);return r}else{let i=this._getVertex(t),r=this._getVertex(e);if(!(r&&i))return;let o=new Map,d=new M([r]);o.set(r,!0);let a=0;for(;d.length>0;){for(let l=0,f=d.length;l<f;l++){let c=d.shift();if(c===i)return a;if(c!==void 0){let V=this.getNeighbors(c);for(let p of V)o.has(p)||(o.set(p,!0),d.push(p))}}a++}return}}getMinPathBetween(e,t,n,i=!1){var r,o;if(n===void 0&&(n=!1),n)if(i){let d=this.getAllPathsBetween(e,t,1e4),a=Number.MAX_SAFE_INTEGER,l=-1,f=0;for(let c of d){let V=this.getPathSumWeight(c);V<a&&(a=V,l=f),f++}return d[l]||void 0}else return(o=(r=this.dijkstra(e,t,!0,!0))==null?void 0:r.minPath)!=null?o:[];else{let d=[],a=this._getVertex(e),l=this._getVertex(t);if(!(a&&l))return[];let f=(c,V,p,g)=>{if(p.add(c),c===V){d=[a,...g];return}let T=this.getNeighbors(c);for(let m of T)p.has(m)||(g.push(m),f(m,V,p,g),g.pop());p.delete(c)};return f(a,l,new Set,[]),d}}dijkstraWithoutHeap(e,t=void 0,n=!1,i=!1){let r=Number.MAX_SAFE_INTEGER,o,d=[],a=[],l=this._vertexMap,f=new Map,c=new Set,V=new Map,p=this._getVertex(e),g=t?this._getVertex(t):void 0;if(!p)return;for(let b of l){let _=b[1];_ instanceof k&&f.set(_,Number.MAX_SAFE_INTEGER)}f.set(p,0),V.set(p,void 0);let T=()=>{let b=Number.MAX_SAFE_INTEGER,_;for(let[y,K]of f)c.has(y)||K<b&&(b=K,_=y);return _},m=b=>{for(let _ of l){let y=_[1];if(y instanceof k){let K=[y],E=V.get(y);for(;E;)K.push(E),E=V.get(E);let R=K.reverse();_[1]===b&&(d=R),a.push(R)}}};for(let b=1;b<l.size;b++){let _=T();if(_){if(c.add(_),g&&g===_)return n&&(r=f.get(g)||Number.MAX_SAFE_INTEGER),i&&m(g),{distMap:f,preMap:V,seen:c,paths:a,minDist:r,minPath:d};let y=this.getNeighbors(_);for(let K of y)if(!c.has(K)){let E=this.getEdge(_,K);if(E){let R=f.get(_),N=f.get(K);R!==void 0&&N!==void 0&&E.weight+R<N&&(f.set(K,E.weight+R),V.set(K,_))}}}}return n&&f.forEach((b,_)=>{_!==p&&b<r&&(r=b,i&&(o=_))}),i&&m(o),{distMap:f,preMap:V,seen:c,paths:a,minDist:r,minPath:d}}dijkstra(e,t=void 0,n=!1,i=!1){var b;let r=Number.MAX_SAFE_INTEGER,o,d=[],a=[],l=this._vertexMap,f=new Map,c=new Set,V=new Map,p=this._getVertex(e),g=t?this._getVertex(t):void 0;if(!p)return;for(let _ of l){let y=_[1];y instanceof k&&f.set(y,Number.MAX_SAFE_INTEGER)}let T=new x([],{comparator:(_,y)=>_.key-y.key});T.add({key:0,value:p}),f.set(p,0),V.set(p,void 0);let m=_=>{for(let y of l){let K=y[1];if(K instanceof k){let E=[K],R=V.get(K);for(;R;)E.push(R),R=V.get(R);let N=E.reverse();y[1]===_&&(d=N),a.push(N)}}};for(;T.size>0;){let _=T.poll(),y=_==null?void 0:_.key,K=_==null?void 0:_.value;if(y!==void 0&&K){if(c.add(K),g&&g===K)return n&&(r=f.get(g)||Number.MAX_SAFE_INTEGER),i&&m(g),{distMap:f,preMap:V,seen:c,paths:a,minDist:r,minPath:d};let E=this.getNeighbors(K);for(let R of E)if(!c.has(R)){let N=(b=this.getEdge(K,R))==null?void 0:b.weight;if(typeof N=="number"){let j=f.get(R);j!==void 0&&y+N<j&&(T.add({key:y+N,value:R}),V.set(R,K),f.set(R,y+N))}}}}return n&&f.forEach((_,y)=>{y!==p&&_<r&&(r=_,i&&(o=y))}),i&&m(o),{distMap:f,preMap:V,seen:c,paths:a,minDist:r,minPath:d}}bellmanFord(e,t,n,i){n===void 0&&(n=!1),i===void 0&&(i=!1);let r=this._getVertex(e),o=[],d=new Map,a=new Map,l=Number.MAX_SAFE_INTEGER,f=[],c;if(t&&(c=!1),!r)return{hasNegativeCycle:c,distMap:d,preMap:a,paths:o,min:l,minPath:f};let V=this._vertexMap,p=V.size,g=this.edgeSet(),T=g.length;this._vertexMap.forEach(b=>{d.set(b,Number.MAX_SAFE_INTEGER)}),d.set(r,0);for(let b=1;b<p;++b)for(let _=0;_<T;++_){let y=this.getEndsOfEdge(g[_]);if(y){let[K,E]=y,R=g[_].weight,N=d.get(K),j=d.get(E);N!==void 0&&j!==void 0&&d.get(K)!==Number.MAX_SAFE_INTEGER&&N+R<j&&(d.set(E,N+R),i&&a.set(E,K))}}let m;if(n&&d.forEach((b,_)=>{_!==r&&b<l&&(l=b,i&&(m=_))}),i)for(let b of V){let _=b[1];if(_ instanceof k){let y=[_],K=a.get(_);for(;K!==void 0;)y.push(K),K=a.get(K);let E=y.reverse();b[1]===m&&(f=E),o.push(E)}}for(let b=0;b<T;++b){let _=this.getEndsOfEdge(g[b]);if(_){let[y]=_,K=g[b].weight,E=d.get(y);E&&E!==Number.MAX_SAFE_INTEGER&&E+K<E&&(c=!0)}}return{hasNegativeCycle:c,distMap:d,preMap:a,paths:o,min:l,minPath:f}}floydWarshall(){var r;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]=((r=this.getEdge(e[o][1],e[d][1]))==null?void 0:r.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 l of this.getNeighbors(o))l&&i(l,d,a);a.delete(o),d.pop()};for(let o of this.vertexMap.values())i(o,[],n);let r=new Map;for(let o of t){let d=[...o].sort().toString();r.has(d)||r.set(d,o)}return[...r].map(o=>o[1])}filter(e,t){let n=[],i=0;for(let[r,o]of this)e.call(t,r,o,i,this)&&n.push([r,o]),i++;return this._createLike(n,this._snapshotOptions())}filterEntries(e,t){let n=[],i=0;for(let[r,o]of this)e.call(t,r,o,i,this)&&n.push([r,o]),i++;return n}map(e,t){let n=[],i=0;for(let[r,o]of this)n.push(e.call(t,r,o,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[r,o]of e)n.addVertex(r,o);else for(let[r,o]of this)n.addVertex(r,o);let i=this.edgeSet();for(let r of i){let o=this.getEndsOfEdge(r);if(!o)continue;let[d,a]=o,l=d.key,f=a.key,c=n.hasVertex?n.hasVertex(l):!1,V=n.hasVertex?n.hasVertex(f):!1;if(c&&V){let p=r.weight,g=r.value,T=n.createEdge(l,f,p,g);n._addEdge(T)}}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 k?e.key:e}};var U=class extends k{constructor(s,e){super(s,e)}},Y=class extends A{constructor(e,t,n,i){super(n,i);u(this,"src");u(this,"dest");this.src=e,this.dest=t}},re=class h extends z{constructor(e){super(e);u(this,"_outEdgeMap",new Map);u(this,"_inEdgeMap",new Map)}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 h({vertexValueInitializer:n=>n});for(let n of e)t.addVertex(n);return t}static fromEntries(e){let t=new h;for(let[n,i]of e)t.addVertex(n,i);return t}createVertex(e,t){return new U(e,t)}createEdge(e,t,n,i){var r;return new Y(e,t,(r=n!=null?n:this.options.defaultEdgeWeight)!=null?r:1,i)}getEdge(e,t){let n=[];if(e!==void 0&&t!==void 0){let i=this._getVertex(e),r=this._getVertex(t);if(i&&r){let o=this._outEdgeMap.get(i);o&&(n=o.filter(d=>d.dest===r.key))}}return n[0]||void 0}deleteEdgeSrcToDest(e,t){let n=this._getVertex(e),i=this._getVertex(t),r;if(!n||!i)return;let o=this._outEdgeMap.get(n);o&&v(o,a=>a.dest===i.key);let d=this._inEdgeMap.get(i);return d&&(r=v(d,a=>a.src===n.key)[0]||void 0),r}deleteEdge(e,t){let n,i,r;if(this.isVertexKey(e))if(this.isVertexKey(t))i=this._getVertex(e),r=this._getVertex(t);else return;else i=this._getVertex(e.src),r=this._getVertex(e.dest);if(i&&r){let o=this._outEdgeMap.get(i);o&&o.length>0&&v(o,a=>a.src===i.key&&a.dest===(r==null?void 0:r.key));let d=this._inEdgeMap.get(r);d&&d.length>0&&(n=v(d,a=>a.src===i.key&&a.dest===r.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 r of i)this.deleteEdgeSrcToDest(n,r);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),r=this.deleteEdgeSrcToDest(t,e);i&&n.push(i),r&&n.push(r)}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 r=this.getEdgeDest(i);r&&t.push(r)}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,r=o=>{t.set(o,1);let d=this.getDestinations(o);for(let a of d){let l=t.get(a);l===0?r(a):l===1&&(i=!0)}t.set(o,2),n.push(o)};for(let o of this.vertexMap)t.get(o[1])===0&&r(o[1]);if(!i)return e==="key"&&(n=n.map(o=>o instanceof U?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 r of i){let o=this._getVertex(r.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,r=[],o=new Set,d=a=>{e.set(a,i),t.set(a,i),i++,r.push(a),o.add(a);let l=this.getNeighbors(a);for(let f of l)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=r.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 r=this._inEdgeMap.get(n);return r?r.push(e):this._inEdgeMap.set(n,[e]),!0}else return!1}};var ce=class extends k{constructor(s,e){super(s,e)}},pe=class extends A{constructor(e,t,n,i){super(n,i);u(this,"endpoints");this.endpoints=[e,t]}},we=class h extends z{constructor(e){super(e);u(this,"_edgeMap");this._edgeMap=new Map}get edgeMap(){return this._edgeMap}set edgeMap(e){this._edgeMap=e}static fromKeys(e){let t=new h({vertexValueInitializer:n=>n});for(let n of e)t.addVertex(n);return t}static fromEntries(e){let t=new h;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 r;return new pe(e,t,(r=n!=null?n:this.options.defaultEdgeWeight)!=null?r:1,i)}getEdge(e,t){var i;let n=[];if(e!==void 0&&t!==void 0){let r=this._getVertex(e),o=this._getVertex(t);r&&o&&(n=(i=this._edgeMap.get(r))==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 r=this._edgeMap.get(n),o;r&&(o=v(r,a=>a.endpoints.includes(i.key))[0]||void 0);let d=this._edgeMap.get(i);return d&&v(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(r=>{let o=this._edgeMap.get(r);if(o){let d=o.filter(a=>!a.endpoints.includes(t));this._edgeMap.set(r,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 r of i){let o=this._getVertex(r.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=[],r=0,o=(d,a)=>{e.set(d,r),t.set(d,r),r++;let l=this.getNeighbors(d),f=0;for(let c of l)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 V=this.getEdge(d,c);V&&n.push(V)}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}}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 Ve=class extends U{constructor(e,t,n,i){super(e,t);u(this,"lat");u(this,"long");this.lat=n,this.long=i}},_e=class extends Y{constructor(s,e,t,n){super(s,e,t,n)}},Ce=class h extends re{constructor(e,t){super();u(this,"_originCoord",[0,0]);u(this,"_bottomRight");this._originCoord=e,this._bottomRight=t}get originCoord(){return this._originCoord}get bottomRight(){return this._bottomRight}createVertex(e,t,n=this.originCoord[0],i=this.originCoord[1]){return new Ve(e,t,n,i)}createEdge(e,t,n,i){return new _e(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,r=n!=null?n:this.bottomRight;return new h(i,r)}};var Se=(e=>(e[e.VISIT=0]="VISIT",e[e.PROCESS=1]="PROCESS",e))(Se||{}),D=class{constructor(s,e,t=!0,n=!0){this.low=s;this.high=e;this.includeLow=t;this.includeHigh=n;if(!(O(s)&&O(e)))throw new RangeError("low or high is not comparable");if(s>e)throw new RangeError("low must be less than or equal to high")}isInRange(s,e){let t=this.includeLow?e(s,this.low)>=0:e(s,this.low)>0,n=this.includeHigh?e(s,this.high)<=0:e(s,this.high)<0;return t&&n}};var P=class{constructor(s,e){u(this,"key");u(this,"value");u(this,"parent");u(this,"_left");u(this,"_right");u(this,"_height",0);u(this,"_color","BLACK");u(this,"_count",1);this.key=s,this.value=e}get left(){return this._left}set left(s){s&&(s.parent=this),this._left=s}get right(){return this._right}set right(s){s&&(s.parent=this),this._right=s}get height(){return this._height}set height(s){this._height=s}get color(){return this._color}set color(s){this._color=s}get count(){return this._count}set count(s){this._count=s}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"}},se=class extends B{constructor(e=[],t){super();u(this,"iterationType","ITERATIVE");u(this,"_isMapMode",!0);u(this,"_isDuplicate",!1);u(this,"_store",new Map);u(this,"_root");u(this,"_size",0);u(this,"_NIL",new P(NaN));u(this,"_toEntryFn");u(this,"_DEFAULT_NODE_CALLBACK",e=>e?e.key:void 0);if(t){let{iterationType:n,toEntryFn:i,isMapMode:r,isDuplicate:o}=t;if(n&&(this.iterationType=n),r!==void 0&&(this._isMapMode=r),o!==void 0&&(this._isDuplicate=o),typeof i=="function")this._toEntryFn=i;else if(i)throw TypeError("toEntryFn must be a function type")}e&&this.addMany(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 P(e,this._isMapMode?void 0: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 P}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 D}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:O(e)}add(e,t){let[n,i]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(n===void 0)return!1;if(!this._root)return this._setRoot(n),this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size=1,!0;let r=new M([this._root]),o;for(;r.length>0;){let d=r.shift();if(d){if(!this._isDuplicate&&n!==null&&d.key===n.key)return this._replaceNode(d,n),this._isMapMode&&this._setValue(d.key,i),!0;o===void 0&&(d.left===void 0||d.right===void 0)&&(o=d),d.left!==null&&d.left&&r.push(d.left),d.right!==null&&d.right&&r.push(d.right)}}return o?(o.left===void 0?o.left=n:o.right===void 0&&(o.right=n),this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size++,!0):!1}addMany(e,t){let n=[],i;t&&(i=t[Symbol.iterator]());for(let r of e){let o;if(i){let d=i.next();d.done||(o=d.value)}this.isRaw(r)&&(r=this._toEntryFn(r)),n.push(this.add(r,o))}return n}merge(e){this.addMany(e,[])}refill(e,t){this.clear(),this.addMany(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,r,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),a&&(a.right===d?a.right=d.left:a.left=d.left,r=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),r=i}else this._setRoot(n.right),n.right=void 0;return this._size=this._size-1,t.push({deleted:o,needBalanced:r}),this._isMapMode&&o&&this._store.delete(o.key),t}search(e,t=!1,n=this._DEFAULT_NODE_CALLBACK,i=this._root,r=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(r==="RECURSIVE"){let a=l=>{o(l)&&(d.push(n(l)),t)||!this.isRealNode(l.left)&&!this.isRealNode(l.right)||(this.isRealNode(l.left)&&a(l.left),this.isRealNode(l.right)&&a(l.right))};a(i)}else{let a=[i];for(;a.length>0;){let l=a.pop();if(this.isRealNode(l)){if(o(l)&&(d.push(n(l)),t))return d;this.isRealNode(l.left)&&a.push(l.left),this.isRealNode(l.right)&&a.push(l.right)}}}return d}getNodes(e,t=!1,n=this._root,i=this.iterationType){return this.search(e,t,r=>r,n,i)}getNode(e,t=this._root,n=this.iterationType){return this.search(e,!0,i=>i,t,n)[0]}get(e,t=this._root,n=this.iterationType){var i;if(this._isMapMode){let r=this._extractKey(e);return r==null?void 0:this._store.get(r)}return(i=this.getNode(e,t,n))==null?void 0:i.value}has(e,t=this._root,n=this.iterationType){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,l)=>{if(!this.isRealNode(d))return!0;let f=Number(d.key);return f<=a||f>=l?!1:i(d.left,a,f)&&i(d.right,f,l)},r=i(n,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),o=i(n,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);return r||o}else{let i=(d=!1)=>{let a=[],l=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&&l>=c||d&&l<=c)return!1;l=c,f=f.right}return!0},r=i(!1),o=i(!0);return r||o}}getDepth(e,t=this._root){let n=this.ensureNode(e),i=this.ensureNode(t),r=0;for(;n!=null&&n.parent;){if(n===i)return r;r++,n=n.parent}return r}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 r=n(i.left),o=n(i.right);return Math.max(r,o)+1};return n(e)}else{let n=[{node:e,depth:0}],i=0;for(;n.length>0;){let{node:r,depth:o}=n.pop();this.isRealNode(r.left)&&n.push({node:r.left,depth:o+1}),this.isRealNode(r.right)&&n.push({node:r.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 r=n(i.left),o=n(i.right);return Math.min(r,o)+1};return n(e)}else{let n=[],i=e,r=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)||r===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)),r=i,i=null}}else i=i.right;return o.get(e)}}getPathToRoot(e,t=this._DEFAULT_NODE_CALLBACK,n=!1){let i=[],r=this.ensureNode(e);if(!r)return i;for(;r.parent;)i.push(t(r)),r=r.parent;return i.push(t(r)),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 r=o=>{let{left:d}=o;return this.isRealNode(d)?r(d):o};return e(r(i))}else{let r=he(o=>{let{left:d}=o;return this.isRealNode(d)?ue(()=>r(d)):o});return e(r(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=r=>{let{right:o}=r;return this.isRealNode(o)?i(o):r};return e(i(t))}else{let i=he(r=>{let{right:o}=r;return this.isRealNode(o)?ue(()=>i(o)):r});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,r=this.iterationType,o=!1){return i=this.ensureNode(i),i?this._dfs(e,t,n,i,r,o):[]}bfs(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType,i=!1){if(t=this.ensureNode(t),!t)return[];let r=[];if(n==="RECURSIVE"){let o=new M([t]),d=a=>{if(o.length===0)return;let l=o.shift();r.push(e(l)),i?(l&&this.isRealNodeOrNull(l.left)&&o.push(l.left),l&&this.isRealNodeOrNull(l.right)&&o.push(l.right)):(this.isRealNode(l.left)&&o.push(l.left),this.isRealNode(l.right)&&o.push(l.right)),d(a+1)};d(0)}else{let o=new M([t]);for(;o.length>0;){let d=o.length;for(let a=0;a<d;a++){let l=o.shift();r.push(e(l)),i?(l&&this.isRealNodeOrNull(l.left)&&o.push(l.left),l&&this.isRealNodeOrNull(l.right)&&o.push(l.right)):(this.isRealNode(l.left)&&o.push(l.left),this.isRealNode(l.right)&&o.push(l.right))}}}return r}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 r=o=>{this.isLeaf(o)&&i.push(e(o)),!(!this.isRealNode(o.left)&&!this.isRealNode(o.right))&&(this.isRealNode(o.left)&&r(o.left),this.isRealNode(o.right)&&r(o.right))};r(t)}else{let r=new M([t]);for(;r.length>0;){let o=r.shift();this.isRealNode(o)&&(this.isLeaf(o)&&i.push(e(o)),this.isRealNode(o.left)&&r.push(o.left),this.isRealNode(o.right)&&r.push(o.right))}}return i}listLevels(e=this._DEFAULT_NODE_CALLBACK,t=this._root,n=this.iterationType,i=!1){t=this.ensureNode(t);let r=[];if(!t)return r;if(n==="RECURSIVE"){let o=(d,a)=>{r[a]||(r[a]=[]),r[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,l]=d;r[l]||(r[l]=[]),r[l].push(e(a)),i?(a&&this.isRealNodeOrNull(a.right)&&o.push([a.right,l+1]),a&&this.isRealNodeOrNull(a.left)&&o.push([a.left,l+1])):(a&&a.right&&o.push([a.right,l+1]),a&&a.left&&o.push([a.left,l+1]))}}return r}morris(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=this._root){if(n=this.ensureNode(n),!n)return[];let i=[],r=n,o=a=>{let l=null,f=null;for(;a;)f=a.right,a.right=l,l=a,a=f;return l},d=a=>{let l=o(a),f=l;for(;f;)i.push(e(f)),f=f.right;o(l)};switch(t){case"IN":for(;r;){if(r.left){let a=this.getPredecessor(r);if(a.right)a.right=null;else{a.right=r,r=r.left;continue}}i.push(e(r)),r=r.right}break;case"PRE":for(;r;){if(r.left){let a=this.getPredecessor(r);if(a.right)a.right=null;else{a.right=r,i.push(e(r)),r=r.left;continue}}else i.push(e(r));r=r.right}break;case"POST":for(;r;){if(r.left){let a=this.getPredecessor(r);if(a.right===null){a.right=r,r=r.left;continue}else a.right=null,d(r.left)}r=r.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[r,o]of this)e.call(t,r,o,i++,this)&&n.add([r,o]);return n}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,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
2
2
  `),n.isShowNull&&(i+=`N for null
3
3
  `),n.isShowRedBlackNIL&&(i+=`S for Sentinel Node(NIL)
4
4
  `),(o=>{let[d]=this._displayAux(o,n),a="";for(let l of d)a+=l+`
5
- `;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,r=this.iterationType,o=!1,d=c=>!!c,a=c=>!!c,l=c=>o?this.isRealNodeOrNull(c):this.isRealNode(c),f=c=>this.isRealNodeOrNull(c)){if(i=this.ensureNode(i),!i)return[];let c=[];if(r==="RECURSIVE"){let V=p=>{if(!l(p))return;let b=()=>{d(p)&&(p==null?void 0:p.left)!==void 0&&V(p==null?void 0:p.left)},y=()=>{a(p)&&(p==null?void 0:p.right)!==void 0&&V(p==null?void 0:p.right)};switch(t){case"IN":if(b(),f(p)&&(c.push(e(p)),n))return;y();break;case"PRE":if(f(p)&&(c.push(e(p)),n))return;b(),y();break;case"POST":if(b(),y(),f(p)&&(c.push(e(p)),n))return;break}};V(i)}else{let V=[{opt:0,node:i}],p=T=>{var m;d(T.node)&&V.push({opt:0,node:(m=T.node)==null?void 0:m.left})},b=T=>{var m;a(T.node)&&V.push({opt:0,node:(m=T.node)==null?void 0:m.right})},y=T=>{l(T.node)&&V.push({opt:1,node:T.node})};for(;V.length>0;){let T=V.pop();if(T!==void 0&&l(T.node))if(T.opt===1){if(f(T.node)&&T.node!==void 0&&(c.push(e(T.node)),n))return c}else switch(t){case"IN":b(T),y(T),p(T);break;case"PRE":b(T),p(T),y(T);break;case"POST":y(T),b(T),p(T);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)&&(this._isMapMode?yield[n.key,this._store.get(n.key)]:yield[n.key,n.value],n=n.right)}}else e.left&&this.isRealNode(e)&&(yield*v(this[Symbol.iterator](e.left))),this._isMapMode?yield[e.key,this._store.get(e.key)]:yield[e.key,e.value],e.right&&this.isRealNode(e)&&(yield*v(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 r=t!=null?t:i;return[this._createNode(n,r),r]}return[this._createNode(e,t),t]}_clone(e){this.bfs(t=>{t===null?e.add(null):this._isMapMode?e.add([t.key,this._store.get(t.key)]):e.add([t.key,t.value])},this._root,this.iterationType,!0),this._isMapMode&&(e._store=this._store)}_displayAux(e,t){let{isShowNull:n,isShowUndefined:i,isShowRedBlackNIL:r}=t,o=[["\u2500"],1,0,0];if(e===null&&!n)return o;if(e===void 0&&!i)return o;if(this.isNIL(e)&&!r)return o;if(e!=null){let a=e.key,l=this.isNIL(e)?"S":String(a),f=l.length;return d(l,f,this._displayAux(e.left,t),this._displayAux(e.right,t))}else{let a=e===void 0?"U":"N",l=a.length;return d(a,l,[[""],1,0,0],[[""],1,0,0])}function d(a,l,f,c){let[V,p,b,y]=f,[T,m,g,K]=c,E=" ".repeat(Math.max(0,y+1))+"_".repeat(Math.max(0,p-y-1))+a+"_".repeat(Math.max(0,K))+" ".repeat(Math.max(0,m-K)),R=(b>0?" ".repeat(y)+"/"+" ".repeat(p-y-1):" ".repeat(p))+" ".repeat(l)+(g>0?" ".repeat(K)+"\\"+" ".repeat(m-K-1):" ".repeat(m)),N=[E,R];for(let k=0;k<Math.max(b,g);k++){let U=k<b?V[k]:" ".repeat(p),at=k<g?T[k]:" ".repeat(m);N.push(U+" ".repeat(l)+at)}return[N,p+l+m,Math.max(b,g)+2,p+Math.floor(l/2)]}}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:n,value:i}=t,r=this._createNode(n,i);return r&&(t.key=e.key,this._isMapMode||(t.value=e.value),e.key=r.key,this._isMapMode||(e.value=r.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){return e==null||t===void 0?!1:this._store.set(e,t)}_clearNodes(){this._setRoot(void 0),this._size=0}_clearValues(){this._store.clear()}};var F=class extends z{constructor(e,t){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right")}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},Q=class extends ae{constructor(e=[],t){super([],t);u(this,"_root");u(this,"_isReverse",!1);u(this,"_comparator",(e,t)=>{if(I(e)&&I(t))return e>t?1:e<t?-1:0;if(this._specifyComparable){let n=this._specifyComparable(e),i=this._specifyComparable(t);return n>i?1:n<i?-1:0}if(typeof e=="object"||typeof t=="object")throw TypeError("When comparing object types, a custom specifyComparable must be defined in the constructor's options.");return 0});u(this,"_specifyComparable");if(t){let{specifyComparable:n,isReverse:i}=t;typeof n=="function"&&(this._specifyComparable=n),i!==void 0&&(this._isReverse=i)}e&&this.addMany(e)}get root(){return this._root}get isReverse(){return this._isReverse}get comparator(){return this._comparator}get specifyComparable(){return this._specifyComparable}_createNode(e,t){return new F(e,this._isMapMode?void 0:t)}ensureNode(e,t=this.iterationType){var n;return(n=super.ensureNode(e,t))!=null?n:void 0}isNode(e){return e instanceof F}isValidKey(e){return I(e,this._specifyComparable!==void 0)}dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=!1,i=this._root,r=this.iterationType){return super.dfs(e,t,n,i,r)}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 i;return(i=this.getNodes(e,!0,t,n)[0])!=null?i:void 0}search(e,t=!1,n=this._DEFAULT_NODE_CALLBACK,i=this._root,r=this.iterationType){if(e===void 0)return[];if(e===null)return[];if(i=this.ensureNode(i),!i)return[];let o,d=this.isRange(e);d?o=f=>f?e.isInRange(f.key,this._comparator):!1:o=this._ensurePredicate(e);let a=f=>{if(!f||!this.isRealNode(f.left))return!1;if(d){let c=e,V=this.isReverse?c.high:c.low,p=this.isReverse?c.includeHigh:c.includeLow;return p&&this._compare(f.key,V)>=0||!p&&this._compare(f.key,V)>0}if(!d&&!this._isPredicate(e)){let c=this._extractKey(e);return c!=null&&this._compare(f.key,c)>0}return!0},l=f=>{if(!f||!this.isRealNode(f.right))return!1;if(d){let c=e,V=this.isReverse?c.low:c.high,p=this.isReverse?c.includeLow:c.includeHigh;return p&&this._compare(f.key,V)<=0||!p&&this._compare(f.key,V)<0}if(!d&&!this._isPredicate(e)){let c=this._extractKey(e);return c!=null&&this._compare(f.key,c)<0}return!0};return super._dfs(n,"IN",t,i,r,!1,a,l,()=>!0,f=>!!f&&o(f))}rangeSearch(e,t=this._DEFAULT_NODE_CALLBACK,n=this._root,i=this.iterationType){let r=e instanceof H?e:new H(e[0],e[1]);return this.search(r,!1,t,n,i)}add(e,t){let[n,i]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(n===void 0)return!1;if(this._root===void 0)return this._setRoot(n),this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size++,!0;let r=this._root;for(;r!==void 0;){if(this._compare(r.key,n.key)===0)return this._replaceNode(r,n),this._isMapMode&&this._setValue(r.key,i),!0;if(this._compare(r.key,n.key)>0){if(r.left===void 0)return r.left=n,this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size++,!0;r.left!==null&&(r=r.left)}else{if(r.right===void 0)return r.right=n,this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size++,!0;r.right!==null&&(r=r.right)}}return!1}addMany(e,t,n=!0,i=this.iterationType){let r=[],o=t==null?void 0:t[Symbol.iterator]();if(!n){for(let V of e){let p=o==null?void 0:o.next().value;this.isRaw(V)&&(V=this._toEntryFn(V)),r.push(this.add(V,p))}return r}let d=[],a=0;for(let V of e)d.push({key:V,value:o==null?void 0:o.next().value,orgIndex:a++});let l=d.sort(({key:V},{key:p})=>{let b,y;return this.isRaw(V)?b=this._toEntryFn(V)[0]:this.isEntry(V)?b=V[0]:this.isRealNode(V)?b=V.key:b=V,this.isRaw(p)?y=this._toEntryFn(p)[0]:this.isEntry(p)?y=p[0]:this.isRealNode(p)?y=p.key:y=p,b!=null&&y!=null?this._compare(b,y):0}),f=V=>{if(V.length===0)return;let p=Math.floor((V.length-1)/2),{key:b,value:y,orgIndex:T}=V[p];if(this.isRaw(b)){let m=this._toEntryFn(b);r[T]=this.add(m)}else r[T]=this.add(b,y);f(V.slice(0,p)),f(V.slice(p+1))};return i==="RECURSIVE"?f(l):(()=>{let p=[[0,l.length-1]];for(;p.length>0;){let b=p.pop();if(!b)continue;let[y,T]=b;if(y>T)continue;let m=y+Math.floor((T-y)/2),{key:g,value:K,orgIndex:E}=l[m];if(this.isRaw(g)){let R=this._toEntryFn(g);r[E]=this.add(R)}else r[E]=this.add(g,K);p.push([m+1,T]),p.push([y,m-1])}})(),r}lesserOrGreaterTraverse(e=this._DEFAULT_NODE_CALLBACK,t=-1,n=this._root,i=this.iterationType){let r=this.ensureNode(n),o=[];if(!this._root||!r)return o;let d=r.key;if(i==="RECURSIVE"){let a=l=>{let f=this._compare(l.key,d);Math.sign(f)==t&&o.push(e(l)),this.isRealNode(l.left)&&a(l.left),this.isRealNode(l.right)&&a(l.right)};return a(this._root),o}else{let a=new x([this._root]);for(;a.length>0;){let l=a.shift();if(this.isRealNode(l)){let f=this._compare(l.key,d);Math.sign(f)==t&&o.push(e(l)),this.isRealNode(l.left)&&a.push(l.left),this.isRealNode(l.right)&&a.push(l.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 l=o+(d-o>>1),f=t[l],c=i(o,l-1,f),V=i(l+1,d,f);return f.left=c,f.right=V,f.parent=a,f},r=i(0,n-1,void 0);return this._setRoot(r),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 r=n(i.left),o=n(i.right);return Math.abs(r-o)>1&&(t=!1),Math.max(r,o)+1};n(this._root)}else{let n=[],i=this._root,r,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||r===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)),r=i,i=void 0}}else i=i.right}return t}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,this));return i}deleteWhere(e){let t=[],n=this._root,i=0;for(;t.length>0||n!==void 0;){for(;n!=null;)t.push(n),n=n.left;let r=t.pop();if(!r)break;let o=r.key,d=r.value;if(e(o,d,i++,this))return this._deleteByKey(o);n=r.right}return!1}_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 L(_({},super._snapshotOptions()),{specifyComparable:this.specifyComparable,isReverse:this.isReverse})}_keyValueNodeOrEntryToNodeAndValue(e,t){let[n,i]=super._keyValueNodeOrEntryToNodeAndValue(e,t);return n===null?[void 0,void 0]:[n,t!=null?t:i]}_setRoot(e){e&&(e.parent=void 0),this._root=e}_compare(e,t){return this._isReverse?-this._comparator(e,t):this._comparator(e,t)}_deleteByKey(e){var r;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}};if(t.left===void 0)n(t,t.right);else if(t.right===void 0)n(t,t.left);else{let o=i(t.right);o.parent!==t&&(n(o,o.right),o.right=t.right,o.right&&(o.right.parent=o)),n(t,o),o.left=t.left,o.left&&(o.left.parent=o)}return this._size=Math.max(0,((r=this._size)!=null?r:0)-1),!0}};var qe=class{constructor({frequency:s=0,max:e}){u(this,"_freq");u(this,"_max");u(this,"_freqMap");u(this,"_msb");u(this,"_negativeCount");this._freq=s,this._max=e,this._freqMap={0:0},this._msb=Be(e),this._negativeCount=s<0?e:0}get freqMap(){return this._freqMap}get msb(){return this._msb}get negativeCount(){return this._negativeCount}get freq(){return this._freq}get max(){return this._max}readSingle(s){return this._checkIndex(s),this._readSingle(s)}update(s,e){this._checkIndex(s);let t=this._readSingle(s);this._update(s,e),this._updateNegativeCount(t,t+e)}writeSingle(s,e){this._checkIndex(s),this._writeSingle(s,e)}read(s){if(!Number.isInteger(s))throw new Error("Invalid count");return this._read(Math.max(Math.min(s,this.max),0))}lowerBound(s){if(this.negativeCount>0)throw new Error("Sequence is not non-descending");return this._binarySearch(s,(e,t)=>e<t)}upperBound(s){if(this.negativeCount>0)throw new Error("Must not be descending");return this._binarySearch(s,(e,t)=>e<=t)}getPrefixSum(s){this._checkIndex(s),s++;let e=0;for(;s>0;)e+=this._getFrequency(s),s-=s&-s;return e}_getFrequency(s){return s in this.freqMap?this.freqMap[s]:this.freq*(s&-s)}_updateFrequency(s,e){this.freqMap[s]=this._getFrequency(s)+e}_checkIndex(s){if(!Number.isInteger(s))throw new Error("Invalid index: Index must be an integer.");if(s<0||s>=this.max)throw new Error("Index out of range: Index must be within the range [0, this.max).")}_readSingle(s){s=s+1;let e=this._getFrequency(s),t=s-(s&-s);for(s--;s!==t;)e-=this._getFrequency(s),s-=s&-s;return e}_updateNegativeCount(s,e){s<0&&e>=0?this._negativeCount--:s>=0&&e<0&&this._negativeCount++}_update(s,e){for(s=s+1;s<=this.max;)this._updateFrequency(s,e),s+=s&-s}_writeSingle(s,e){let t=this._readSingle(s);this._update(s,e-t),this._updateNegativeCount(t,e)}_read(s){let e=s,t=0;for(;e;)t+=this._getFrequency(e),e-=e&-e;return t}_binarySearch(s,e){let t=0,n=this.msb<<1,i=s;for(;n>t+1;){let r=t+n>>1,o=this._getFrequency(r);r<=this.max&&e(o,i)?(i-=o,t=r):n=r}return t}};var ne=class{constructor(s,e,t,n){u(this,"_start",0);u(this,"_end",0);u(this,"_value");u(this,"_sum",0);u(this,"_left");u(this,"_right");this._start=s,this._end=e,this._sum=t,this._value=n||void 0}get start(){return this._start}set start(s){this._start=s}get end(){return this._end}set end(s){this._end=s}get value(){return this._value}set value(s){this._value=s}get sum(){return this._sum}set sum(s){this._sum=s}get left(){return this._left}set left(s){this._left=s}get right(){return this._right}set right(s){this._right=s}},Ge=class{constructor(s,e,t){u(this,"_values",[]);u(this,"_start",0);u(this,"_end");u(this,"_root");e=e||0,t=t||s.length-1,this._values=s,this._start=e,this._end=t,s.length>0?this._root=this.build(e,t):(this._root=void 0,this._values=[])}get values(){return this._values}get start(){return this._start}get end(){return this._end}get root(){return this._root}build(s,e){if(s>e)return new ne(s,e,0);if(s===e)return new ne(s,e,this._values[s]);let t=s+Math.floor((e-s)/2),n=this.build(s,t),i=this.build(t+1,e),r=new ne(s,e,n.sum+i.sum);return r.left=n,r.right=i,r}updateNode(s,e,t){let n=this.root||void 0;if(!n)return;let i=(r,o,d,a)=>{if(r.start===r.end&&r.start===o){r.sum=d,a!==void 0&&(r.value=a);return}let l=r.start+Math.floor((r.end-r.start)/2);o<=l?r.left&&i(r.left,o,d,a):r.right&&i(r.right,o,d,a),r.left&&r.right&&(r.sum=r.left.sum+r.right.sum)};i(n,s,e,t)}querySumByRange(s,e){let t=this.root||void 0;if(!t)return 0;if(s<0||e>=this.values.length||s>e)return NaN;let n=(i,r,o)=>{if(r<=i.start&&o>=i.end)return i.sum;let d=i.start+Math.floor((i.end-i.start)/2);if(o<=d)return i.left?n(i.left,r,o):NaN;if(r>d)return i.right?n(i.right,r,o):NaN;{let a=0,l=0;return i.left&&(a=n(i.left,r,d)),i.right&&(l=n(i.right,d+1,o)),a+l}};return n(t,s,e)}};var A=class extends F{constructor(e,t){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right")}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},X=class extends Q{constructor(s=[],e){super([],e),s&&super.addMany(s)}_createNode(s,e){return new A(s,this._isMapMode?void 0:e)}isNode(s){return s instanceof A}add(s,e){if(s===null)return!1;let t=super.add(s,e);return t&&this._balancePath(s),t}delete(s){let e=super.delete(s);for(let{needBalanced:t}of e)t&&this._balancePath(t);return e}perfectlyBalance(s=this.iterationType){let e=this.dfs(r=>r,"IN",!1,this._root,s),t=e.length;if(t===0)return!1;this._clearNodes();let n=(r,o,d)=>{if(r>o)return;let a=r+(o-r>>1),l=e[a];l.left=n(r,a-1,l),l.right=n(a+1,o,l),l.parent=d;let f=l.left?l.left.height:-1,c=l.right?l.right.height:-1;return l.height=Math.max(f,c)+1,l},i=n(0,t-1,void 0);return this._setRoot(i),this._size=t,!0}map(s,e,t){let n=this._createLike([],e),i=0;for(let[r,o]of this)n.add(s.call(t,r,o,i++,this));return n}_createInstance(s){let e=this.constructor;return new e([],_(_({},this._snapshotOptions()),s!=null?s:{}))}_createLike(s=[],e){let t=this.constructor;return new t(s,_(_({},this._snapshotOptions()),e!=null?e:{}))}_swapProperties(s,e){let t=this.ensureNode(s),n=this.ensureNode(e);if(t&&n){let{key:i,value:r,height:o}=n,d=this._createNode(i,r);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(s){let e=s.left?s.left.height:-1;return(s.right?s.right.height:-1)-e}_updateHeight(s){let e=s.left?s.left.height:-1,t=s.right?s.right.height:-1;s.height=1+Math.max(e,t)}_balanceLL(s){let e=s.parent,t=s.left;t!==null&&(s.parent=t),t&&t.right&&(t.right.parent=s),t&&(t.parent=e),s===this.root?t&&this._setRoot(t):(e==null?void 0:e.left)===s?e.left=t:e&&(e.right=t),t&&(s.left=t.right,t.right=s),this._updateHeight(s),t&&this._updateHeight(t)}_balanceLR(s){let e=s.parent,t=s.left,n;t&&(n=t.right),s&&n!==null&&(s.parent=n),t&&n!==null&&(t.parent=n),n&&(n.left&&t!==null&&(n.left.parent=t),n.right&&(n.right.parent=s),n.parent=e),s===this.root?n&&this._setRoot(n):e&&(e.left===s?e.left=n:e.right=n),n&&(s.left=n.right,t&&(t.right=n.left),n.left=t,n.right=s),this._updateHeight(s),t&&this._updateHeight(t),n&&this._updateHeight(n)}_balanceRR(s){let e=s.parent,t=s.right;t!==null&&(s.parent=t),t&&(t.left&&(t.left.parent=s),t.parent=e),s===this.root?t&&this._setRoot(t):e&&(e.left===s?e.left=t:e.right=t),t&&(s.right=t.left,t.left=s),this._updateHeight(s),t&&this._updateHeight(t)}_balanceRL(s){let e=s.parent,t=s.right,n;t&&(n=t.left),n!==null&&(s.parent=n),t&&n!==null&&(t.parent=n),n&&(n.left&&(n.left.parent=s),n.right&&t!==null&&(n.right.parent=t),n.parent=e),s===this.root?n&&this._setRoot(n):e&&(e.left===s?e.left=n:e.right=n),n&&(s.right=n.left),t&&n&&(t.left=n.right),n&&(n.left=s),n&&(n.right=t),this._updateHeight(s),t&&this._updateHeight(t),n&&this._updateHeight(n)}_balancePath(s){s=this.ensureNode(s);let e=this.getPathToRoot(s,t=>t,!1);for(let t=0;t<e.length;t++){let n=e[t];if(n)switch(this._updateHeight(n),this._balanceFactor(n)){case-2:n&&n.left&&(this._balanceFactor(n.left)<=0?this._balanceLL(n):this._balanceLR(n));break;case 2:n&&n.right&&(this._balanceFactor(n.right)>=0?this._balanceRR(n):this._balanceRL(n))}}}_replaceNode(s,e){return e.height=s.height,super._replaceNode(s,e)}};var D=class extends F{constructor(e,t,n="BLACK"){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right");this._color=n}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},$=class extends Q{constructor(e=[],t){super([],t);u(this,"_root");this._root=this.NIL,e&&this.addMany(e)}get root(){return this._root}_createNode(e,t,n="BLACK"){return new D(e,this._isMapMode?void 0:t,n)}isNode(e){return e instanceof D}clear(){super.clear(),this._root=this.NIL}add(e,t){let[n,i]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(!this.isRealNode(n))return!1;let r=this._insert(n);if(r==="CREATED"){if(this.isRealNode(this._root))this._root.color="BLACK";else return!1;return this._isMapMode&&this._setValue(n.key,i),this._size++,!0}return r==="UPDATED"?(this._isMapMode&&this._setValue(n.key,i),!0):!1}delete(e){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.color,r;if(!this.isRealNode(n.left))n.right!==null&&(r=n.right,this._transplant(n,n.right));else if(!this.isRealNode(n.right))r=n.left,this._transplant(n,n.left);else{let o=this.getLeftMost(d=>d,n.right);o&&(i=o.color,o.right!==null&&(r=o.right),o.parent===n?this.isRealNode(r)&&(r.parent=o):(o.right!==null&&(this._transplant(o,o.right),o.right=n.right),this.isRealNode(o.right)&&(o.right.parent=o)),this._transplant(n,o),o.left=n.left,this.isRealNode(o.left)&&(o.left.parent=o),o.color=n.color)}return this._isMapMode&&this._store.delete(n.key),this._size--,i==="BLACK"&&this._deleteFixup(r),t.push({deleted:n,needBalanced:void 0}),t}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,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){e&&(e.parent=void 0),this._root=e}_replaceNode(e,t){return t.color=e.color,super._replaceNode(e,t)}_insert(e){var i,r;let t=this.root,n;for(;this.isRealNode(t);){n=t;let o=this._compare(e.key,t.key);if(o<0)t=(i=t.left)!=null?i:this.NIL;else if(o>0)t=(r=t.right)!=null?r:this.NIL;else return this._replaceNode(t,e),"UPDATED"}return e.parent=n,n?this._compare(e.key,n.key)<0?n.left=e:n.right=e:this._setRoot(e),e.left=this.NIL,e.right=this.NIL,e.color="RED",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){var t,n,i,r,o;for(;((t=e==null?void 0:e.parent)==null?void 0:t.color)==="RED";)if(e.parent===((n=e.parent.parent)==null?void 0:n.left)){let d=e.parent.parent.right;(d==null?void 0:d.color)==="RED"?(e.parent.color="BLACK",d.color="BLACK",e.parent.parent.color="RED",e=e.parent.parent):(e===e.parent.right&&(e=e.parent,this._leftRotate(e)),e&&this.isRealNode(e.parent)&&this.isRealNode(e.parent.parent)&&(e.parent.color="BLACK",e.parent.parent.color="RED",this._rightRotate(e.parent.parent)))}else{let d=(o=(r=(i=e==null?void 0:e.parent)==null?void 0:i.parent)==null?void 0:r.left)!=null?o:void 0;(d==null?void 0:d.color)==="RED"?(e.parent.color="BLACK",d.color="BLACK",e.parent.parent.color="RED",e=e.parent.parent):(e===e.parent.left&&(e=e.parent,this._rightRotate(e)),e&&this.isRealNode(e.parent)&&this.isRealNode(e.parent.parent)&&(e.parent.color="BLACK",e.parent.parent.color="RED",this._leftRotate(e.parent.parent)))}this.isRealNode(this._root)&&(this._root.color="BLACK")}_deleteFixup(e){var t,n,i,r;if(!e||e===this.root||e.color==="BLACK"){e&&(e.color="BLACK");return}for(;e&&e!==this.root&&e.color==="BLACK";){let o=e.parent;if(!o)break;if(e===o.left){let d=o.right;(d==null?void 0:d.color)==="RED"&&(d.color="BLACK",o.color="RED",this._leftRotate(o),d=o.right),((n=(t=d==null?void 0:d.left)==null?void 0:t.color)!=null?n:"BLACK")==="BLACK"?(d&&(d.color="RED"),e=o):(d!=null&&d.left&&(d.left.color="BLACK"),d&&(d.color=o.color),o.color="BLACK",this._rightRotate(o),e=this.root)}else{let d=o.left;(d==null?void 0:d.color)==="RED"&&(d.color="BLACK",o&&(o.color="RED"),this._rightRotate(o),o&&(d=o.left)),((r=(i=d==null?void 0:d.right)==null?void 0:i.color)!=null?r:"BLACK")==="BLACK"?(d&&(d.color="RED"),e=o):(d!=null&&d.right&&(d.right.color="BLACK"),d&&(d.color=o.color),o&&(o.color="BLACK"),this._leftRotate(o),e=this.root)}}e&&(e.color="BLACK")}_leftRotate(e){if(!e||!e.right)return;let t=e.right;e.right=t.left,this.isRealNode(t.left)&&(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}_rightRotate(e){if(!e||!e.left)return;let t=e.left;e.left=t.right,this.isRealNode(t.right)&&(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}};var ye=class extends A{constructor(e,t){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right")}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},We=class extends X{constructor(s=[],e){super([],L(_({},e),{isMapMode:!0})),s&&this.addMany(s)}_createNode(s,e=[]){return new ye(s,this._isMapMode?[]:e)}add(s,e){if(this.isRealNode(s))return super.add(s);let t=(n,i)=>{if(n==null)return!1;let r=()=>{let d=this.get(n);if(d!==void 0&&i!==void 0){for(let a of i)d.push(a);return!0}return!1},o=()=>{let d=this.getNode(n);if(this.isRealNode(d)){let a=this.get(d);if(a===void 0)return super.add(n,i),!0;if(i!==void 0){for(let l of i)a.push(l);return!0}else return!1}else return super.add(n,i)};return this._isMapMode?o()||r():r()||o()};if(this.isEntry(s)){let[n,i]=s;return t(n,e!==void 0?[e]:i)}return t(s,e!==void 0?[e]:void 0)}deleteValue(s,e){let t=this.get(s);if(Array.isArray(t)){let n=t.indexOf(e);return n===-1?!1:(t.splice(n,1),t.length===0&&this.delete(s),!0)}return!1}perfectlyBalance(s=this.iterationType){let e=this.dfs(r=>r,"IN",!1,this._root,s),t=e.length;if(t===0)return!1;this._clearNodes();let n=(r,o,d)=>{if(r>o)return;let a=r+(o-r>>1),l=e[a];l.left=n(r,a-1,l),l.right=n(a+1,o,l),l.parent=d;let f=l.left?l.left.height:-1,c=l.right?l.right.height:-1;return l.height=Math.max(f,c)+1,l},i=n(0,t-1,void 0);return this._setRoot(i),this._size=t,!0}map(s,e,t){let n=this._createLike([],e),i=0;for(let[r,o]of this)n.add(s.call(t,r,o,i++,this));return n}_createInstance(s){var t,n;let e=this.constructor;return new e([],_(_({},(n=(t=this._snapshotOptions)==null?void 0:t.call(this))!=null?n:{}),s!=null?s:{}))}_createLike(s=[],e){var n,i;let t=this.constructor;return new t(s,_(_({},(i=(n=this._snapshotOptions)==null?void 0:n.call(this))!=null?i:{}),e!=null?e:{}))}};var Ke=class extends D{constructor(e,t){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right")}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},Qe=class extends ${constructor(s=[],e){super([],_({},e)),s&&this.addMany(s)}_createNode(s,e=[]){return new Ke(s,this._isMapMode?[]:e)}add(s,e){if(this.isRealNode(s))return super.add(s);let t=(n,i)=>{if(n==null)return!1;let r=()=>{let d=this.get(n);if(d!==void 0&&i!==void 0){for(let a of i)d.push(a);return!0}return!1},o=()=>{let d=this.getNode(n);if(this.isRealNode(d)){let a=this.get(d);if(a===void 0)return super.add(n,i),!0;if(i!==void 0){for(let l of i)a.push(l);return!0}else return!1}else return super.add(n,i)};return this._isMapMode?o()||r():r()||o()};if(this.isEntry(s)){let[n,i]=s;return t(n,e!==void 0?[e]:i)}return t(s,e!==void 0?[e]:void 0)}deleteValue(s,e){let t=this.get(s);if(Array.isArray(t)){let n=t.indexOf(e);return n===-1?!1:(t.splice(n,1),t.length===0&&this.delete(s),!0)}return!1}map(s,e,t){let n=this._createLike([],e),i=0;for(let[r,o]of this)n.add(s.call(t,r,o,i++,this));return n}_createInstance(s){var t,n;let e=this.constructor;return new e([],_(_({},(n=(t=this._snapshotOptions)==null?void 0:t.call(this))!=null?n:{}),s!=null?s:{}))}_createLike(s=[],e){var n,i;let t=this.constructor;return new t(s,_(_({},(i=(n=this._snapshotOptions)==null?void 0:n.call(this))!=null?i:{}),e!=null?e:{}))}};var le=class extends D{constructor(e,t,n=1,i="BLACK"){super(e,t,i);u(this,"parent");u(this,"_left");u(this,"_right");this.count=n}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},Xe=class extends ${constructor(e=[],t){super([],t);u(this,"_count",0);e&&this.addMany(e)}get count(){return this._count}getComputedCount(){let e=0;return this.dfs(t=>e+=t?t.count:0),e}_createNode(e,t,n="BLACK",i){return new le(e,this._isMapMode?void 0:t,i,n)}isNode(e){return e instanceof le}add(e,t,n=1){let[i,r]=this._keyValueNodeOrEntryToNodeAndValue(e,t,n),o=(i==null?void 0:i.count)||0;return super.add(i,r)?(this._count+=o,!0):!1}delete(e,t=!1){if(e===null)return[];let n=[],i;if(this._isPredicate(e)?i=this.getNode(e):i=this.isRealNode(e)?e:this.getNode(e),!i)return n;let r=i.color,o;if(this.isRealNode(i.left))if(this.isRealNode(i.right)){let d=this.getLeftMost(a=>a,i.right);if(d){if(r=d.color,d.right!==null&&(o=d.right),d.parent===i)this.isRealNode(o)&&(o.parent=d);else{if(t||i.count<=1)d.right!==null&&(this._transplant(d,d.right),this._count-=i.count);else return i.count--,this._count--,n.push({deleted:i,needBalanced:void 0}),n;d.right=i.right,this.isRealNode(d.right)&&(d.right.parent=d)}if(t||i.count<=1)this._transplant(i,d),this._count-=i.count;else return i.count--,this._count--,n.push({deleted:i,needBalanced:void 0}),n;d.left=i.left,this.isRealNode(d.left)&&(d.left.parent=d),d.color=i.color}}else if(o=i.left,t||i.count<=1)this._transplant(i,i.left),this._count-=i.count;else return i.count--,this._count--,n.push({deleted:i,needBalanced:void 0}),n;else if(i.right!==null&&(o=i.right),t||i.count<=1)i.right!==null&&(this._transplant(i,i.right),this._count-=i.count);else return i.count--,this._count--,n.push({deleted:i,needBalanced:void 0}),n;return this._size--,r==="BLACK"&&this._deleteFixup(o),n.push({deleted:i,needBalanced:void 0}),n}clear(){super.clear(),this._count=0}perfectlyBalance(e=this.iterationType){let t=this.dfs(d=>d,"IN",!1,this._root,e),n=t.length;if(n<1)return!1;let i=0;for(let d of t)i+=d?d.count:0;this._clearNodes();let r=(d,a,l)=>{if(d>a)return;let f=d+(a-d>>1),c=t[f],V=r(d,f-1,c),p=r(f+1,a,c);return c.left=V,c.right=p,c.parent=l,c},o=r(0,n-1,void 0);return this._setRoot(o),this._size=n,this._count=i,!0}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,this));return i}clone(){let e=this._createInstance();return this._clone(e),e._count=this._count,e}_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,n=1){if(e==null)return[void 0,void 0];if(this.isNode(e))return[e,t];if(this.isEntry(e)){let[i,r]=e;if(i==null)return[void 0,void 0];let o=t!=null?t:r;return[this._createNode(i,o,"BLACK",n),o]}return[this._createNode(e,t,"BLACK",n),t]}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:n,value:i,count:r,color:o}=t,d=this._createNode(n,i,o,r);return d&&(d.color=o,t.key=e.key,this._isMapMode||(t.value=e.value),t.count=e.count,t.color=e.color,e.key=d.key,this._isMapMode||(e.value=d.value),e.count=d.count,e.color=d.color),t}}_replaceNode(e,t){return t.count=e.count+t.count,super._replaceNode(e,t)}};var ue=class extends A{constructor(e,t,n=1){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right");this.count=n}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},$e=class extends X{constructor(e=[],t){super([],t);u(this,"_count",0);e&&this.addMany(e)}get count(){return this._count}getComputedCount(){let e=0;return this.dfs(t=>e+=t.count),e}_createNode(e,t,n){return new ue(e,this._isMapMode?void 0:t,n)}isNode(e){return e instanceof ue}add(e,t,n=1){let[i,r]=this._keyValueNodeOrEntryToNodeAndValue(e,t,n);if(i===void 0)return!1;let o=(i==null?void 0:i.count)||0;return super.add(i,r)&&(this._count+=o),!0}delete(e,t=!1){var a;let n=[];if(!this.root)return n;let i=(a=this.getNode(e))!=null?a:void 0;if(!i)return n;let r=i!=null&&i.parent?i.parent:void 0,o,d=i;if(i.count>1&&!t)i.count--,this._count--;else{if(i.left){let l=i.left?this.getRightMost(f=>f,i.left):void 0;if(l){let f=l.parent;d=this._swapProperties(i,l),f&&(f.right===l?f.right=l.left:f.left=l.left,o=f)}}else if(!r)i.right!==void 0&&i.right!==null&&this._setRoot(i.right);else{let{familyPosition:l}=i;l==="LEFT"||l==="ROOT_LEFT"?r.left=i.right:(l==="RIGHT"||l==="ROOT_RIGHT")&&(r.right=i.right),o=r}this._size=this._size-1,d&&(this._count-=d.count)}return n.push({deleted:d,needBalanced:o}),o&&this._balancePath(o),n}clear(){super.clear(),this._count=0}perfectlyBalance(e=this.iterationType){let t=this.dfs(d=>d,"IN",!1,this._root,e),n=t.length;if(n===0)return!1;let i=0;for(let d of t)i+=d?d.count:0;this._clearNodes();let r=(d,a,l)=>{if(d>a)return;let f=d+(a-d>>1),c=t[f];c.left=r(d,f-1,c),c.right=r(f+1,a,c),c.parent=l;let V=c.left?c.left.height:-1,p=c.right?c.right.height:-1;return c.height=Math.max(V,p)+1,c},o=r(0,n-1,void 0);return this._setRoot(o),this._size=n,this._count=i,!0}clone(){let e=this._createInstance();return this._isMapMode?this.bfs(t=>e.add(t.key,void 0,t.count)):this.bfs(t=>e.add(t.key,t.value,t.count)),this._isMapMode&&(e._store=this._store),e}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,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:{}))}_keyValueNodeOrEntryToNodeAndValue(e,t,n=1){if(e==null)return[void 0,void 0];if(this.isNode(e))return[e,t];if(this.isEntry(e)){let[i,r]=e;if(i==null)return[void 0,void 0];let o=t!=null?t:r;return[this._createNode(i,o,n),o]}return[this._createNode(e,t,n),t]}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:n,value:i,count:r,height:o}=t,d=this._createNode(n,i,r);return d&&(d.height=o,t.key=e.key,this._isMapMode||(t.value=e.value),t.count=e.count,t.height=e.height,e.key=d.key,this._isMapMode||(e.value=d.value),e.count=d.count,e.height=d.height),t}}_replaceNode(e,t){return t.count=e.count+t.count,super._replaceNode(e,t)}};var J=class extends O{constructor(s=[],e){super(s,e)}};var Je=class extends J{constructor(s=[],e){super(s,e)}};var Ye=class extends J{constructor(s=[],e){super(s,_({comparator:(t,n)=>{if(typeof t=="object"||typeof n=="object")throw TypeError("When comparing object types, a custom comparator must be defined in the constructor's options parameter.");return t<n?1:t>n?-1:0}},e))}};var Ze=class h{constructor(s,e){u(this,"_rows",0);u(this,"_cols",0);u(this,"_data");var t,n,i;if(e){let{rows:r,cols:o,addFn:d,subtractFn:a,multiplyFn:l}=e;typeof r=="number"&&r>0?this._rows=r:this._rows=s.length,typeof o=="number"&&o>0?this._cols=o:this._cols=((t=s[0])==null?void 0:t.length)||0,d&&(this._addFn=d),a&&(this._subtractFn=a),l&&(this._multiplyFn=l)}else this._rows=s.length,this._cols=(i=(n=s[0])==null?void 0:n.length)!=null?i:0;if(s.length>0)this._data=s;else{this._data=[];for(let r=0;r<this.rows;r++)this._data[r]=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(s,e){if(this.isValidIndex(s,e))return this.data[s][e]}set(s,e,t){return this.isValidIndex(s,e)?(this.data[s][e]=t,!0):!1}isMatchForCalculate(s){return this.rows===s.rows&&this.cols===s.cols}add(s){if(!this.isMatchForCalculate(s))throw new Error("Matrix dimensions must match for addition.");let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<this.cols;n++){let i=this.get(t,n),r=s.get(t,n);if(i!==void 0&&r!==void 0){let o=this._addFn(i,r);o&&(e[t][n]=o)}}}return new h(e,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}subtract(s){if(!this.isMatchForCalculate(s))throw new Error("Matrix dimensions must match for subtraction.");let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<this.cols;n++){let i=this.get(t,n),r=s.get(t,n);if(i!==void 0&&r!==void 0){let o=this._subtractFn(i,r);o&&(e[t][n]=o)}}}return new h(e,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}multiply(s){if(this.cols!==s.rows)throw new Error("Matrix dimensions must be compatible for multiplication (A.cols = B.rows).");let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<s.cols;n++){let i;for(let r=0;r<this.cols;r++){let o=this.get(t,r),d=s.get(r,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 h(e,{rows:this.rows,cols:s.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}transpose(){if(this.data.some(e=>e.length!==this.rows))throw new Error("Matrix must be rectangular for transposition.");let s=[];for(let e=0;e<this.cols;e++){s[e]=[];for(let t=0;t<this.rows;t++){let n=this.get(t,e);n!==void 0&&(s[e][t]=n)}}return new h(s,{rows:this.cols,cols:this.rows,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}inverse(){var n;if(this.rows!==this.cols)throw new Error("Matrix must be square for inversion.");let s=[];for(let i=0;i<this.rows;i++){s[i]=this.data[i].slice();for(let r=0;r<this.cols;r++)s[i][this.cols+r]=i===r?1:0}let e=new h(s,{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 r=i;for(;r<this.rows&&e.get(r,i)===0;)r++;if(r===this.rows)throw new Error("Matrix is singular, and its inverse does not exist.");e._swapRows(i,r);let o=(n=e.get(i,i))!=null?n:1;if(o===0)throw new Error("Matrix is singular, and its inverse does not exist (division by zero).");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 h(t,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}dot(s){if(this.cols!==s.rows)throw new Error("Number of columns in the first matrix must be equal to the number of rows in the second matrix for dot product.");let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<s.cols;n++){let i;for(let r=0;r<this.cols;r++){let o=this.get(t,r),d=s.get(r,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 h(e,{rows:this.rows,cols:s.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}isValidIndex(s,e){return s>=0&&s<this.rows&&e>=0&&e<this.cols}clone(){return new h(this.data,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}_addFn(s,e){return s===void 0?e:s+e}_subtractFn(s,e){return s-e}_multiplyFn(s,e){return s*e}_swapRows(s,e){let t=this.data[s];this.data[s]=this.data[e],this.data[e]=t}_scaleRow(s,e){for(let t=0;t<this.cols;t++){let n=this.multiplyFn(this.data[s][t],e);n===void 0&&(n=0),this.data[s][t]=n}}_addScaledRow(s,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 r=i,o=this.addFn(this.data[s][n],r);o===void 0&&(o=0),this.data[s][n]=o}}};var Ee=class h{constructor(s,e){u(this,"direction");u(this,"turn");this.direction=s,this.turn=()=>new h(e[s],e)}},et=class{constructor({matrix:s,turning:e,onMove:t,init:{cur:n,charDir:i,VISITED:r}}){u(this,"onMove");u(this,"_matrix");u(this,"_cur");u(this,"_character");u(this,"_VISITED");this._matrix=s,this._cur=n,this._character=new Ee(i,e),this.onMove=t,this.onMove&&this.onMove(this._cur),this._VISITED=r,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:s}=this._character;this.check(s)?this.move(s):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(s){let e,t,n=this._matrix,[i,r]=this._cur;switch(s){case"up":if(t=n[i-1],!t)return!1;e=t[r];break;case"right":e=n[i][r+1];break;case"down":if(t=n[i+1],!t)return!1;e=t[r];break;case"left":e=n[i][r-1];break}return e!==void 0&&e!==this._VISITED}move(s){switch(s){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 ie=class{constructor(s){u(this,"_key");u(this,"_children");u(this,"_isEnd");this._key=s,this._isEnd=!1,this._children=new Map}get key(){return this._key}set key(s){this._key=s}get children(){return this._children}set children(s){this._children=s}get isEnd(){return this._isEnd}set isEnd(s){this._isEnd=s}},tt=class extends B{constructor(e=[],t){super(t);u(this,"_size",0);u(this,"_caseSensitive",!0);u(this,"_root",new ie(""));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 r=t.children.get(i);r||(r=new ie(i),t.children.set(i,r)),t=r}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 ie("")}delete(e){e=this._caseProcess(e);let t=!1,n=(i,r)=>{let o=e[r],d=i.children.get(o);return d?r===e.length-1?d.isEnd?(d.children.size>0?d.isEnd=!1:i.children.delete(o),t=!0,!0):!1:n(d,r+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,r)=>{r>t&&(t=r);let{children:o}=i;if(o)for(let d of o.entries())n(d[1],r+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=[],r=0;function o(a,l){for(let f of a.children.keys()){let c=a.children.get(f);c!==void 0&&o(c,l.concat(f))}if(a.isEnd){if(r>t-1)return;i.push(l),r++}}let d=this.root;if(e)for(let a of e){let l=d.children.get(a);if(l)d=l;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 r of this)e.call(t,r,i,this)&&n.add(r),i++;return n}map(e,t,n){let i=this._createLike([],t),r=0;for(let o of this){let d=n===void 0?e(o,r++,this):e.call(n,o,r++,this);if(typeof d!="string")throw new TypeError(`Trie.map callback must return string; got ${typeof d}`);i.add(d)}return i}mapSame(e,t){let n=this._createInstance(),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,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,r]of t.children)yield*v(e(r,n+i))}yield*v(e(this.root,""))}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};var nt=class h{constructor(s,e,t){u(this,"_key");u(this,"_value");u(this,"_children");this._key=s,this._value=e||void 0,t&&(this._children=t)}get key(){return this._key}set key(s){this._key=s}get value(){return this._value}set value(s){this._value=s}get children(){return this._children}set children(s){this._children=s}addChildren(s){this._children||(this._children=[]),s instanceof h?this._children.push(s):this._children=this._children.concat(s)}getHeight(){let s=0;if(this){let e=(t,n)=>{n>s&&(s=n);let{_children:i}=t;if(i)for(let r=0,o=i.length;r<o;r++)e(i[r],n+1)};e(this,0)}return s}};return _t(Et);})();
5
+ `;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,r=this.iterationType,o=!1,d=c=>!!c,a=c=>!!c,l=c=>o?this.isRealNodeOrNull(c):this.isRealNode(c),f=c=>this.isRealNodeOrNull(c)){if(i=this.ensureNode(i),!i)return[];let c=[];if(r==="RECURSIVE"){let V=p=>{if(!l(p))return;let g=()=>{d(p)&&(p==null?void 0:p.left)!==void 0&&V(p==null?void 0:p.left)},T=()=>{a(p)&&(p==null?void 0:p.right)!==void 0&&V(p==null?void 0:p.right)};switch(t){case"IN":if(g(),f(p)&&(c.push(e(p)),n))return;T();break;case"PRE":if(f(p)&&(c.push(e(p)),n))return;g(),T();break;case"POST":if(g(),T(),f(p)&&(c.push(e(p)),n))return;break}};V(i)}else{let V=[{opt:0,node:i}],p=m=>{var b;d(m.node)&&V.push({opt:0,node:(b=m.node)==null?void 0:b.left})},g=m=>{var b;a(m.node)&&V.push({opt:0,node:(b=m.node)==null?void 0:b.right})},T=m=>{l(m.node)&&V.push({opt:1,node:m.node})};for(;V.length>0;){let m=V.pop();if(m!==void 0&&l(m.node))if(m.opt===1){if(f(m.node)&&m.node!==void 0&&(c.push(e(m.node)),n))return c}else switch(t){case"IN":g(m),T(m),p(m);break;case"PRE":g(m),p(m),T(m);break;case"POST":T(m),g(m),p(m);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)&&(this._isMapMode?yield[n.key,this._store.get(n.key)]:yield[n.key,n.value],n=n.right)}}else e.left&&this.isRealNode(e)&&(yield*this[Symbol.iterator](e.left)),this._isMapMode?yield[e.key,this._store.get(e.key)]: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 r=t!=null?t:i;return[this.createNode(n,r),r]}return[this.createNode(e,t),t]}_clone(e){this.bfs(t=>{t===null?e.add(null):this._isMapMode?e.add([t.key,this._store.get(t.key)]):e.add([t.key,t.value])},this._root,this.iterationType,!0),this._isMapMode&&(e._store=this._store)}_displayAux(e,t){let{isShowNull:n,isShowUndefined:i,isShowRedBlackNIL:r}=t,o=[["\u2500"],1,0,0];if(e===null&&!n)return o;if(e===void 0&&!i)return o;if(this.isNIL(e)&&!r)return o;if(e!=null){let a=e.key,l=this.isNIL(e)?"S":String(a),f=l.length;return d(l,f,this._displayAux(e.left,t),this._displayAux(e.right,t))}else{let a=e===void 0?"U":"N",l=a.length;return d(a,l,[[""],1,0,0],[[""],1,0,0])}function d(a,l,f,c){let[V,p,g,T]=f,[m,b,_,y]=c,K=" ".repeat(Math.max(0,T+1))+"_".repeat(Math.max(0,p-T-1))+a+"_".repeat(Math.max(0,y))+" ".repeat(Math.max(0,b-y)),E=(g>0?" ".repeat(T)+"/"+" ".repeat(p-T-1):" ".repeat(p))+" ".repeat(l)+(_>0?" ".repeat(y)+"\\"+" ".repeat(b-y-1):" ".repeat(b)),R=[K,E];for(let N=0;N<Math.max(g,_);N++){let j=N<g?V[N]:" ".repeat(p),Ye=N<_?m[N]:" ".repeat(b);R.push(j+" ".repeat(l)+Ye)}return[R,p+l+b,Math.max(g,_)+2,p+Math.floor(l/2)]}}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:n,value:i}=t,r=this.createNode(n,i);return r&&(t.key=e.key,this._isMapMode||(t.value=e.value),e.key=r.key,this._isMapMode||(e.value=r.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){return e==null||t===void 0?!1:this._store.set(e,t)}_clearNodes(){this._setRoot(void 0),this._size=0}_clearValues(){this._store.clear()}};var w=class extends P{constructor(e,t){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right")}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},q=class extends se{constructor(e=[],t){super([],t);u(this,"_root");u(this,"_isReverse",!1);u(this,"_comparator",(e,t)=>{if(O(e)&&O(t))return e>t?1:e<t?-1:0;if(this._specifyComparable){let n=this._specifyComparable(e),i=this._specifyComparable(t);return n>i?1:n<i?-1:0}if(typeof e=="object"||typeof t=="object")throw TypeError("When comparing object types, a custom specifyComparable must be defined in the constructor's options.");return 0});u(this,"_specifyComparable");if(t){let{specifyComparable:n,isReverse:i}=t;typeof n=="function"&&(this._specifyComparable=n),i!==void 0&&(this._isReverse=i)}e&&this.addMany(e)}get root(){return this._root}get isReverse(){return this._isReverse}get comparator(){return this._comparator}get specifyComparable(){return this._specifyComparable}createNode(e,t){return new w(e,this._isMapMode?void 0:t)}ensureNode(e,t=this.iterationType){var n;return(n=super.ensureNode(e,t))!=null?n:void 0}isNode(e){return e instanceof w}isValidKey(e){return O(e,this._specifyComparable!==void 0)}dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",n=!1,i=this._root,r=this.iterationType){return super.dfs(e,t,n,i,r)}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 i;return(i=this.getNodes(e,!0,t,n)[0])!=null?i:void 0}search(e,t=!1,n=this._DEFAULT_NODE_CALLBACK,i=this._root,r=this.iterationType){if(e===void 0)return[];if(e===null)return[];if(i=this.ensureNode(i),!i)return[];let o,d=this.isRange(e);d?o=f=>f?e.isInRange(f.key,this._comparator):!1:o=this._ensurePredicate(e);let a=f=>{if(!f||!this.isRealNode(f.left))return!1;if(d){let c=e,V=this.isReverse?c.high:c.low,p=this.isReverse?c.includeHigh:c.includeLow;return p&&this._compare(f.key,V)>=0||!p&&this._compare(f.key,V)>0}if(!d&&!this._isPredicate(e)){let c=this._extractKey(e);return c!=null&&this._compare(f.key,c)>0}return!0},l=f=>{if(!f||!this.isRealNode(f.right))return!1;if(d){let c=e,V=this.isReverse?c.low:c.high,p=this.isReverse?c.includeLow:c.includeHigh;return p&&this._compare(f.key,V)<=0||!p&&this._compare(f.key,V)<0}if(!d&&!this._isPredicate(e)){let c=this._extractKey(e);return c!=null&&this._compare(f.key,c)<0}return!0};return super._dfs(n,"IN",t,i,r,!1,a,l,()=>!0,f=>!!f&&o(f))}rangeSearch(e,t=this._DEFAULT_NODE_CALLBACK,n=this._root,i=this.iterationType){let r=e instanceof D?e:new D(e[0],e[1]);return this.search(r,!1,t,n,i)}add(e,t){let[n,i]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(n===void 0)return!1;if(this._root===void 0)return this._setRoot(n),this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size++,!0;let r=this._root;for(;r!==void 0;){if(this._compare(r.key,n.key)===0)return this._replaceNode(r,n),this._isMapMode&&this._setValue(r.key,i),!0;if(this._compare(r.key,n.key)>0){if(r.left===void 0)return r.left=n,this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size++,!0;r.left!==null&&(r=r.left)}else{if(r.right===void 0)return r.right=n,this._isMapMode&&this._setValue(n==null?void 0:n.key,i),this._size++,!0;r.right!==null&&(r=r.right)}}return!1}addMany(e,t,n=!0,i=this.iterationType){let r=[],o=t==null?void 0:t[Symbol.iterator]();if(!n){for(let V of e){let p=o==null?void 0:o.next().value;this.isRaw(V)&&(V=this._toEntryFn(V)),r.push(this.add(V,p))}return r}let d=[],a=0;for(let V of e)d.push({key:V,value:o==null?void 0:o.next().value,orgIndex:a++});let l=d.sort(({key:V},{key:p})=>{let g,T;return this.isRaw(V)?g=this._toEntryFn(V)[0]:this.isEntry(V)?g=V[0]:this.isRealNode(V)?g=V.key:g=V,this.isRaw(p)?T=this._toEntryFn(p)[0]:this.isEntry(p)?T=p[0]:this.isRealNode(p)?T=p.key:T=p,g!=null&&T!=null?this._compare(g,T):0}),f=V=>{if(V.length===0)return;let p=Math.floor((V.length-1)/2),{key:g,value:T,orgIndex:m}=V[p];if(this.isRaw(g)){let b=this._toEntryFn(g);r[m]=this.add(b)}else r[m]=this.add(g,T);f(V.slice(0,p)),f(V.slice(p+1))};return i==="RECURSIVE"?f(l):(()=>{let p=[[0,l.length-1]];for(;p.length>0;){let g=p.pop();if(!g)continue;let[T,m]=g;if(T>m)continue;let b=T+Math.floor((m-T)/2),{key:_,value:y,orgIndex:K}=l[b];if(this.isRaw(_)){let E=this._toEntryFn(_);r[K]=this.add(E)}else r[K]=this.add(_,y);p.push([b+1,m]),p.push([T,b-1])}})(),r}lesserOrGreaterTraverse(e=this._DEFAULT_NODE_CALLBACK,t=-1,n=this._root,i=this.iterationType){let r=this.ensureNode(n),o=[];if(!this._root||!r)return o;let d=r.key;if(i==="RECURSIVE"){let a=l=>{let f=this._compare(l.key,d);Math.sign(f)==t&&o.push(e(l)),this.isRealNode(l.left)&&a(l.left),this.isRealNode(l.right)&&a(l.right)};return a(this._root),o}else{let a=new M([this._root]);for(;a.length>0;){let l=a.shift();if(this.isRealNode(l)){let f=this._compare(l.key,d);Math.sign(f)==t&&o.push(e(l)),this.isRealNode(l.left)&&a.push(l.left),this.isRealNode(l.right)&&a.push(l.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 l=o+(d-o>>1),f=t[l],c=i(o,l-1,f),V=i(l+1,d,f);return f.left=c,f.right=V,f.parent=a,f},r=i(0,n-1,void 0);return this._setRoot(r),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 r=n(i.left),o=n(i.right);return Math.abs(r-o)>1&&(t=!1),Math.max(r,o)+1};n(this._root)}else{let n=[],i=this._root,r,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||r===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)),r=i,i=void 0}}else i=i.right}return t}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,this));return i}deleteWhere(e){let t=[],n=this._root,i=0;for(;t.length>0||n!==void 0;){for(;n!=null;)t.push(n),n=n.left;let r=t.pop();if(!r)break;let o=r.key,d=r.value;if(e(o,d,i++,this))return this._deleteByKey(o);n=r.right}return!1}_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(),specifyComparable:this.specifyComparable,isReverse:this.isReverse}}_keyValueNodeOrEntryToNodeAndValue(e,t){let[n,i]=super._keyValueNodeOrEntryToNodeAndValue(e,t);return n===null?[void 0,void 0]:[n,t!=null?t:i]}_setRoot(e){e&&(e.parent=void 0),this._root=e}_compare(e,t){return this._isReverse?-this._comparator(e,t):this._comparator(e,t)}_deleteByKey(e){var r;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}};if(t.left===void 0)n(t,t.right);else if(t.right===void 0)n(t,t.left);else{let o=i(t.right);o.parent!==t&&(n(o,o.right),o.right=t.right,o.right&&(o.right.parent=o)),n(t,o),o.left=t.left,o.left&&(o.left.parent=o)}return this._size=Math.max(0,((r=this._size)!=null?r:0)-1),!0}};var Fe=class{constructor({frequency:s=0,max:e}){u(this,"_freq");u(this,"_max");u(this,"_freqMap");u(this,"_msb");u(this,"_negativeCount");this._freq=s,this._max=e,this._freqMap={0:0},this._msb=Ke(e),this._negativeCount=s<0?e:0}get freqMap(){return this._freqMap}get msb(){return this._msb}get negativeCount(){return this._negativeCount}get freq(){return this._freq}get max(){return this._max}readSingle(s){return this._checkIndex(s),this._readSingle(s)}update(s,e){this._checkIndex(s);let t=this._readSingle(s);this._update(s,e),this._updateNegativeCount(t,t+e)}writeSingle(s,e){this._checkIndex(s),this._writeSingle(s,e)}read(s){if(!Number.isInteger(s))throw new Error("Invalid count");return this._read(Math.max(Math.min(s,this.max),0))}lowerBound(s){if(this.negativeCount>0)throw new Error("Sequence is not non-descending");return this._binarySearch(s,(e,t)=>e<t)}upperBound(s){if(this.negativeCount>0)throw new Error("Must not be descending");return this._binarySearch(s,(e,t)=>e<=t)}getPrefixSum(s){this._checkIndex(s),s++;let e=0;for(;s>0;)e+=this._getFrequency(s),s-=s&-s;return e}_getFrequency(s){return s in this.freqMap?this.freqMap[s]:this.freq*(s&-s)}_updateFrequency(s,e){this.freqMap[s]=this._getFrequency(s)+e}_checkIndex(s){if(!Number.isInteger(s))throw new Error("Invalid index: Index must be an integer.");if(s<0||s>=this.max)throw new Error("Index out of range: Index must be within the range [0, this.max).")}_readSingle(s){s=s+1;let e=this._getFrequency(s),t=s-(s&-s);for(s--;s!==t;)e-=this._getFrequency(s),s-=s&-s;return e}_updateNegativeCount(s,e){s<0&&e>=0?this._negativeCount--:s>=0&&e<0&&this._negativeCount++}_update(s,e){for(s=s+1;s<=this.max;)this._updateFrequency(s,e),s+=s&-s}_writeSingle(s,e){let t=this._readSingle(s);this._update(s,e-t),this._updateNegativeCount(t,e)}_read(s){let e=s,t=0;for(;e;)t+=this._getFrequency(e),e-=e&-e;return t}_binarySearch(s,e){let t=0,n=this.msb<<1,i=s;for(;n>t+1;){let r=t+n>>1,o=this._getFrequency(r);r<=this.max&&e(o,i)?(i-=o,t=r):n=r}return t}};var Z=class{constructor(s,e,t,n){u(this,"_start",0);u(this,"_end",0);u(this,"_value");u(this,"_sum",0);u(this,"_left");u(this,"_right");this._start=s,this._end=e,this._sum=t,this._value=n||void 0}get start(){return this._start}set start(s){this._start=s}get end(){return this._end}set end(s){this._end=s}get value(){return this._value}set value(s){this._value=s}get sum(){return this._sum}set sum(s){this._sum=s}get left(){return this._left}set left(s){this._left=s}get right(){return this._right}set right(s){this._right=s}},Ae=class{constructor(s,e,t){u(this,"_values",[]);u(this,"_start",0);u(this,"_end");u(this,"_root");e=e||0,t=t||s.length-1,this._values=s,this._start=e,this._end=t,s.length>0?this._root=this.build(e,t):(this._root=void 0,this._values=[])}get values(){return this._values}get start(){return this._start}get end(){return this._end}get root(){return this._root}build(s,e){if(s>e)return new Z(s,e,0);if(s===e)return new Z(s,e,this._values[s]);let t=s+Math.floor((e-s)/2),n=this.build(s,t),i=this.build(t+1,e),r=new Z(s,e,n.sum+i.sum);return r.left=n,r.right=i,r}updateNode(s,e,t){let n=this.root||void 0;if(!n)return;let i=(r,o,d,a)=>{if(r.start===r.end&&r.start===o){r.sum=d,a!==void 0&&(r.value=a);return}let l=r.start+Math.floor((r.end-r.start)/2);o<=l?r.left&&i(r.left,o,d,a):r.right&&i(r.right,o,d,a),r.left&&r.right&&(r.sum=r.left.sum+r.right.sum)};i(n,s,e,t)}querySumByRange(s,e){let t=this.root||void 0;if(!t)return 0;if(s<0||e>=this.values.length||s>e)return NaN;let n=(i,r,o)=>{if(r<=i.start&&o>=i.end)return i.sum;let d=i.start+Math.floor((i.end-i.start)/2);if(o<=d)return i.left?n(i.left,r,o):NaN;if(r>d)return i.right?n(i.right,r,o):NaN;{let a=0,l=0;return i.left&&(a=n(i.left,r,d)),i.right&&(l=n(i.right,d+1,o)),a+l}};return n(t,s,e)}};var C=class extends w{constructor(e,t){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right")}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},G=class extends q{constructor(s=[],e){super([],e),s&&super.addMany(s)}createNode(s,e){return new C(s,this._isMapMode?void 0:e)}isNode(s){return s instanceof C}add(s,e){if(s===null)return!1;let t=super.add(s,e);return t&&this._balancePath(s),t}delete(s){let e=super.delete(s);for(let{needBalanced:t}of e)t&&this._balancePath(t);return e}perfectlyBalance(s=this.iterationType){let e=this.dfs(r=>r,"IN",!1,this._root,s),t=e.length;if(t===0)return!1;this._clearNodes();let n=(r,o,d)=>{if(r>o)return;let a=r+(o-r>>1),l=e[a];l.left=n(r,a-1,l),l.right=n(a+1,o,l),l.parent=d;let f=l.left?l.left.height:-1,c=l.right?l.right.height:-1;return l.height=Math.max(f,c)+1,l},i=n(0,t-1,void 0);return this._setRoot(i),this._size=t,!0}map(s,e,t){let n=this._createLike([],e),i=0;for(let[r,o]of this)n.add(s.call(t,r,o,i++,this));return n}_createInstance(s){let e=this.constructor;return new e([],{...this._snapshotOptions(),...s!=null?s:{}})}_createLike(s=[],e){let t=this.constructor;return new t(s,{...this._snapshotOptions(),...e!=null?e:{}})}_swapProperties(s,e){let t=this.ensureNode(s),n=this.ensureNode(e);if(t&&n){let{key:i,value:r,height:o}=n,d=this.createNode(i,r);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(s){let e=s.left?s.left.height:-1;return(s.right?s.right.height:-1)-e}_updateHeight(s){let e=s.left?s.left.height:-1,t=s.right?s.right.height:-1;s.height=1+Math.max(e,t)}_balanceLL(s){let e=s.parent,t=s.left;t!==null&&(s.parent=t),t&&t.right&&(t.right.parent=s),t&&(t.parent=e),s===this.root?t&&this._setRoot(t):(e==null?void 0:e.left)===s?e.left=t:e&&(e.right=t),t&&(s.left=t.right,t.right=s),this._updateHeight(s),t&&this._updateHeight(t)}_balanceLR(s){let e=s.parent,t=s.left,n;t&&(n=t.right),s&&n!==null&&(s.parent=n),t&&n!==null&&(t.parent=n),n&&(n.left&&t!==null&&(n.left.parent=t),n.right&&(n.right.parent=s),n.parent=e),s===this.root?n&&this._setRoot(n):e&&(e.left===s?e.left=n:e.right=n),n&&(s.left=n.right,t&&(t.right=n.left),n.left=t,n.right=s),this._updateHeight(s),t&&this._updateHeight(t),n&&this._updateHeight(n)}_balanceRR(s){let e=s.parent,t=s.right;t!==null&&(s.parent=t),t&&(t.left&&(t.left.parent=s),t.parent=e),s===this.root?t&&this._setRoot(t):e&&(e.left===s?e.left=t:e.right=t),t&&(s.right=t.left,t.left=s),this._updateHeight(s),t&&this._updateHeight(t)}_balanceRL(s){let e=s.parent,t=s.right,n;t&&(n=t.left),n!==null&&(s.parent=n),t&&n!==null&&(t.parent=n),n&&(n.left&&(n.left.parent=s),n.right&&t!==null&&(n.right.parent=t),n.parent=e),s===this.root?n&&this._setRoot(n):e&&(e.left===s?e.left=n:e.right=n),n&&(s.right=n.left),t&&n&&(t.left=n.right),n&&(n.left=s),n&&(n.right=t),this._updateHeight(s),t&&this._updateHeight(t),n&&this._updateHeight(n)}_balancePath(s){s=this.ensureNode(s);let e=this.getPathToRoot(s,t=>t,!1);for(let t=0;t<e.length;t++){let n=e[t];if(n)switch(this._updateHeight(n),this._balanceFactor(n)){case-2:n&&n.left&&(this._balanceFactor(n.left)<=0?this._balanceLL(n):this._balanceLR(n));break;case 2:n&&n.right&&(this._balanceFactor(n.right)>=0?this._balanceRR(n):this._balanceRL(n))}}}_replaceNode(s,e){return e.height=s.height,super._replaceNode(s,e)}};var S=class extends w{constructor(e,t,n="BLACK"){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right");this._color=n}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},W=class extends q{constructor(e=[],t){super([],t);u(this,"_root");this._root=this.NIL,e&&this.addMany(e)}get root(){return this._root}createNode(e,t,n="BLACK"){return new S(e,this._isMapMode?void 0:t,n)}isNode(e){return e instanceof S}clear(){super.clear(),this._root=this.NIL}add(e,t){let[n,i]=this._keyValueNodeOrEntryToNodeAndValue(e,t);if(!this.isRealNode(n))return!1;let r=this._insert(n);if(r==="CREATED"){if(this.isRealNode(this._root))this._root.color="BLACK";else return!1;return this._isMapMode&&this._setValue(n.key,i),this._size++,!0}return r==="UPDATED"?(this._isMapMode&&this._setValue(n.key,i),!0):!1}delete(e){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.color,r;if(!this.isRealNode(n.left))n.right!==null&&(r=n.right,this._transplant(n,n.right));else if(!this.isRealNode(n.right))r=n.left,this._transplant(n,n.left);else{let o=this.getLeftMost(d=>d,n.right);o&&(i=o.color,o.right!==null&&(r=o.right),o.parent===n?this.isRealNode(r)&&(r.parent=o):(o.right!==null&&(this._transplant(o,o.right),o.right=n.right),this.isRealNode(o.right)&&(o.right.parent=o)),this._transplant(n,o),o.left=n.left,this.isRealNode(o.left)&&(o.left.parent=o),o.color=n.color)}return this._isMapMode&&this._store.delete(n.key),this._size--,i==="BLACK"&&this._deleteFixup(r),t.push({deleted:n,needBalanced:void 0}),t}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,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){e&&(e.parent=void 0),this._root=e}_replaceNode(e,t){return t.color=e.color,super._replaceNode(e,t)}_insert(e){var i,r;let t=this.root,n;for(;this.isRealNode(t);){n=t;let o=this._compare(e.key,t.key);if(o<0)t=(i=t.left)!=null?i:this.NIL;else if(o>0)t=(r=t.right)!=null?r:this.NIL;else return this._replaceNode(t,e),"UPDATED"}return e.parent=n,n?this._compare(e.key,n.key)<0?n.left=e:n.right=e:this._setRoot(e),e.left=this.NIL,e.right=this.NIL,e.color="RED",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){var t,n,i,r,o;for(;((t=e==null?void 0:e.parent)==null?void 0:t.color)==="RED";)if(e.parent===((n=e.parent.parent)==null?void 0:n.left)){let d=e.parent.parent.right;(d==null?void 0:d.color)==="RED"?(e.parent.color="BLACK",d.color="BLACK",e.parent.parent.color="RED",e=e.parent.parent):(e===e.parent.right&&(e=e.parent,this._leftRotate(e)),e&&this.isRealNode(e.parent)&&this.isRealNode(e.parent.parent)&&(e.parent.color="BLACK",e.parent.parent.color="RED",this._rightRotate(e.parent.parent)))}else{let d=(o=(r=(i=e==null?void 0:e.parent)==null?void 0:i.parent)==null?void 0:r.left)!=null?o:void 0;(d==null?void 0:d.color)==="RED"?(e.parent.color="BLACK",d.color="BLACK",e.parent.parent.color="RED",e=e.parent.parent):(e===e.parent.left&&(e=e.parent,this._rightRotate(e)),e&&this.isRealNode(e.parent)&&this.isRealNode(e.parent.parent)&&(e.parent.color="BLACK",e.parent.parent.color="RED",this._leftRotate(e.parent.parent)))}this.isRealNode(this._root)&&(this._root.color="BLACK")}_deleteFixup(e){var t,n,i,r;if(!e||e===this.root||e.color==="BLACK"){e&&(e.color="BLACK");return}for(;e&&e!==this.root&&e.color==="BLACK";){let o=e.parent;if(!o)break;if(e===o.left){let d=o.right;(d==null?void 0:d.color)==="RED"&&(d.color="BLACK",o.color="RED",this._leftRotate(o),d=o.right),((n=(t=d==null?void 0:d.left)==null?void 0:t.color)!=null?n:"BLACK")==="BLACK"?(d&&(d.color="RED"),e=o):(d!=null&&d.left&&(d.left.color="BLACK"),d&&(d.color=o.color),o.color="BLACK",this._rightRotate(o),e=this.root)}else{let d=o.left;(d==null?void 0:d.color)==="RED"&&(d.color="BLACK",o&&(o.color="RED"),this._rightRotate(o),o&&(d=o.left)),((r=(i=d==null?void 0:d.right)==null?void 0:i.color)!=null?r:"BLACK")==="BLACK"?(d&&(d.color="RED"),e=o):(d!=null&&d.right&&(d.right.color="BLACK"),d&&(d.color=o.color),o&&(o.color="BLACK"),this._leftRotate(o),e=this.root)}}e&&(e.color="BLACK")}_leftRotate(e){if(!e||!e.right)return;let t=e.right;e.right=t.left,this.isRealNode(t.left)&&(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}_rightRotate(e){if(!e||!e.left)return;let t=e.left;e.left=t.right,this.isRealNode(t.right)&&(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}};var ge=class extends C{constructor(e,t){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right")}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},De=class extends G{constructor(s=[],e){super([],{...e,isMapMode:!0}),s&&this.addMany(s)}createNode(s,e=[]){return new ge(s,this._isMapMode?[]:e)}add(s,e){if(this.isRealNode(s))return super.add(s);let t=(n,i)=>{if(n==null)return!1;let r=()=>{let d=this.get(n);if(d!==void 0&&i!==void 0){for(let a of i)d.push(a);return!0}return!1},o=()=>{let d=this.getNode(n);if(this.isRealNode(d)){let a=this.get(d);if(a===void 0)return super.add(n,i),!0;if(i!==void 0){for(let l of i)a.push(l);return!0}else return!1}else return super.add(n,i)};return this._isMapMode?o()||r():r()||o()};if(this.isEntry(s)){let[n,i]=s;return t(n,e!==void 0?[e]:i)}return t(s,e!==void 0?[e]:void 0)}deleteValue(s,e){let t=this.get(s);if(Array.isArray(t)){let n=t.indexOf(e);return n===-1?!1:(t.splice(n,1),t.length===0&&this.delete(s),!0)}return!1}perfectlyBalance(s=this.iterationType){let e=this.dfs(r=>r,"IN",!1,this._root,s),t=e.length;if(t===0)return!1;this._clearNodes();let n=(r,o,d)=>{if(r>o)return;let a=r+(o-r>>1),l=e[a];l.left=n(r,a-1,l),l.right=n(a+1,o,l),l.parent=d;let f=l.left?l.left.height:-1,c=l.right?l.right.height:-1;return l.height=Math.max(f,c)+1,l},i=n(0,t-1,void 0);return this._setRoot(i),this._size=t,!0}map(s,e,t){let n=this._createLike([],e),i=0;for(let[r,o]of this)n.add(s.call(t,r,o,i++,this));return n}_createInstance(s){var t,n;let e=this.constructor;return new e([],{...(n=(t=this._snapshotOptions)==null?void 0:t.call(this))!=null?n:{},...s!=null?s:{}})}_createLike(s=[],e){var n,i;let t=this.constructor;return new t(s,{...(i=(n=this._snapshotOptions)==null?void 0:n.call(this))!=null?i:{},...e!=null?e:{}})}};var be=class extends S{constructor(e,t){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right")}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},Pe=class extends W{constructor(s=[],e){super([],{...e}),s&&this.addMany(s)}createNode(s,e=[]){return new be(s,this._isMapMode?[]:e)}add(s,e){if(this.isRealNode(s))return super.add(s);let t=(n,i)=>{if(n==null)return!1;let r=()=>{let d=this.get(n);if(d!==void 0&&i!==void 0){for(let a of i)d.push(a);return!0}return!1},o=()=>{let d=this.getNode(n);if(this.isRealNode(d)){let a=this.get(d);if(a===void 0)return super.add(n,i),!0;if(i!==void 0){for(let l of i)a.push(l);return!0}else return!1}else return super.add(n,i)};return this._isMapMode?o()||r():r()||o()};if(this.isEntry(s)){let[n,i]=s;return t(n,e!==void 0?[e]:i)}return t(s,e!==void 0?[e]:void 0)}deleteValue(s,e){let t=this.get(s);if(Array.isArray(t)){let n=t.indexOf(e);return n===-1?!1:(t.splice(n,1),t.length===0&&this.delete(s),!0)}return!1}map(s,e,t){let n=this._createLike([],e),i=0;for(let[r,o]of this)n.add(s.call(t,r,o,i++,this));return n}_createInstance(s){var t,n;let e=this.constructor;return new e([],{...(n=(t=this._snapshotOptions)==null?void 0:t.call(this))!=null?n:{},...s!=null?s:{}})}_createLike(s=[],e){var n,i;let t=this.constructor;return new t(s,{...(i=(n=this._snapshotOptions)==null?void 0:n.call(this))!=null?i:{},...e!=null?e:{}})}};var oe=class extends S{constructor(e,t,n=1,i="BLACK"){super(e,t,i);u(this,"parent");u(this,"_left");u(this,"_right");this.count=n}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},je=class extends W{constructor(e=[],t){super([],t);u(this,"_count",0);e&&this.addMany(e)}get count(){return this._count}getComputedCount(){let e=0;return this.dfs(t=>e+=t?t.count:0),e}createNode(e,t,n="BLACK",i){return new oe(e,this._isMapMode?void 0:t,i,n)}isNode(e){return e instanceof oe}add(e,t,n=1){let[i,r]=this._keyValueNodeOrEntryToNodeAndValue(e,t,n),o=(i==null?void 0:i.count)||0;return super.add(i,r)?(this._count+=o,!0):!1}delete(e,t=!1){if(e===null)return[];let n=[],i;if(this._isPredicate(e)?i=this.getNode(e):i=this.isRealNode(e)?e:this.getNode(e),!i)return n;let r=i.color,o;if(this.isRealNode(i.left))if(this.isRealNode(i.right)){let d=this.getLeftMost(a=>a,i.right);if(d){if(r=d.color,d.right!==null&&(o=d.right),d.parent===i)this.isRealNode(o)&&(o.parent=d);else{if(t||i.count<=1)d.right!==null&&(this._transplant(d,d.right),this._count-=i.count);else return i.count--,this._count--,n.push({deleted:i,needBalanced:void 0}),n;d.right=i.right,this.isRealNode(d.right)&&(d.right.parent=d)}if(t||i.count<=1)this._transplant(i,d),this._count-=i.count;else return i.count--,this._count--,n.push({deleted:i,needBalanced:void 0}),n;d.left=i.left,this.isRealNode(d.left)&&(d.left.parent=d),d.color=i.color}}else if(o=i.left,t||i.count<=1)this._transplant(i,i.left),this._count-=i.count;else return i.count--,this._count--,n.push({deleted:i,needBalanced:void 0}),n;else if(i.right!==null&&(o=i.right),t||i.count<=1)i.right!==null&&(this._transplant(i,i.right),this._count-=i.count);else return i.count--,this._count--,n.push({deleted:i,needBalanced:void 0}),n;return this._size--,r==="BLACK"&&this._deleteFixup(o),n.push({deleted:i,needBalanced:void 0}),n}clear(){super.clear(),this._count=0}perfectlyBalance(e=this.iterationType){let t=this.dfs(d=>d,"IN",!1,this._root,e),n=t.length;if(n<1)return!1;let i=0;for(let d of t)i+=d?d.count:0;this._clearNodes();let r=(d,a,l)=>{if(d>a)return;let f=d+(a-d>>1),c=t[f],V=r(d,f-1,c),p=r(f+1,a,c);return c.left=V,c.right=p,c.parent=l,c},o=r(0,n-1,void 0);return this._setRoot(o),this._size=n,this._count=i,!0}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,this));return i}clone(){let e=this._createInstance();return this._clone(e),e._count=this._count,e}_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,n=1){if(e==null)return[void 0,void 0];if(this.isNode(e))return[e,t];if(this.isEntry(e)){let[i,r]=e;if(i==null)return[void 0,void 0];let o=t!=null?t:r;return[this.createNode(i,o,"BLACK",n),o]}return[this.createNode(e,t,"BLACK",n),t]}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:n,value:i,count:r,color:o}=t,d=this.createNode(n,i,o,r);return d&&(d.color=o,t.key=e.key,this._isMapMode||(t.value=e.value),t.count=e.count,t.color=e.color,e.key=d.key,this._isMapMode||(e.value=d.value),e.count=d.count,e.color=d.color),t}}_replaceNode(e,t){return t.count=e.count+t.count,super._replaceNode(e,t)}};var de=class extends C{constructor(e,t,n=1){super(e,t);u(this,"parent");u(this,"_left");u(this,"_right");this.count=n}get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}},He=class extends G{constructor(e=[],t){super([],t);u(this,"_count",0);e&&this.addMany(e)}get count(){return this._count}getComputedCount(){let e=0;return this.dfs(t=>e+=t.count),e}createNode(e,t,n){return new de(e,this._isMapMode?void 0:t,n)}isNode(e){return e instanceof de}add(e,t,n=1){let[i,r]=this._keyValueNodeOrEntryToNodeAndValue(e,t,n);if(i===void 0)return!1;let o=(i==null?void 0:i.count)||0;return super.add(i,r)&&(this._count+=o),!0}delete(e,t=!1){var a;let n=[];if(!this.root)return n;let i=(a=this.getNode(e))!=null?a:void 0;if(!i)return n;let r=i!=null&&i.parent?i.parent:void 0,o,d=i;if(i.count>1&&!t)i.count--,this._count--;else{if(i.left){let l=i.left?this.getRightMost(f=>f,i.left):void 0;if(l){let f=l.parent;d=this._swapProperties(i,l),f&&(f.right===l?f.right=l.left:f.left=l.left,o=f)}}else if(!r)i.right!==void 0&&i.right!==null&&this._setRoot(i.right);else{let{familyPosition:l}=i;l==="LEFT"||l==="ROOT_LEFT"?r.left=i.right:(l==="RIGHT"||l==="ROOT_RIGHT")&&(r.right=i.right),o=r}this._size=this._size-1,d&&(this._count-=d.count)}return n.push({deleted:d,needBalanced:o}),o&&this._balancePath(o),n}clear(){super.clear(),this._count=0}perfectlyBalance(e=this.iterationType){let t=this.dfs(d=>d,"IN",!1,this._root,e),n=t.length;if(n===0)return!1;let i=0;for(let d of t)i+=d?d.count:0;this._clearNodes();let r=(d,a,l)=>{if(d>a)return;let f=d+(a-d>>1),c=t[f];c.left=r(d,f-1,c),c.right=r(f+1,a,c),c.parent=l;let V=c.left?c.left.height:-1,p=c.right?c.right.height:-1;return c.height=Math.max(V,p)+1,c},o=r(0,n-1,void 0);return this._setRoot(o),this._size=n,this._count=i,!0}clone(){let e=this._createInstance();return this._isMapMode?this.bfs(t=>e.add(t.key,void 0,t.count)):this.bfs(t=>e.add(t.key,t.value,t.count)),this._isMapMode&&(e._store=this._store),e}map(e,t,n){let i=this._createLike([],t),r=0;for(let[o,d]of this)i.add(e.call(n,o,d,r++,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:{}})}_keyValueNodeOrEntryToNodeAndValue(e,t,n=1){if(e==null)return[void 0,void 0];if(this.isNode(e))return[e,t];if(this.isEntry(e)){let[i,r]=e;if(i==null)return[void 0,void 0];let o=t!=null?t:r;return[this.createNode(i,o,n),o]}return[this.createNode(e,t,n),t]}_swapProperties(e,t){if(e=this.ensureNode(e),t=this.ensureNode(t),e&&t){let{key:n,value:i,count:r,height:o}=t,d=this.createNode(n,i,r);return d&&(d.height=o,t.key=e.key,this._isMapMode||(t.value=e.value),t.count=e.count,t.height=e.height,e.key=d.key,this._isMapMode||(e.value=d.value),e.count=d.count,e.height=d.height),t}}_replaceNode(e,t){return t.count=e.count+t.count,super._replaceNode(e,t)}};var Q=class extends x{constructor(s=[],e){super(s,e)}};var ze=class extends Q{constructor(s=[],e){super(s,e)}};var Ue=class extends Q{constructor(s=[],e){super(s,{comparator:(t,n)=>{if(typeof t=="object"||typeof n=="object")throw TypeError("When comparing object types, a custom comparator must be defined in the constructor's options parameter.");return t<n?1:t>n?-1:0},...e})}};var qe=class h{constructor(s,e){u(this,"_rows",0);u(this,"_cols",0);u(this,"_data");var t,n,i;if(e){let{rows:r,cols:o,addFn:d,subtractFn:a,multiplyFn:l}=e;typeof r=="number"&&r>0?this._rows=r:this._rows=s.length,typeof o=="number"&&o>0?this._cols=o:this._cols=((t=s[0])==null?void 0:t.length)||0,d&&(this._addFn=d),a&&(this._subtractFn=a),l&&(this._multiplyFn=l)}else this._rows=s.length,this._cols=(i=(n=s[0])==null?void 0:n.length)!=null?i:0;if(s.length>0)this._data=s;else{this._data=[];for(let r=0;r<this.rows;r++)this._data[r]=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(s,e){if(this.isValidIndex(s,e))return this.data[s][e]}set(s,e,t){return this.isValidIndex(s,e)?(this.data[s][e]=t,!0):!1}isMatchForCalculate(s){return this.rows===s.rows&&this.cols===s.cols}add(s){if(!this.isMatchForCalculate(s))throw new Error("Matrix dimensions must match for addition.");let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<this.cols;n++){let i=this.get(t,n),r=s.get(t,n);if(i!==void 0&&r!==void 0){let o=this._addFn(i,r);o&&(e[t][n]=o)}}}return new h(e,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}subtract(s){if(!this.isMatchForCalculate(s))throw new Error("Matrix dimensions must match for subtraction.");let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<this.cols;n++){let i=this.get(t,n),r=s.get(t,n);if(i!==void 0&&r!==void 0){let o=this._subtractFn(i,r);o&&(e[t][n]=o)}}}return new h(e,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}multiply(s){if(this.cols!==s.rows)throw new Error("Matrix dimensions must be compatible for multiplication (A.cols = B.rows).");let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<s.cols;n++){let i;for(let r=0;r<this.cols;r++){let o=this.get(t,r),d=s.get(r,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 h(e,{rows:this.rows,cols:s.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}transpose(){if(this.data.some(e=>e.length!==this.rows))throw new Error("Matrix must be rectangular for transposition.");let s=[];for(let e=0;e<this.cols;e++){s[e]=[];for(let t=0;t<this.rows;t++){let n=this.get(t,e);n!==void 0&&(s[e][t]=n)}}return new h(s,{rows:this.cols,cols:this.rows,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}inverse(){var n;if(this.rows!==this.cols)throw new Error("Matrix must be square for inversion.");let s=[];for(let i=0;i<this.rows;i++){s[i]=this.data[i].slice();for(let r=0;r<this.cols;r++)s[i][this.cols+r]=i===r?1:0}let e=new h(s,{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 r=i;for(;r<this.rows&&e.get(r,i)===0;)r++;if(r===this.rows)throw new Error("Matrix is singular, and its inverse does not exist.");e._swapRows(i,r);let o=(n=e.get(i,i))!=null?n:1;if(o===0)throw new Error("Matrix is singular, and its inverse does not exist (division by zero).");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 h(t,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}dot(s){if(this.cols!==s.rows)throw new Error("Number of columns in the first matrix must be equal to the number of rows in the second matrix for dot product.");let e=[];for(let t=0;t<this.rows;t++){e[t]=[];for(let n=0;n<s.cols;n++){let i;for(let r=0;r<this.cols;r++){let o=this.get(t,r),d=s.get(r,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 h(e,{rows:this.rows,cols:s.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}isValidIndex(s,e){return s>=0&&s<this.rows&&e>=0&&e<this.cols}clone(){return new h(this.data,{rows:this.rows,cols:this.cols,addFn:this.addFn,subtractFn:this.subtractFn,multiplyFn:this.multiplyFn})}_addFn(s,e){return s===void 0?e:s+e}_subtractFn(s,e){return s-e}_multiplyFn(s,e){return s*e}_swapRows(s,e){let t=this.data[s];this.data[s]=this.data[e],this.data[e]=t}_scaleRow(s,e){for(let t=0;t<this.cols;t++){let n=this.multiplyFn(this.data[s][t],e);n===void 0&&(n=0),this.data[s][t]=n}}_addScaledRow(s,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 r=i,o=this.addFn(this.data[s][n],r);o===void 0&&(o=0),this.data[s][n]=o}}};var me=class h{constructor(s,e){u(this,"direction");u(this,"turn");this.direction=s,this.turn=()=>new h(e[s],e)}},Ge=class{constructor({matrix:s,turning:e,onMove:t,init:{cur:n,charDir:i,VISITED:r}}){u(this,"onMove");u(this,"_matrix");u(this,"_cur");u(this,"_character");u(this,"_VISITED");this._matrix=s,this._cur=n,this._character=new me(i,e),this.onMove=t,this.onMove&&this.onMove(this._cur),this._VISITED=r,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:s}=this._character;this.check(s)?this.move(s):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(s){let e,t,n=this._matrix,[i,r]=this._cur;switch(s){case"up":if(t=n[i-1],!t)return!1;e=t[r];break;case"right":e=n[i][r+1];break;case"down":if(t=n[i+1],!t)return!1;e=t[r];break;case"left":e=n[i][r-1];break}return e!==void 0&&e!==this._VISITED}move(s){switch(s){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 ee=class{constructor(s){u(this,"_key");u(this,"_children");u(this,"_isEnd");this._key=s,this._isEnd=!1,this._children=new Map}get key(){return this._key}set key(s){this._key=s}get children(){return this._children}set children(s){this._children=s}get isEnd(){return this._isEnd}set isEnd(s){this._isEnd=s}},We=class extends L{constructor(e=[],t){super(t);u(this,"_size",0);u(this,"_caseSensitive",!0);u(this,"_root",new ee(""));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 r=t.children.get(i);r||(r=new ee(i),t.children.set(i,r)),t=r}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 ee("")}delete(e){e=this._caseProcess(e);let t=!1,n=(i,r)=>{let o=e[r],d=i.children.get(o);return d?r===e.length-1?d.isEnd?(d.children.size>0?d.isEnd=!1:i.children.delete(o),t=!0,!0):!1:n(d,r+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,r)=>{r>t&&(t=r);let{children:o}=i;if(o)for(let d of o.entries())n(d[1],r+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=[],r=0;function o(a,l){for(let f of a.children.keys()){let c=a.children.get(f);c!==void 0&&o(c,l.concat(f))}if(a.isEnd){if(r>t-1)return;i.push(l),r++}}let d=this.root;if(e)for(let a of e){let l=d.children.get(a);if(l)d=l;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 r of this)e.call(t,r,i,this)&&n.add(r),i++;return n}map(e,t,n){let i=this._createLike([],t),r=0;for(let o of this){let d=n===void 0?e(o,r++,this):e.call(n,o,r++,this);if(typeof d!="string")throw new TypeError(`Trie.map callback must return string; got ${typeof d}`);i.add(d)}return i}mapSame(e,t){let n=this._createInstance(),i=0;for(let r of this){let o=t===void 0?e(r,i++,this):e.call(t,r,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,r]of t.children)yield*e(r,n+i)}yield*e(this.root,"")}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};var Qe=class h{constructor(s,e,t){u(this,"_key");u(this,"_value");u(this,"_children");this._key=s,this._value=e||void 0,t&&(this._children=t)}get key(){return this._key}set key(s){this._key=s}get value(){return this._value}set value(s){this._value=s}get children(){return this._children}set children(s){this._children=s}addChildren(s){this._children||(this._children=[]),s instanceof h?this._children.push(s):this._children=this._children.concat(s)}getHeight(){let s=0;if(this){let e=(t,n)=>{n>s&&(s=n);let{_children:i}=t;if(i)for(let r=0,o=i.length;r<o;r++)e(i[r],n+1)};e(this,0)}return s}};return st(ht);})();
6
6
  /**
7
7
  * data-structure-typed
8
8
  *