UNPKG

data-structure-typed

Version:
1 lines 115 kB
"use strict";var dataStructureTyped=(()=>{var ae=Object.defineProperty,ot=Object.defineProperties,dt=Object.getOwnPropertyDescriptor,lt=Object.getOwnPropertyDescriptors,ut=Object.getOwnPropertyNames,et=Object.getOwnPropertySymbols;var tt=Object.prototype.hasOwnProperty,at=Object.prototype.propertyIsEnumerable;var Ee=(u,r)=>(r=Symbol[u])?r:Symbol.for("Symbol."+u),ht=u=>{throw TypeError(u)};var Ke=(u,r,e)=>r in u?ae(u,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):u[r]=e,T=(u,r)=>{for(var e in r||(r={}))tt.call(r,e)&&Ke(u,e,r[e]);if(et)for(var e of et(r))at.call(r,e)&&Ke(u,e,r[e]);return u},nt=(u,r)=>ot(u,lt(r));var ft=(u,r)=>{for(var e in r)ae(u,e,{get:r[e],enumerable:!0})},ct=(u,r,e,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of ut(r))!tt.call(u,n)&&n!==e&&ae(u,n,{get:()=>r[n],enumerable:!(t=dt(r,n))||t.enumerable});return u};var pt=u=>ct(ae({},"__esModule",{value:!0}),u);var h=(u,r,e)=>Ke(u,typeof r!="symbol"?r+"":r,e);var it=(u,r,e)=>new Promise((t,n)=>{var i=d=>{try{o(e.next(d))}catch(l){n(l)}},s=d=>{try{o(e.throw(d))}catch(l){n(l)}},o=d=>d.done?t(d.value):Promise.resolve(d.value).then(i,s);o((e=e.apply(u,r)).next())}),gt=function(u,r){this[0]=u,this[1]=r};var B=u=>{var r=u[Ee("asyncIterator")],e=!1,t,n={};return r==null?(r=u[Ee("iterator")](),t=i=>n[i]=s=>r[i](s)):(r=r.call(u),t=i=>n[i]=s=>{if(e){if(e=!1,i==="throw")throw s;return s}return e=!0,{done:!1,value:new gt(new Promise(o=>{var d=r[i](s);d instanceof Object||ht("Object expected"),o(d)}),1)}}),n[Ee("iterator")]=()=>n,t("next"),"throw"in r?t("throw"):n.throw=i=>{throw i},"return"in r&&t("return"),n};var yt={};ft(yt,{AVLTree:()=>Q,AVLTreeCounter:()=>Qe,AVLTreeCounterNode:()=>ue,AVLTreeMultiMap:()=>Ue,AVLTreeMultiMapNode:()=>Ve,AVLTreeNode:()=>F,AbstractEdge:()=>P,AbstractGraph:()=>U,AbstractVertex:()=>R,BST:()=>G,BSTNode:()=>S,BinaryIndexedTree:()=>je,BinaryTree:()=>de,BinaryTreeNode:()=>j,Character:()=>ye,DFSOperation:()=>He,Deque:()=>Ie,DirectedEdge:()=>$,DirectedGraph:()=>oe,DirectedVertex:()=>q,DoublyLinkedList:()=>Be,DoublyLinkedListNode:()=>re,FibonacciHeap:()=>Se,FibonacciHeapNode:()=>ce,HashMap:()=>Le,Heap:()=>v,IterableElementBase:()=>L,IterableEntryBase:()=>C,LinkedHashMap:()=>ve,LinkedListQueue:()=>we,MapEdge:()=>_e,MapGraph:()=>Pe,MapVertex:()=>me,Matrix:()=>Ye,MaxHeap:()=>Fe,MaxPriorityQueue:()=>Xe,MinHeap:()=>Ae,MinPriorityQueue:()=>We,Navigator:()=>Je,PriorityQueue:()=>X,Queue:()=>k,Range:()=>H,RedBlackTree:()=>W,RedBlackTreeNode:()=>A,SegmentTree:()=>ze,SegmentTreeNode:()=>ee,SinglyLinkedList:()=>ie,SinglyLinkedListNode:()=>ne,SkipList:()=>Ce,SkipListNode:()=>se,Stack:()=>Oe,THUNK_SYMBOL:()=>Te,TreeCounter:()=>Ge,TreeCounterNode:()=>le,TreeMultiMap:()=>qe,TreeMultiMapNode:()=>be,TreeNode:()=>$e,Trie:()=>Ze,TrieNode:()=>te,UndirectedEdge:()=>ge,UndirectedGraph:()=>De,UndirectedVertex:()=>pe,arrayRemove:()=>I,calcMinUnitsRequired:()=>fe,getMSB:()=>ke,isComparable:()=>w,isThunk:()=>xe,isWeakKey:()=>Y,rangeCheck:()=>O,roundFixed:()=>Vt,throwRangeError:()=>_t,toBinaryString:()=>bt,toThunk:()=>Re,trampoline:()=>he,trampolineAsync:()=>mt,uuidV4:()=>Me});var C=class{*[Symbol.iterator](...r){yield*B(this._getIterator(...r))}*entries(){for(let r of this)yield r}*keys(){for(let r of this)yield r[0]}*values(){for(let r of this)yield r[1]}every(r,e){let t=0;for(let n of this)if(!r.call(e,n[0],n[1],t++,this))return!1;return!0}some(r,e){let t=0;for(let n of this)if(r.call(e,n[0],n[1],t++,this))return!0;return!1}forEach(r,e){let t=0;for(let n of this){let[i,s]=n;r.call(e,i,s,t++,this)}}find(r,e){let t=0;for(let n of this){let[i,s]=n;if(r.call(e,i,s,t++,this))return n}}has(r){for(let e of this){let[t]=e;if(t===r)return!0}return!1}hasValue(r){for(let[,e]of this)if(e===r)return!0;return!1}get(r){for(let e of this){let[t,n]=e;if(t===r)return n}}reduce(r,e){let t=e,n=0;for(let i of this){let[s,o]=i;t=r(t,o,s,n++,this)}return t}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var L=class{constructor(r){h(this,"_toElementFn");if(r){let{toElementFn:e}=r;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](...r){yield*B(this._getIterator(...r))}*values(){for(let r of this)yield r}every(r,e){let t=0;for(let n of this)if(!r.call(e,n,t++,this))return!1;return!0}some(r,e){let t=0;for(let n of this)if(r.call(e,n,t++,this))return!0;return!1}forEach(r,e){let t=0;for(let n of this)r.call(e,n,t++,this)}find(r,e){let t=0;for(let n of this)if(r.call(e,n,t++,this))return n}has(r){for(let e of this)if(e===r)return!0;return!1}reduce(r,e){let t=e!=null?e:0,n=0;for(let i of this)t=r(t,i,n++,this);return t}toArray(){return[...this]}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var Me=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(u){let r=Math.random()*16|0;return(u=="x"?r:r&3|8).toString(16)})},I=function(u,r){let e=-1,t=u?u.length:0,n=[];for(;++e<t;){let i=u[e];r(i,e,u)&&(n.push(i),Array.prototype.splice.call(u,e--,1),t--)}return n},Te=Symbol("thunk"),xe=u=>typeof u=="function"&&u.__THUNK__===Te,Re=u=>{let r=()=>u();return r.__THUNK__=Te,r},he=u=>Object.assign((...e)=>{let t=u(...e);for(;xe(t)&&typeof t=="function";)t=t();return t},{cont:(...e)=>Re(()=>u(...e))}),mt=u=>Object.assign((...e)=>it(void 0,null,function*(){let t=yield u(...e);for(;xe(t)&&typeof t=="function";)t=yield t();return t}),{cont:(...e)=>Re(()=>u(...e))}),ke=u=>u<=0?0:1<<31-Math.clz32(u),O=(u,r,e,t="Index out of bounds.")=>{if(u<r||u>e)throw new RangeError(t)},_t=(u="The value is off-limits.")=>{throw new RangeError(u)},Y=u=>{let r=typeof u;return r==="object"&&u!==null||r==="function"},fe=(u,r)=>Math.floor((u+r-1)/r),Vt=(u,r=10)=>{let e=Math.pow(10,r);return Math.round(u*e)/e};function Ne(u){let r=typeof u;return r==="number"?!0:r==="bigint"||r==="string"||r==="boolean"}function rt(u){if(typeof u.valueOf=="function"){let r=u.valueOf();if(r!==u){if(Ne(r))return r;if(typeof r=="object"&&r!==null)return rt(r)}}if(typeof u.toString=="function"){let r=u.toString();if(r!=="[object Object]")return r}return null}function w(u,r=!1){if(u==null)return!1;if(Ne(u))return!0;if(typeof u!="object")return!1;if(u instanceof Date||r)return!0;let e=rt(u);return e==null?!1:Ne(e)}function bt(u,r=32){let e=(u>>>0).toString(2);return e=e.padStart(r,"0"),e}var Le=class u extends C{constructor(e=[],t){super();h(this,"_store",{});h(this,"_objMap",new Map);h(this,"_toEntryFn");h(this,"_size",0);h(this,"_hashFn",e=>String(e));if(t){let{hashFn:n,toEntryFn:i}=t;n&&(this._hashFn=n),i&&(this._toEntryFn=i)}e&&this.setMany(e)}get store(){return this._store}get objMap(){return this._objMap}get toEntryFn(){return this._toEntryFn}get size(){return this._size}get hashFn(){return this._hashFn}isEntry(e){return Array.isArray(e)&&e.length===2}isEmpty(){return this._size===0}clear(){this._store={},this._objMap.clear(),this._size=0}set(e,t){if(this._isObjKey(e))this.objMap.has(e)||this._size++,this.objMap.set(e,t);else{let n=this._getNoObjKey(e);this.store[n]===void 0&&this._size++,this._store[n]={key:e,value:t}}return!0}setMany(e){let t=[];for(let n of e){let i,s;if(this.isEntry(n))i=n[0],s=n[1];else if(this._toEntryFn){let o=this._toEntryFn(n);i=o[0],s=o[1]}i!==void 0&&s!==void 0&&t.push(this.set(i,s))}return t}get(e){var t;if(this._isObjKey(e))return this.objMap.get(e);{let n=this._getNoObjKey(e);return(t=this._store[n])==null?void 0:t.value}}has(e){return this._isObjKey(e)?this.objMap.has(e):this._getNoObjKey(e)in this.store}delete(e){if(this._isObjKey(e))return this.objMap.has(e)&&this._size--,this.objMap.delete(e);{let t=this._getNoObjKey(e);return t in this.store?(delete this.store[t],this._size--,!0):!1}}clone(){return new u(this,{hashFn:this._hashFn,toEntryFn:this._toEntryFn})}map(e,t){let n=new u,i=0;for(let[s,o]of this)n.set(s,e.call(t,s,o,i++,this));return n}filter(e,t){let n=new u,i=0;for(let[s,o]of this)e.call(t,s,o,i++,this)&&n.set(s,o);return n}*_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}},ve=class u extends C{constructor(e=[],t){super();h(this,"_sentinel");h(this,"_hashFn",e=>String(e));h(this,"_objHashFn",e=>e);h(this,"_noObjMap",{});h(this,"_objMap",new WeakMap);h(this,"_head");h(this,"_tail");h(this,"_toEntryFn",e=>{if(this.isEntry(e))return e;throw new Error("If the provided entryOrRawElements does not adhere to the [key, value] type format, the toEntryFn in the constructor's options parameter needs to specified.")});h(this,"_size",0);if(this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel,t){let{hashFn:n,objHashFn:i,toEntryFn:s}=t;n&&(this._hashFn=n),i&&(this._objHashFn=i),s&&(this._toEntryFn=s)}e&&this.setMany(e)}get hashFn(){return this._hashFn}get objHashFn(){return this._objHashFn}get noObjMap(){return this._noObjMap}get objMap(){return this._objMap}get head(){return this._head}get tail(){return this._tail}get toEntryFn(){return this._toEntryFn}get size(){return this._size}get first(){if(this._size!==0)return[this.head.key,this.head.value]}get last(){if(this._size!==0)return[this.tail.key,this.tail.value]}*begin(){let e=this.head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}*reverseBegin(){let e=this.tail;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.prev}set(e,t){let n,i=!this.has(e);if(Y(e)){let s=this._objHashFn(e);n=this.objMap.get(s),!n&&i?(n={key:s,value:t,prev:this.tail,next:this._sentinel},this.objMap.set(s,n)):n&&(n.value=t)}else{let s=this._hashFn(e);n=this.noObjMap[s],!n&&i?this.noObjMap[s]=n={key:e,value:t,prev:this.tail,next:this._sentinel}:n&&(n.value=t)}return n&&i&&(this._size===0?(this._head=n,this._sentinel.next=n):(this.tail.next=n,n.prev=this.tail),this._tail=n,this._sentinel.prev=n,this._size++),!0}setMany(e){let t=[];for(let n of e){let i,s;if(this.isEntry(n))i=n[0],s=n[1];else if(this._toEntryFn){let o=this._toEntryFn(n);i=o[0],s=o[1]}i!==void 0&&s!==void 0&&t.push(this.set(i,s))}return t}has(e){if(Y(e)){let t=this._objHashFn(e);return this.objMap.has(t)}else return this._hashFn(e)in this.noObjMap}get(e){if(Y(e)){let t=this._objHashFn(e),n=this.objMap.get(t);return n?n.value:void 0}else{let t=this._hashFn(e),n=this.noObjMap[t];return n?n.value:void 0}}at(e){O(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return t.value}delete(e){let t;if(Y(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),!0}deleteAt(e){O(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=new u([],{hashFn:this._hashFn,objHashFn:this._objHashFn});for(let t of this){let[n,i]=t;e.set(n,i)}return e}filter(e,t){let n=new u,i=0;for(let[s,o]of this)e.call(t,s,o,i,this)&&n.set(s,o),i++;return n}map(e,t){let n=new u,i=0;for(let[s,o]of this){let[d,l]=e.call(t,s,o,i,this);n.set(d,l),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}};var J=class{constructor(r){h(this,"_value");h(this,"_next");this._value=r,this._next=void 0}get value(){return this._value}set value(r){this._value=r}get next(){return this._next}set next(r){this._next=r}},D=class u extends L{constructor(e){super(e);h(this,"_maxLen",-1);if(e){let{maxLen:t}=e;typeof t=="number"&&t>0&&t%1===0&&(this._maxLen=t)}}get maxLen(){return this._maxLen}indexOf(e,t=0){if(this.length===0)return-1;t<0&&(t=this.length+t),t<0&&(t=0);for(let n=t;n<this.length;n++)if(this.at(n)===e)return n;return-1}lastIndexOf(e,t=this.length-1){if(this.length===0)return-1;t>=this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(let n=t;n>=0;n--)if(this.at(n)===e)return n;return-1}findIndex(e,t){for(let n=0;n<this.length;n++){let i=this.at(n);if(i!==void 0&&e.call(t,i,n,this))return n}return-1}concat(...e){let t=this.clone();for(let n of e)n instanceof u?t.pushMany(n):t.push(n);return t}sort(e){let t=this.toArray();t.sort(e),this.clear();for(let n of t)this.push(n);return this}splice(e,t=0,...n){let i=this._createInstance();e=e<0?this.length+e:e,e=Math.max(0,Math.min(e,this.length)),t=Math.max(0,Math.min(t,this.length-e));for(let s=0;s<t;s++){let o=this.deleteAt(e);o!==void 0&&i.push(o)}for(let s=0;s<n.length;s++)this.addAt(e+s,n[s]);return i}join(e=","){return this.toArray().join(e)}toReversedArray(){let e=[];for(let t=this.length-1;t>=0;t--)e.push(this.at(t));return e}reduceRight(e,t){let n=t!=null?t:0;for(let i=this.length-1;i>=0;i--)n=e(n,this.at(i),i,this);return n}slice(e=0,t=this.length){e=e<0?this.length+e:e,t=t<0?this.length+t:t;let n=this._createInstance();for(let i=e;i<t;i++)n.push(this.at(i));return n}fill(e,t=0,n=this.length){if(t=t<0?this.length+t:t,n=n<0?this.length+n:n,t<0&&(t=0),n>this.length&&(n=this.length),t>=n)return this;for(let i=t;i<n;i++)this.setAt(i,e);return this}},Z=class extends D{constructor(r){if(super(r),r){let{maxLen:e}=r;typeof e=="number"&&e>0&&e%1===0&&(this._maxLen=e)}}indexOf(r,e=0){let t=this._getIterator(),n=t.next(),i=0;for(;i<e;)n=t.next(),i++;for(;!n.done;){if(n.value===r)return i;n=t.next(),i++}return-1}lastIndexOf(r,e=this.length-1){let t=this._getReverseIterator(),n=t.next(),i=this.length-1;for(;i>e;)n=t.next(),i--;for(;!n.done;){if(n.value===r)return i;n=t.next(),i--}return-1}concat(...r){let e=this.clone();for(let t of r)t instanceof D?e.pushMany(t):e.push(t);return e}slice(r=0,e=this.length){r=r<0?this.length+r:r,e=e<0?this.length+e:e;let t=this._createInstance(),n=this._getIterator(),i=n.next(),s=0;for(;s<r;)i=n.next(),s++;for(let o=r;o<e;o++)t.push(i.value),i=n.next();return t}splice(r,e=0,...t){let n=this._createInstance();r=r<0?this.length+r:r,r=Math.max(0,Math.min(r,this.length)),e=Math.max(0,e);let i=0,s,o,d=this._getNodeIterator();for(let l of d){if(i===r){s=l;break}o=l,i++}for(let l=0;l<e&&s;l++){n.push(s.value);let a=s.next;this.delete(s),s=a}for(let l=0;l<t.length;l++)o?(this.addAfter(o,t[l]),o=o.next):(this.addAt(0,t[l]),o=this._getNodeIterator().next().value);return n}reduceRight(r,e){let t=e!=null?e:0,n=this.length-1;for(let i of this._getReverseIterator())t=r(t,i,n--,this);return t}};var ne=class extends J{constructor(e){super(e);h(this,"_next");this._value=e,this._next=void 0}get next(){return this._next}set next(e){this._next=e}},ie=class u extends Z{constructor(e=[],t){super(t);h(this,"_head");h(this,"_tail");h(this,"_length",0);this.pushMany(e)}get head(){return this._head}get tail(){return this._tail}get 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}get length(){return this._length}static fromArray(e){let t=new u;for(let n of e)t.push(n);return t}push(e){let t=this._ensureNode(e);return this.head?(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.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._length--,e.value}unshift(e){let t=this._ensureNode(e);return this.head?(t.next=this.head,this._head=t):(this._head=t,this._tail=t),this._length++,!0}pushMany(e){let t=[];for(let n of e){if(this.toElementFn){t.push(this.push(this.toElementFn(n)));continue}t.push(this.push(n))}return t}unshiftMany(e){let t=[];for(let n of e){if(this.toElementFn){t.push(this.unshift(this.toElementFn(n)));continue}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 ne}getNodeAt(e){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;let t;if(e===0)return t=this.first,this.shift(),t;let n=this.getNodeAt(e),i=this._getPrevNode(n);if(i&&n)return t=n.value,i.next=n.next,n===this.tail&&(this._tail=i),this._length--,t}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),!0;if(e===this._length)return this.push(t),!0;let n=this._ensureNode(t),i=this.getNodeAt(e-1);return n.next=i.next,i.next=n,this._length++,!0}setAt(e,t){let n=this.getNodeAt(e);return n?(n.value=t,!0):!1}isEmpty(){return this._length===0}clear(){this._head=void 0,this._tail=void 0,this._length=0}reverse(){if(!this.head||this.head===this.tail)return this;let e,t=this.head,n;for(;t;)n=t.next,t.next=e,e=t,t=n;return[this._head,this._tail]=[this.tail,this.head],this}getNode(e){if(e===void 0)return;if(this.isNode(e))return e;let t=this._ensurePredicate(e),n=this.head;for(;n;){if(t(n))return n;n=n.next}}addBefore(e,t){let n=this.getNode(e);if(!n)return!1;let i=this._getPrevNode(n),s=this._ensureNode(t);return i?(i.next=s,s.next=n,this._length++):this.unshift(s),!0}addAfter(e,t){let n=this.getNode(e);if(n){let i=this._ensureNode(t);return i.next=n.next,n.next=i,n===this.tail&&(this._tail=i),this._length++,!0}return!1}splice(e,t=0,...n){let i=this._createInstance({toElementFn:this._toElementFn,maxLen:this._maxLen});e=Math.max(0,Math.min(e,this.length)),t=Math.max(0,t);let s=e===0?void 0:this.getNodeAt(e-1),d=s?s.next:this.head;for(let f=0;f<t&&d;f++)i.push(d.value),d=d.next;let l=d,a;for(let f of n){let c=this._ensureNode(f);a?a.next=c:s?s.next=c:this._head=c,a=c}return a?a.next=l:s&&(s.next=l),l||(this._tail=a||s),this._length+=n.length-i.length,i}countOccurrences(e){let t=this._ensurePredicate(e),n=0,i=this.head;for(;i;)t(i)&&n++,i=i.next;return n}clone(){return new u(this,{toElementFn:this.toElementFn,maxLen:this._maxLen})}filter(e,t){let n=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen}),i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}map(e,t,n){let i=new u([],{toElementFn:t,maxLen:this._maxLen}),s=0;for(let o of this)i.push(e.call(n,o,s,this)),s++;return i}_createInstance(e){return new u([],e)}*_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}_isPredicate(e){return typeof e=="function"}_ensureNode(e){return this.isNode(e)?e:new ne(e)}_ensurePredicate(e){return this.isNode(e)?t=>t===e:this._isPredicate(e)?e:t=>t.value===e}_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}};var re=class extends J{constructor(e){super(e);h(this,"_next");h(this,"_prev");this._value=e,this._next=void 0,this._prev=void 0}get next(){return this._next}set next(e){this._next=e}get prev(){return this._prev}set prev(e){this._prev=e}},Be=class u extends Z{constructor(e=[],t){super(t);h(this,"_head");h(this,"_tail");h(this,"_length");if(this._head=void 0,this._tail=void 0,this._length=0,t){let{maxLen:n}=t;typeof n=="number"&&n>0&&n%1===0&&(this._maxLen=n)}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 u(e)}isNode(e){return e instanceof re}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){if(this.toElementFn){t.push(this.push(this.toElementFn(n)));continue}t.push(this.push(n))}return t}unshiftMany(e){let t=[];for(let n of e){if(this.toElementFn){t.push(this.unshift(this.toElementFn(n)));continue}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))return e;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),!0;if(e===this._length)return this.push(t),!0;let n=this._ensureNode(t),i=this.getNodeAt(e-1),s=i.next;return n.prev=i,n.next=s,i.next=n,s.prev=n,this._length++,!0}addBefore(e,t){let n=this.isNode(e)?e:this.getNode(e);if(n){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}return!1}addAfter(e,t){let n=this.isNode(e)?e:this.getNode(e);if(n){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}return!1}setAt(e,t){let n=this.getNodeAt(e);return n?(n.value=t,!0):!1}deleteAt(e){if(e<0||e>=this._length)return;let t;if(e===0)return t=this.first,this.shift(),t;if(e===this._length-1)return t=this.last,this.pop(),t;let n=this.getNodeAt(e),i=n.prev,s=n.next;return i.next=s,s.prev=i,this._length--,n==null?void 0:n.value}delete(e){let t=this.getNode(e);if(t){if(t===this.head)this.shift();else if(t===this.tail)this.pop();else{let n=t.prev,i=t.next;n&&(n.next=i),i&&(i.prev=n),this._length--}return!0}return!1}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}clone(){return new u(this,{toElementFn:this._toElementFn,maxLen:this._maxLen})}filter(e,t){let n=this._createInstance({toElementFn:this.toElementFn,maxLen:this._maxLen}),i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}map(e,t,n){let i=new u([],{toElementFn:t,maxLen:this._maxLen}),s=0;for(let o of this)i.push(e.call(n,o,s,this)),s++;return i}countOccurrences(e){let t=this._ensurePredicate(e),n=0,i=this.head;for(;i;)t(i)&&n++,i=i.next;return n}*_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}_isPredicate(e){return typeof e=="function"}_ensureNode(e){return this.isNode(e)?e:new re(e)}_ensurePredicate(e){return this.isNode(e)?t=>t===e:this._isPredicate(e)?e:t=>t.value===e}_createInstance(e){return new u([],e)}_getPrevNode(e){return e.prev}};var se=class{constructor(r,e,t){h(this,"key");h(this,"value");h(this,"forward");this.key=r,this.value=e,this.forward=new Array(t)}},Ce=class{constructor(r=[],e){h(this,"_head",new se(void 0,void 0,this.maxLevel));h(this,"_level",0);h(this,"_maxLevel",16);h(this,"_probability",.5);if(e){let{maxLevel:t,probability:n}=e;typeof t=="number"&&(this._maxLevel=t),typeof n=="number"&&(this._probability=n)}if(r)for(let[t,n]of r)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 r=this.head.forward[0];return r?r.value:void 0}get last(){let r=this.head;for(let e=this.level-1;e>=0;e--)for(;r.forward[e];)r=r.forward[e];return r.value}add(r,e){let t=new se(r,e,this._randomLevel()),n=new Array(this.maxLevel).fill(this.head),i=this.head;for(let s=this.level-1;s>=0;s--){for(;i.forward[s]&&i.forward[s].key<r;)i=i.forward[s];n[s]=i}for(let s=0;s<t.forward.length;s++)t.forward[s]=n[s].forward[s],n[s].forward[s]=t;t.forward[0]||(this._level=Math.max(this.level,t.forward.length))}get(r){let e=this.head;for(let t=this.level-1;t>=0;t--)for(;e.forward[t]&&e.forward[t].key<r;)e=e.forward[t];if(e=e.forward[0],e&&e.key===r)return e.value}has(r){return this.get(r)!==void 0}delete(r){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<r;)t=t.forward[n];e[n]=t}if(t=t.forward[0],t&&t.key===r){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(r){let e=this.head;for(let n=this.level-1;n>=0;n--)for(;e.forward[n]&&e.forward[n].key<=r;)e=e.forward[n];let t=e.forward[0];return t?t.value:void 0}lower(r){let e=this.head,t;for(let n=this.level-1;n>=0;n--){for(;e.forward[n]&&e.forward[n].key<r;)e=e.forward[n];e.key<r&&(t=e)}return t?t.value:void 0}_randomLevel(){let r=1;for(;Math.random()<this.probability&&r<this.maxLevel;)r++;return r}};var Oe=class u extends L{constructor(e=[],t){super(t);h(this,"_elements",[]);this.pushMany(e)}get elements(){return this._elements}get size(){return this.elements.length}static fromArray(e){return new u(e)}isEmpty(){return this.elements.length===0}peek(){if(!this.isEmpty())return this.elements[this.elements.length-1]}push(e){return this.elements.push(e),!0}pop(){if(!this.isEmpty())return this.elements.pop()}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.elements.indexOf(e);return this.deleteAt(t)}deleteAt(e){return this.elements.splice(e,1).length===1}clear(){this._elements=[]}clone(){return new u(this,{toElementFn:this.toElementFn})}filter(e,t){let n=new u([],{toElementFn:this.toElementFn}),i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}map(e,t,n){let i=new u([],{toElementFn:t}),s=0;for(let o of this)i.push(e.call(n,o,s,this)),s++;return i}*_getIterator(){for(let e=0;e<this.elements.length;e++)yield this.elements[e]}};var k=class u extends D{constructor(e=[],t){super(t);h(this,"_elements",[]);h(this,"_offset",0);h(this,"_autoCompactRatio",.5);if(t){let{autoCompactRatio:n=.5}=t;this._autoCompactRatio=n}this.pushMany(e)}get elements(){return this._elements}get offset(){return this._offset}get length(){return this.elements.length-this.offset}get autoCompactRatio(){return this._autoCompactRatio}set autoCompactRatio(e){this._autoCompactRatio=e}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 u(e)}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.offset/this.elements.length>this.autoCompactRatio&&this.compact(),e}delete(e){let t=this.elements.indexOf(e);return!!this.deleteAt(t)}deleteAt(e){let t=this.elements[e];return this.elements.splice(e,1),t}at(e){return this.elements[e+this._offset]}reverse(){return this._elements=this.elements.slice(this.offset).reverse(),this._offset=0,this}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)}isEmpty(){return this.length===0}clear(){this._elements=[],this._offset=0}compact(){return this._elements=this.elements.slice(this.offset),this._offset=0,!0}splice(e,t=0,...n){let i=this._createInstance();e=Math.max(0,Math.min(e,this.length)),t=Math.max(0,Math.min(t,this.length-e));let s=this.offset+e,o=this._elements.splice(s,t,...n);return i.pushMany(o),this.compact(),i}clone(){return new u(this.elements.slice(this.offset),{toElementFn:this.toElementFn,maxLen:this._maxLen})}filter(e,t){let n=this._createInstance({toElementFn:this._toElementFn,autoCompactRatio:this._autoCompactRatio,maxLen:this._maxLen}),i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}map(e,t,n){let i=new u([],{toElementFn:t,autoCompactRatio:this._autoCompactRatio,maxLen:this._maxLen}),s=0;for(let o of this)i.push(e.call(n,o,s,this)),s++;return i}*_getIterator(){for(let e of this.elements.slice(this.offset))yield e}_createInstance(e){return new u([],e)}*_getReverseIterator(){for(let e=this.length-1;e>=0;e--){let t=this.at(e);t!==void 0&&(yield t)}}},we=class u extends ie{clone(){return new u(this,{toElementFn:this.toElementFn,maxLen:this._maxLen})}};var Ie=class u extends D{constructor(e=[],t){super(t);h(this,"_bucketSize",4096);h(this,"_bucketFirst",0);h(this,"_firstInBucket",0);h(this,"_bucketLast",0);h(this,"_lastInBucket",0);h(this,"_bucketCount",0);h(this,"_buckets",[]);h(this,"_length",0);if(t){let{bucketSize:s}=t;typeof s=="number"&&(this._bucketSize=s)}let n;"length"in e?e.length instanceof Function?n=e.length():n=e.length:e.size instanceof Function?n=e.size():n=e.size,this._bucketCount=fe(n,this._bucketSize)||1;for(let s=0;s<this._bucketCount;++s)this._buckets.push(new Array(this._bucketSize));let i=fe(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]}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){O(e,0,this._length-1);let{bucketIndex:t,indexInBucket:n}=this._getBucketAndPosition(e);return this._buckets[t][n]}setAt(e,t){O(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(O(e,0,i),e===0)for(;n--;)this.unshift(t);else if(e===this._length)for(;n--;)this.push(t);else{let s=[];for(let o=e;o<this._length;++o)s.push(this.at(o));this.cut(e-1,!0);for(let o=0;o<n;++o)this.push(t);for(let o=0;o<s.length;++o)this.push(s[o])}return!0}cut(e,t=!1){if(t){if(e<0)return this.clear(),this;let{bucketIndex:n,indexInBucket:i}=this._getBucketAndPosition(e);return this._bucketLast=n,this._lastInBucket=i,this._length=e+1,this}else{let n=this._createInstance({bucketSize:this._bucketSize,toElementFn:this._toElementFn,maxLen:this._maxLen});for(let i=0;i<=e;i++)n.push(this.at(i));return n}}splice(e,t=this._length-e,...n){O(e,0,this._length),t<0&&(t=0),e+t>this._length&&(t=this._length-e);let i=this._createInstance();for(let o=0;o<t;o++)i.push(this.at(e+o));let s=[];for(let o=e+t;o<this._length;o++)s.push(this.at(o));this.cut(e-1,!0);for(let o of n)this.push(o);for(let o of s)this.push(o);return i}cutRest(e,t=!1){if(t){if(e<0)return this;let{bucketIndex:n,indexInBucket:i}=this._getBucketAndPosition(e);return this._bucketFirst=n,this._firstInBucket=i,this._length=this._length-e,this}else{let n=this._createInstance({bucketSize:this._bucketSize,toElementFn:this._toElementFn,maxLen:this._maxLen});e<0&&(e=0);for(let i=e;i<this._length;i++)n.push(this.at(i));return n}}deleteAt(e){O(e,0,this._length-1);let t;if(e===0)return this.shift();if(e===this._length-1)return t=this.last,this.pop(),t;{let n=this._length-1,{bucketIndex:i,indexInBucket:s}=this._getBucketAndPosition(e);t=this._buckets[i][s];for(let o=e;o<n;o++){let{bucketIndex:d,indexInBucket:l}=this._getBucketAndPosition(o),{bucketIndex:a,indexInBucket:f}=this._getBucketAndPosition(o+1);this._buckets[d][l]=this._buckets[a][f]}return this.pop(),t}}delete(e){let t=this._length;if(t===0)return!1;let n=0,i=0;for(;n<t;){let s=this.at(n);s!==e&&(this.setAt(i,s),i+=1),n+=1}return this.cut(i-1,!0),!0}reverse(){this._buckets.reverse().forEach(function(s){s.reverse()});let{_bucketFirst:e,_bucketLast:t,_firstInBucket:n,_lastInBucket:i}=this;return this._bucketFirst=this._bucketCount-t-1,this._bucketLast=this._bucketCount-e-1,this._firstInBucket=this._bucketSize-i-1,this._lastInBucket=this._bucketSize-n-1,this}unique(){if(this._length<=1)return this;let e=1,t=this.at(0);for(let n=1;n<this._length;++n){let i=this.at(n);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 new u(this,{bucketSize:this.bucketSize,toElementFn:this.toElementFn,maxLen:this._maxLen})}filter(e,t){let n=this._createInstance({bucketSize:this._bucketSize,toElementFn:this.toElementFn,maxLen:this._maxLen}),i=0;for(let s of this)e.call(t,s,i,this)&&n.push(s),i++;return n}map(e,t,n){let i=new u([],{bucketSize:this._bucketSize,toElementFn:t,maxLen:this._maxLen}),s=0;for(let o of this)i.push(e.call(n,o,s,this)),s++;return i}*_getIterator(){for(let e=0;e<this._length;++e)yield this.at(e)}_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){return new u([],e)}*_getReverseIterator(){for(let e=this._length-1;e>-1;e--)yield this.at(e)}};var v=class u extends L{constructor(e=[],t){super(t);h(this,"_elements",[]);h(this,"_DEFAULT_COMPARATOR",(e,t)=>{if(typeof e=="object"||typeof t=="object")throw TypeError("When comparing object types, a custom comparator must be defined in the constructor's options parameter.");return e>t?1:e<t?-1:0});h(this,"_comparator",this._DEFAULT_COMPARATOR);if(t){let{comparator:n}=t;n&&(this._comparator=n)}this.addMany(e)}get elements(){return this._elements}get size(){return this.elements.length}get leaf(){var e;return(e=this.elements[this.size-1])!=null?e:void 0}static heapify(e,t){return new u(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){t.push(this.add(this._toElementFn(n)));continue}t.push(this.add(n))}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=e,this.fix()}has(e){return this.elements.includes(e)}delete(e){let t=this.elements.indexOf(e);return t<0?!1:(t===0?this.poll():t===this.elements.length-1?this.elements.pop():(this.elements.splice(t,1,this.elements.pop()),this._bubbleUp(t),this._sinkDown(t,this.elements.length>>1)),!0)}dfs(e="PRE"){let t=[],n=i=>{let s=2*i+1,o=s+1;i<this.size&&(e==="IN"?(n(s),t.push(this.elements[i]),n(o)):e==="PRE"?(t.push(this.elements[i]),n(s),n(o)):e==="POST"&&(n(s),n(o),t.push(this.elements[i])))};return n(0),t}clone(){return new u(this,{comparator:this.comparator,toElementFn:this.toElementFn})}sort(){let e=[],t=new u(this,{comparator:this.comparator});for(;t.size!==0;){let n=t.poll();n!==void 0&&e.push(n)}return e}fix(){let e=[];for(let t=Math.floor(this.size/2);t>=0;t--)e.push(this._sinkDown(t,this.elements.length>>1));return e}filter(e,t){let n=new u([],{toElementFn:this.toElementFn,comparator:this.comparator}),i=0;for(let s of this)e.call(t,s,i,this)&&n.add(s),i++;return n}map(e,t,n,i){let s=new u([],{comparator:t,toElementFn:n}),o=0;for(let d of this)s.add(e.call(i,d,o,this)),o++;return s}get comparator(){return this._comparator}*_getIterator(){for(let e of this.elements)yield e}_bubbleUp(e){let t=this.elements[e];for(;e>0;){let n=e-1>>1,i=this.elements[n];if(this.comparator(i,t)<=0)break;this.elements[e]=i,e=n}return this.elements[e]=t,!0}_sinkDown(e,t){let n=this.elements[e];for(;e<t;){let i=e<<1|1,s=i+1,o=this.elements[i];if(s<this.elements.length&&this.comparator(o,this.elements[s])>0&&(i=s,o=this.elements[s]),this.comparator(o,n)>=0)break;this.elements[e]=o,e=i}return this.elements[e]=n,!0}},ce=class{constructor(r,e=0){h(this,"element");h(this,"degree");h(this,"left");h(this,"right");h(this,"child");h(this,"parent");h(this,"marked");this.element=r,this.degree=e,this.marked=!1}},Se=class{constructor(r){h(this,"_root");h(this,"_size",0);h(this,"_min");h(this,"_comparator");if(this.clear(),this._comparator=r||this._defaultComparator,typeof this.comparator!="function")throw new Error("FibonacciHeap constructor: given comparator should be a function.")}get root(){return this._root}get size(){return this._size}get min(){return this._min}get comparator(){return this._comparator}clear(){this._root=void 0,this._min=void 0,this._size=0}add(r){return this.push(r)}push(r){let e=this.createNode(r);return e.left=e,e.right=e,this.mergeWithRoot(e),(!this.min||this.comparator(e.element,this.min.element)<=0)&&(this._min=e),this._size++,this}peek(){return this.min?this.min.element:void 0}consumeLinkedList(r){let e=[];if(!r)return e;let t=r,n=!1;for(;!(t===r&&n);)t===r&&(n=!0),t&&(e.push(t),t=t.right);return e}mergeWithChild(r,e){r.child?(e.right=r.child.right,e.left=r.child,r.child.right.left=e,r.child.right=e):r.child=e}poll(){return this.pop()}pop(){if(this._size===0)return;let r=this.min;if(r.child){let e=this.consumeLinkedList(r.child);for(let t of e)this.mergeWithRoot(t),t.parent=void 0}return this.removeFromRoot(r),r===r.right?(this._min=void 0,this._root=void 0):(this._min=r.right,this._consolidate()),this._size--,r.element}merge(r){if(r.size!==0){if(this.root&&r.root){let e=this.root,t=r.root,n=e.right,i=t.left;e.right=t,t.left=e,n.left=i,i.right=n}(!this.min||r.min&&this.comparator(r.min.element,this.min.element)<0)&&(this._min=r.min),this._size+=r.size,r.clear()}}createNode(r){return new ce(r)}_defaultComparator(r,e){return r<e?-1:r>e?1:0}mergeWithRoot(r){this.root?(r.right=this.root.right,r.left=this.root,this.root.right.left=r,this.root.right=r):this._root=r}removeFromRoot(r){this.root===r&&(this._root=r.right),r.left&&(r.left.right=r.right),r.right&&(r.right.left=r.left)}_link(r,e){this.removeFromRoot(r),r.left=r,r.right=r,this.mergeWithChild(e,r),e.degree++,r.parent=e}_consolidate(){let r=new Array(this._size),e=this.consumeLinkedList(this.root),t,n,i,s;for(let o of e){for(t=o,i=t.degree;r[i];)n=r[i],this.comparator(t.element,n.element)>0&&(s=t,t=n,n=s),this._link(n,t),r[i]=void 0,i++;r[i]=t}for(let o=0;o<this._size;o++)r[o]&&this.comparator(r[o].element,this.min.element)<=0&&(this._min=r[o])}};var Fe=class u extends v{constructor(r=[],e){super(r,T({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))}clone(){return new u(this,{comparator:this.comparator,toElementFn:this.toElementFn})}filter(r,e){let t=new u([],{toElementFn:this.toElementFn,comparator:this.comparator}),n=0;for(let i of this)r.call(e,i,n,this)&&t.add(i),n++;return t}map(r,e,t,n){let i=new u([],{comparator:e,toElementFn:t}),s=0;for(let o of this)i.add(r.call(n,o,s,this)),s++;return i}};var Ae=class u extends v{constructor(r=[],e){super(r,e)}clone(){return new u(this,{comparator:this.comparator,toElementFn:this.toElementFn})}filter(r,e){let t=new u([],{toElementFn:this.toElementFn,comparator:this.comparator}),n=0;for(let i of this)r.call(e,i,n,this)&&t.add(i),n++;return t}map(r,e,t,n){let i=new u([],{comparator:e,toElementFn:t}),s=0;for(let o of this)i.add(r.call(n,o,s,this)),s++;return i}};var R=class{constructor(r,e){h(this,"key");h(this,"value");this.key=r,this.value=e}},P=class{constructor(r,e){h(this,"value");h(this,"weight");h(this,"_hashCode");this.weight=r!==void 0?r:1,this.value=e,this._hashCode=Me()}get hashCode(){return this._hashCode}},U=class extends C{constructor(){super();h(this,"_vertexMap",new Map)}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 R)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 P)return this._addEdge(e);if(t instanceof R||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof R&&(e=e.key),t instanceof R&&(t=t.key);let s=this.createEdge(e,t,n,i);return this._addEdge(s)}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=[],s=this._getVertex(e),o=this._getVertex(t);if(!(s&&o))return[];let d=[];for(d.push({vertex:s,path:[s]});d.length>0;){let{vertex:l,path:a}=d.pop();if(l===o&&(i.push(a),i.length>=n))return i;let f=this.getNeighbors(l);for(let c of f)if(!a.includes(c)){let g=[...a,c];d.push({vertex:c,path:g})}}return i}getPathSumWeight(e){var n;let t=0;for(let i=0;i<e.length;i++)t+=((n=this.getEdge(e[i],e[i+1]))==null?void 0:n.weight)||0;return t}getMinCostBetween(e,t,n){if(n===void 0&&(n=!1),n){let i=this.getAllPathsBetween(e,t),s=Number.MAX_SAFE_INTEGER;for(let o of i)s=Math.min(this.getPathSumWeight(o),s);return s}else{let i=this._getVertex(t),s=this._getVertex(e);if(!(s&&i))return;let o=new Map,d=new k([s]);o.set(s,!0);let l=0;for(;d.length>0;){for(let a=0;a<d.length;a++){let f=d.shift();if(f===i)return l;if(f!==void 0){let c=this.getNeighbors(f);for(let g of c)o.has(g)||(o.set(g,!0),d.push(g))}}l++}return}}getMinPathBetween(e,t,n,i=!1){var s,o;if(n===void 0&&(n=!1),n)if(i){let d=this.getAllPathsBetween(e,t,1e4),l=Number.MAX_SAFE_INTEGER,a=-1,f=0;for(let c of d){let g=this.getPathSumWeight(c);g<l&&(l=g,a=f),f++}return d[a]||void 0}else return(o=(s=this.dijkstra(e,t,!0,!0))==null?void 0:s.minPath)!=null?o:[];else{let d=[],l=this._getVertex(e),a=this._getVertex(t);if(!(l&&a))return[];let f=(c,g,p,V)=>{if(p.add(c),c===g){d=[l,...V];return}let y=this.getNeighbors(c);for(let b of y)p.has(b)||(V.push(b),f(b,g,p,V),V.pop());p.delete(c)};return f(l,a,new Set,[]),d}}dijkstraWithoutHeap(e,t=void 0,n=!1,i=!1){let s=Number.MAX_SAFE_INTEGER,o,d=[],l=[],a=this._vertexMap,f=new Map,c=new Set,g=new Map,p=this._getVertex(e),V=t?this._getVertex(t):void 0;if(!p)return;for(let _ of a){let m=_[1];m instanceof R&&f.set(m,Number.MAX_SAFE_INTEGER)}f.set(p,0),g.set(p,void 0);let y=()=>{let _=Number.MAX_SAFE_INTEGER,m;for(let[E,K]of f)c.has(E)||K<_&&(_=K,m=E);return m},b=_=>{for(let m of a){let E=m[1];if(E instanceof R){let K=[E],N=g.get(E);for(;N;)K.push(N),N=g.get(N);let M=K.reverse();m[1]===_&&(d=M),l.push(M)}}};for(let _=1;_<a.size;_++){let m=y();if(m){if(c.add(m),V&&V===m)return n&&(s=f.get(V)||Number.MAX_SAFE_INTEGER),i&&b(V),{distMap:f,preMap:g,seen:c,paths:l,minDist:s,minPath:d};let E=this.getNeighbors(m);for(let K of E)if(!c.has(K)){let N=this.getEdge(m,K);if(N){let M=f.get(m),x=f.get(K);M!==void 0&&x!==void 0&&N.weight+M<x&&(f.set(K,N.weight+M),g.set(K,m))}}}}return n&&f.forEach((_,m)=>{m!==p&&_<s&&(s=_,i&&(o=m))}),i&&b(o),{distMap:f,preMap:g,seen:c,paths:l,minDist:s,minPath:d}}dijkstra(e,t=void 0,n=!1,i=!1){var _;let s=Number.MAX_SAFE_INTEGER,o,d=[],l=[],a=this._vertexMap,f=new Map,c=new Set,g=new Map,p=this._getVertex(e),V=t?this._getVertex(t):void 0;if(!p)return;for(let m of a){let E=m[1];E instanceof R&&f.set(E,Number.MAX_SAFE_INTEGER)}let y=new v([],{comparator:(m,E)=>m.key-E.key});y.add({key:0,value:p}),f.set(p,0),g.set(p,void 0);let b=m=>{for(let E of a){let K=E[1];if(K instanceof R){let N=[K],M=g.get(K);for(;M;)N.push(M),M=g.get(M);let x=N.reverse();E[1]===m&&(d=x),l.push(x)}}};for(;y.size>0;){let m=y.poll(),E=m==null?void 0:m.key,K=m==null?void 0:m.value;if(E!==void 0&&K){if(c.add(K),V&&V===K)return n&&(s=f.get(V)||Number.MAX_SAFE_INTEGER),i&&b(V),{distMap:f,preMap:g,seen:c,paths:l,minDist:s,minPath:d};let N=this.getNeighbors(K);for(let M of N)if(!c.has(M)){let x=(_=this.getEdge(K,M))==null?void 0:_.weight;if(typeof x=="number"){let z=f.get(M);z&&E+x<z&&(y.add({key:E+x,value:M}),g.set(M,K),f.set(M,E+x))}}}}return n&&f.forEach((m,E)=>{E!==p&&m<s&&(s=m,i&&(o=E))}),i&&b(o),{distMap:f,preMap:g,seen:c,paths:l,minDist:s,minPath:d}}bellmanFord(e,t,n,i){n===void 0&&(n=!1),i===void 0&&(i=!1);let s=this._getVertex(e),o=[],d=new Map,l=new Map,a=Number.MAX_SAFE_INTEGER,f=[],c;if(t&&(c=!1),!s)return{hasNegativeCycle:c,distMap:d,preMap:l,paths:o,min:a,minPath:f};let g=this._vertexMap,p=g.size,V=this.edgeSet(),y=V.length;this._vertexMap.forEach(_=>{d.set(_,Number.MAX_SAFE_INTEGER)}),d.set(s,0);for(let _=1;_<p;++_)for(let m=0;m<y;++m){let E=this.getEndsOfEdge(V[m]);if(E){let[K,N]=E,M=V[m].weight,x=d.get(K),z=d.get(N);x!==void 0&&z!==void 0&&d.get(K)!==Number.MAX_SAFE_INTEGER&&x+M<z&&(d.set(N,x+M),i&&l.set(N,K))}}let b;if(n&&d.forEach((_,m)=>{m!==s&&_<a&&(a=_,i&&(b=m))}),i)for(let _ of g){let m=_[1];if(m instanceof R){let E=[m],K=l.get(m);for(;K!==void 0;)E.push(K),K=l.get(K);let N=E.reverse();_[1]===b&&(f=N),o.push(N)}}for(let _=0;_<y;++_){let m=this.getEndsOfEdge(V[_]);if(m){let[E]=m,K=V[_].weight,N=d.get(E);N&&N!==Number.MAX_SAFE_INTEGER&&N+K<N&&(c=!0)}}return{hasNegativeCycle:c,distMap:d,preMap:l,paths:o,min:a,minPath:f}}floydWarshall(){var s;let e=[...this._vertexMap],t=e.length,n=[],i=[];for(let o=0;o<t;o++){n[o]=[],i[o]=[];for(let d=0;d<t;d++)i[o][d]=void 0}for(let o=0;o<t;o++)for(let d=0;d<t;d++)n[o][d]=((s=this.getEdge(e[o][1],e[d][1]))==null?void 0:s.weight)||Number.MAX_SAFE_INTEGER;for(let o=0;o<t;o++)for(let d=0;d<t;d++)for(let l=0;l<t;l++)n[d][l]>n[d][o]+n[o][l]&&(n[d][l]=n[d][o]+n[o][l],i[d][l]=e[o][1]);return{costs:n,predecessor:i}}getCycles(e=!1){let t=[],n=new Set,i=(o,d,l)=>{if(l.has(o)){(