data-structure-typed 1.38.5 → 1.38.7

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 (46) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +14 -8
  3. package/dist/cjs/data-structures/binary-tree/avl-tree.js +10 -5
  4. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  5. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +59 -107
  6. package/dist/cjs/data-structures/binary-tree/binary-tree.js +72 -81
  7. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/bst.d.ts +13 -13
  9. package/dist/cjs/data-structures/binary-tree/bst.js +14 -14
  10. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +3 -3
  12. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  13. package/dist/cjs/data-structures/binary-tree/tree-multiset.d.ts +15 -11
  14. package/dist/cjs/data-structures/binary-tree/tree-multiset.js +11 -7
  15. package/dist/cjs/data-structures/binary-tree/tree-multiset.js.map +1 -1
  16. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  17. package/dist/cjs/interfaces/binary-tree.d.ts +3 -3
  18. package/dist/cjs/types/helpers.d.ts +2 -0
  19. package/dist/cjs/types/helpers.js.map +1 -1
  20. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +14 -8
  21. package/dist/mjs/data-structures/binary-tree/avl-tree.js +10 -5
  22. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +59 -107
  23. package/dist/mjs/data-structures/binary-tree/binary-tree.js +72 -81
  24. package/dist/mjs/data-structures/binary-tree/bst.d.ts +13 -13
  25. package/dist/mjs/data-structures/binary-tree/bst.js +14 -14
  26. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +3 -3
  27. package/dist/mjs/data-structures/binary-tree/tree-multiset.d.ts +15 -11
  28. package/dist/mjs/data-structures/binary-tree/tree-multiset.js +11 -7
  29. package/dist/mjs/interfaces/binary-tree.d.ts +3 -3
  30. package/dist/mjs/types/helpers.d.ts +2 -0
  31. package/dist/umd/index.global.js +1 -1
  32. package/dist/umd/index.global.js.map +1 -1
  33. package/package.json +5 -5
  34. package/src/data-structures/binary-tree/avl-tree.ts +22 -13
  35. package/src/data-structures/binary-tree/binary-tree.ts +155 -111
  36. package/src/data-structures/binary-tree/bst.ts +26 -26
  37. package/src/data-structures/binary-tree/rb-tree.ts +6 -9
  38. package/src/data-structures/binary-tree/tree-multiset.ts +24 -19
  39. package/src/data-structures/linked-list/doubly-linked-list.ts +0 -1
  40. package/src/interfaces/binary-tree.ts +3 -3
  41. package/src/types/helpers.ts +4 -0
  42. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
  43. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +1 -1
  44. package/test/unit/data-structures/binary-tree/bst.test.ts +1 -1
  45. package/test/unit/data-structures/binary-tree/overall.test.ts +20 -20
  46. package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +15 -15
@@ -178,7 +178,7 @@ class TreeMultiset extends avl_tree_1.AVLTree {
178
178
  * inserted nodes.
179
179
  * @param {(BinaryTreeNodeKey | null)[] | (N | null)[]} keysOrNodes - An array of keys or nodes to be
180
180
  * added to the multiset. Each element can be either a BinaryTreeNodeKey or a TreeMultisetNode.
181
- * @param {N['val'][]} [data] - The `data` parameter is an optional array of values that correspond
181
+ * @param {V[]} [data] - The `data` parameter is an optional array of values that correspond
182
182
  * to the keys or nodes being added to the multiset. It is used to associate additional data with
183
183
  * each key or node.
184
184
  * @returns The function `addMany` returns an array of `N`, `null`, or `undefined` values.
@@ -192,7 +192,7 @@ class TreeMultiset extends avl_tree_1.AVLTree {
192
192
  continue;
193
193
  }
194
194
  if (keyOrNode === null) {
195
- inserted.push(this.add(NaN, null, 0));
195
+ inserted.push(this.add(NaN, undefined, 0));
196
196
  continue;
197
197
  }
198
198
  inserted.push(this.add(keyOrNode, data?.[i], 1));
@@ -246,20 +246,24 @@ class TreeMultiset extends avl_tree_1.AVLTree {
246
246
  /**
247
247
  * The `delete` function in a binary search tree deletes a node from the tree and returns the deleted
248
248
  * node along with the parent node that needs to be balanced.
249
- * @param {N | BinaryTreeNodeKey} nodeOrKey - The `nodeOrKey` parameter can be either a node object
250
- * (`N`) or a key value (`BinaryTreeNodeKey`). It represents the node or key that needs to be deleted
251
- * from the binary tree.
249
+ * @param {ReturnType<C>} identifier - The `identifier` parameter is either a
250
+ * `BinaryTreeNodeKey` or a generic type `N`. It represents the property of the node that we are
251
+ * searching for. It can be a specific key value or any other property of the node.
252
+ * @param callback - The `callback` parameter is a function that takes a node as input and returns a
253
+ * value. This value is compared with the `identifier` parameter to determine if the node should be
254
+ * included in the result. The `callback` parameter has a default value of
255
+ * `this._defaultCallbackByKey`
252
256
  * @param [ignoreCount=false] - A boolean flag indicating whether to ignore the count of the node
253
257
  * being deleted. If set to true, the count of the node will not be considered and the node will be
254
258
  * deleted regardless of its count. If set to false (default), the count of the node will be
255
259
  * decremented by 1 and
256
260
  * @returns The method `delete` returns an array of `BinaryTreeDeletedResult<N>` objects.
257
261
  */
258
- delete(nodeOrKey, ignoreCount = false) {
262
+ delete(identifier, callback = this._defaultCallbackByKey, ignoreCount = false) {
259
263
  const bstDeletedResult = [];
260
264
  if (!this.root)
261
265
  return bstDeletedResult;
262
- const curr = this.get(nodeOrKey);
266
+ const curr = this.get(identifier, callback);
263
267
  if (!curr)
264
268
  return bstDeletedResult;
265
269
  const parent = curr?.parent ? curr.parent : null;
@@ -1,7 +1,7 @@
1
1
  import { BinaryTreeNode } from '../data-structures';
2
- import { BinaryTreeDeletedResult, BinaryTreeNodeKey } from '../types';
3
- export interface IBinaryTree<N extends BinaryTreeNode<N['val'], N>> {
2
+ import { BinaryTreeDeletedResult, BinaryTreeNodeKey, BinaryTreeNodeNested, MapCallback } from '../types';
3
+ export interface IBinaryTree<V = any, N extends BinaryTreeNode<V, N> = BinaryTreeNodeNested<V>> {
4
4
  createNode(key: BinaryTreeNodeKey, val?: N['val']): N;
5
5
  add(keyOrNode: BinaryTreeNodeKey | N | null, val?: N['val']): N | null | undefined;
6
- delete(nodeOrKey: N | BinaryTreeNodeKey): BinaryTreeDeletedResult<N>[];
6
+ delete<C extends MapCallback<N>>(identifier: ReturnType<C> | N, callback: C): BinaryTreeDeletedResult<N>[];
7
7
  }
@@ -1,6 +1,8 @@
1
+ import { BinaryTreeNodeKey } from './data-structures';
1
2
  export type Comparator<T> = (a: T, b: T) => number;
2
3
  export type DFSOrderPattern = 'pre' | 'in' | 'post';
3
4
  export type MapCallback<N, D = any> = (node: N) => D;
5
+ export type DefaultMapCallback<N, D = BinaryTreeNodeKey> = (node: N) => D;
4
6
  export type MapCallbackReturn<N> = ReturnType<MapCallback<N>>;
5
7
  export declare enum CP {
6
8
  lt = "lt",
@@ -1,4 +1,4 @@
1
- "use strict";var dataStructureTyped=(()=>{var ae=Object.defineProperty;var Ye=Object.getOwnPropertyDescriptor;var Ge=Object.getOwnPropertyNames;var We=Object.prototype.hasOwnProperty;var Xe=(a,e)=>{for(var t in e)ae(a,t,{get:e[t],enumerable:!0})},Qe=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ge(e))!We.call(a,n)&&n!==t&&ae(a,n,{get:()=>e[n],enumerable:!(r=Ye(e,n))||r.enumerable});return a};var Je=a=>Qe(ae({},"__esModule",{value:!0}),a);var $e={};Xe($e,{AVLTree:()=>X,AVLTreeNode:()=>H,AbstractEdge:()=>S,AbstractGraph:()=>R,AbstractVertex:()=>V,ArrayDeque:()=>xe,BST:()=>I,BSTNode:()=>M,BinaryIndexedTree:()=>Re,BinaryTree:()=>W,BinaryTreeNode:()=>L,CP:()=>ie,Character:()=>le,CoordinateMap:()=>ue,CoordinateSet:()=>de,Deque:()=>_e,DirectedEdge:()=>A,DirectedGraph:()=>Y,DirectedVertex:()=>F,DoublyLinkedList:()=>P,DoublyLinkedListNode:()=>k,FamilyPosition:()=>ne,FibonacciHeap:()=>we,FibonacciHeapNode:()=>Z,HashMap:()=>pe,HashTable:()=>he,HashTableNode:()=>q,Heap:()=>K,IterationType:()=>G,LinkedListQueue:()=>ye,MapEdge:()=>re,MapGraph:()=>Se,MapVertex:()=>te,Matrix2D:()=>Oe,MatrixNTI2D:()=>ze,MaxHeap:()=>ke,MaxPriorityQueue:()=>Ke,MinHeap:()=>Be,MinPriorityQueue:()=>Me,Navigator:()=>qe,ObjectDeque:()=>be,PriorityQueue:()=>C,Queue:()=>B,RBColor:()=>Le,RBTree:()=>Ie,RBTreeNode:()=>se,SegmentTree:()=>Fe,SegmentTreeNode:()=>z,SinglyLinkedList:()=>j,SinglyLinkedListNode:()=>w,SkipList:()=>ge,SkipListNode:()=>U,Stack:()=>me,THUNK_SYMBOL:()=>Ee,TopologicalProperty:()=>Ue,TreeMap:()=>fe,TreeMultiset:()=>De,TreeMultisetNode:()=>O,TreeNode:()=>Ae,TreeSet:()=>ce,Trie:()=>je,TrieNode:()=>Q,UndirectedEdge:()=>ee,UndirectedGraph:()=>Ce,UndirectedVertex:()=>$,Vector2D:()=>oe,arrayRemove:()=>v,getMSB:()=>ve,isThunk:()=>Ve,toThunk:()=>Te,trampoline:()=>J,trampolineAsync:()=>Ze,uuidV4:()=>Ne});var q=class{key;val;next;constructor(e,t){this.key=e,this.val=t,this.next=null}},he=class a{static DEFAULT_CAPACITY=16;static LOAD_FACTOR=.75;constructor(e=a.DEFAULT_CAPACITY,t){this._hashFn=t||this._defaultHashFn,this._capacity=Math.max(e,a.DEFAULT_CAPACITY),this._size=0,this._buckets=new Array(this._capacity).fill(null)}_capacity;get capacity(){return this._capacity}set capacity(e){this._capacity=e}_size;get size(){return this._size}_buckets;get buckets(){return this._buckets}set buckets(e){this._buckets=e}_hashFn;get hashFn(){return this._hashFn}set hashFn(e){this._hashFn=e}set(e,t){let r=this._hash(e),n=new q(e,t);if(!this._buckets[r])this._buckets[r]=n;else{let i=this._buckets[r];for(;i;){if(i.key===e){i.val=t;return}if(!i.next)break;i=i.next}i.next=n}this._size++,this._size/this._capacity>=a.LOAD_FACTOR&&this._expand()}get(e){let t=this._hash(e),r=this._buckets[t];for(;r;){if(r.key===e)return r.val;r=r.next}}delete(e){let t=this._hash(e),r=this._buckets[t],n=null;for(;r;){if(r.key===e){n?n.next=r.next:this._buckets[t]=r.next,this._size--,r.next=null;return}n=r,r=r.next}}_defaultHashFn(e){return(typeof e=="string"?this._murmurStringHashFn(e):this._objectHash(e))%this._capacity}_multiplicativeStringHashFn(e){let t=String(e),r=0;for(let n=0;n<t.length;n++){let i=t.charCodeAt(n),s=.618033988749895,o=1<<30;r=(r*s+i)%o}return Math.abs(r)}_murmurStringHashFn(e){let t=String(e),n=0;for(let i=0;i<t.length;i++){let s=t.charCodeAt(i);n=(n^s)*1540483477,n=(n^n>>>15)*668265261,n=n^n>>>15}return Math.abs(n)}_hash(e){return this.hashFn(e)}_stringHash(e){let t=0;for(let r=0;r<e.length;r++)t=t*31+e.charCodeAt(r)&4294967295;return t}_objectHash(e){return this._stringHash(JSON.stringify(e))}_expand(){let e=this._capacity*2,t=new Array(e).fill(null);for(let r of this._buckets){let n=r;for(;n;){let i=this._hash(n.key),s=new q(n.key,n.val);if(!t[i])t[i]=s;else{let o=t[i];for(;o.next;)o=o.next;o.next=s}n=n.next}}this._buckets=t,this._capacity=e}};var ue=class extends Map{constructor(e){super(),e!==void 0&&(this._joint=e)}_joint="_";get joint(){return this._joint}has(e){return super.has(e.join(this._joint))}set(e,t){return super.set(e.join(this._joint),t)}get(e){return super.get(e.join(this._joint))}delete(e){return super.delete(e.join(this._joint))}_setJoint(e){this._joint=e}};var de=class extends Set{constructor(e){super(),e!==void 0&&(this._joint=e)}_joint="_";get joint(){return this._joint}has(e){return super.has(e.join(this._joint))}add(e){return super.add(e.join(this._joint))}delete(e){return super.delete(e.join(this._joint))}_setJoint(e){this._joint=e}};var fe=class{};var ce=class{};var pe=class{constructor(e=16,t=.75,r){this._initialCapacity=e,this._loadFactor=t,this._capacityMultiplier=2,this._size=0,this._table=new Array(e),this._hashFn=r||(n=>{let i=String(n),s=0;for(let o=0;o<i.length;o++)s+=i.charCodeAt(o);return s%this.table.length})}_initialCapacity;get initialCapacity(){return this._initialCapacity}set initialCapacity(e){this._initialCapacity=e}_loadFactor;get loadFactor(){return this._loadFactor}set loadFactor(e){this._loadFactor=e}_capacityMultiplier;get capacityMultiplier(){return this._capacityMultiplier}set capacityMultiplier(e){this._capacityMultiplier=e}_size;get size(){return this._size}set size(e){this._size=e}_table;get table(){return this._table}set table(e){this._table=e}_hashFn;get hashFn(){return this._hashFn}set hashFn(e){this._hashFn=e}set(e,t){this.size/this.table.length>=this.loadFactor&&this.resizeTable(this.table.length*this.capacityMultiplier);let n=this._hash(e);this.table[n]||(this.table[n]=[]);for(let i=0;i<this.table[n].length;i++)if(this.table[n][i][0]===e){this.table[n][i][1]=t;return}this.table[n].push([e,t]),this.size++}get(e){let t=this._hash(e);if(this.table[t]){for(let[r,n]of this.table[t])if(r===e)return n}}delete(e){let t=this._hash(e);if(this.table[t]){for(let r=0;r<this.table[t].length;r++)if(this.table[t][r][0]===e){this.table[t].splice(r,1),this.size--,this.size/this.table.length<this.loadFactor/this.capacityMultiplier&&this.resizeTable(this.table.length/this.capacityMultiplier);return}}}*entries(){for(let e of this.table)if(e)for(let[t,r]of e)yield[t,r]}[Symbol.iterator](){return this.entries()}clear(){this.size=0,this.table=new Array(this.initialCapacity)}isEmpty(){return this.size===0}_hash(e){return this._hashFn(e)}resizeTable(e){let t=new Array(e);for(let r of this._table)if(r)for(let[n,i]of r){let s=this._hash(n)%e;t[s]||(t[s]=[]),t[s].push([n,i])}this._table=t}};var w=class{constructor(e){this._val=e,this._next=null}_val;get val(){return this._val}set val(e){this._val=e}_next;get next(){return this._next}set next(e){this._next=e}},j=class a{constructor(){this._head=null,this._tail=null,this._length=0}_head;get head(){return this._head}set head(e){this._head=e}_tail;get tail(){return this._tail}set tail(e){this._tail=e}_length;get length(){return this._length}static fromArray(e){let t=new a;for(let r of e)t.push(r);return t}getLength(){return this._length}push(e){let t=new w(e);this.head?(this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),this._length++}pop(){if(!this.head)return;if(this.head===this.tail){let r=this.head.val;return this.head=null,this.tail=null,this._length--,r}let e=this.head;for(;e.next!==this.tail;)e=e.next;let t=this.tail.val;return e.next=null,this.tail=e,this._length--,t}shift(){if(!this.head)return;let e=this.head;return this.head=this.head.next,this._length--,e.val}unshift(e){let t=new w(e);this.head?(t.next=this.head,this.head=t):(this.head=t,this.tail=t),this._length++}getAt(e){if(e<0||e>=this.length)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t.val}getNodeAt(e){let t=this.head;for(let r=0;r<e;r++)t=t.next;return t}deleteAt(e){if(e<0||e>=this.length)return;if(e===0)return this.shift();if(e===this.length-1)return this.pop();let t=this.getNodeAt(e-1),r=t.next;return t.next=r.next,this._length--,r.val}delete(e){if(!e)return!1;let t;e instanceof w?t=e.val:t=e;let r=this.head,n=null;for(;r;){if(r.val===t)return n===null?(this.head=r.next,r===this.tail&&(this.tail=null)):(n.next=r.next,r===this.tail&&(this.tail=n)),this._length--,!0;n=r,r=r.next}return!1}insertAt(e,t){if(e<0||e>this.length)return!1;if(e===0)return this.unshift(t),!0;if(e===this.length)return this.push(t),!0;let r=new w(t),n=this.getNodeAt(e-1);return r.next=n.next,n.next=r,this._length++,!0}isEmpty(){return this.length===0}clear(){this._head=null,this._tail=null,this._length=0}toArray(){let e=[],t=this.head;for(;t;)e.push(t.val),t=t.next;return e}reverse(){if(!this.head||this.head===this.tail)return;let e=null,t=this.head,r=null;for(;t;)r=t.next,t.next=e,e=t,t=r;[this.head,this.tail]=[this.tail,this.head]}find(e){let t=this.head;for(;t;){if(e(t.val))return t.val;t=t.next}return null}indexOf(e){let t=0,r=this.head;for(;r;){if(r.val===e)return t;t++,r=r.next}return-1}findNode(e){let t=this.head;for(;t;){if(t.val===e)return t;t=t.next}return null}insertBefore(e,t){if(!this.head)return!1;let r;if(e instanceof w?r=e.val:r=e,this.head.val===r)return this.unshift(t),!0;let n=this.head;for(;n.next;){if(n.next.val===r){let i=new w(t);return i.next=n.next,n.next=i,this._length++,!0}n=n.next}return!1}insertAfter(e,t){let r;if(e instanceof w?r=e:r=this.findNode(e),r){let n=new w(t);return n.next=r.next,r.next=n,r===this.tail&&(this.tail=n),this._length++,!0}return!1}countOccurrences(e){let t=0,r=this.head;for(;r;)r.val===e&&t++,r=r.next;return t}*[Symbol.iterator](){let e=this.head;for(;e;)yield e.val,e=e.next}};var k=class{constructor(e){this._val=e,this._next=null,this._prev=null}_val;get val(){return this._val}set val(e){this._val=e}_next;get next(){return this._next}set next(e){this._next=e}_prev;get prev(){return this._prev}set prev(e){this._prev=e}},P=class a{constructor(){this._head=null,this._tail=null,this._length=0}_head;get head(){return this._head}set head(e){this._head=e}_tail;get tail(){return this._tail}set tail(e){this._tail=e}_length;get length(){return this._length}get size(){return this.length}static fromArray(e){let t=new a;for(let r of e)t.push(r);return t}push(e){let t=new k(e);this.head?(t.prev=this.tail,this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),this._length++}addLast(e){this.push(e)}pop(){if(!this.tail)return;let e=this.tail;return this.head===this.tail?(this.head=null,this.tail=null):(this.tail=e.prev,this.tail.next=null),this._length--,e.val}pollLast(){return this.pop()}shift(){if(!this.head)return;let e=this.head;return this.head===this.tail?(this.head=null,this.tail=null):(this.head=e.next,this.head.prev=null),this._length--,e.val}pollFirst(){return this.shift()}unshift(e){let t=new k(e);this.head?(t.next=this.head,this.head.prev=t,this.head=t):(this.head=t,this.tail=t),this._length++}addFirst(e){this.unshift(e)}peekFirst(){return this.head?.val}peekLast(){return this.tail?.val}getAt(e){if(e<0||e>=this.length)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t.val}getNodeAt(e){if(e<0||e>=this.length)return null;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t}findNode(e){let t=this.head;for(;t;){if(t.val===e)return t;t=t.next}return null}insertAt(e,t){if(e<0||e>this.length)return!1;if(e===0)return this.unshift(t),!0;if(e===this.length)return this.push(t),!0;let r=new k(t),n=this.getNodeAt(e-1),i=n.next;return r.prev=n,r.next=i,n.next=r,i.prev=r,this._length++,!0}deleteAt(e){if(e<0||e>=this.length)return;if(e===0)return this.shift();if(e===this.length-1)return this.pop();let t=this.getNodeAt(e),r=t.prev,n=t.next;return r.next=n,n.prev=r,this._length--,t.val}delete(e){let t;if(e instanceof k?t=e:t=this.findNode(e),t){if(t===this.head)this.shift();else if(t===this.tail)this.pop();else{let r=t.prev,n=t.next;r.next=n,n.prev=r,this._length--}return!0}return!1}toArray(){let e=[],t=this.head;for(;t;)e.push(t.val),t=t.next;return e}isEmpty(){return this.length===0}clear(){this._head=null,this._tail=null,this._length=0}find(e){let t=this.head;for(;t;){if(e(t.val))return t.val;t=t.next}return null}indexOf(e){let t=0,r=this.head;for(;r;){if(r.val===e)return t;t++,r=r.next}return-1}findLast(e){let t=this.tail;for(;t;){if(e(t.val))return t.val;t=t.prev}return null}toArrayReverse(){let e=[],t=this.tail;for(;t;)e.push(t.val),t=t.prev;return e}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}}forEach(e){let t=this.head,r=0;for(;t;)e(t.val,r),t=t.next,r++}map(e){let t=new a,r=this.head;for(;r;)t.push(e(r.val)),r=r.next;return t}filter(e){let t=new a,r=this.head;for(;r;)e(r.val)&&t.push(r.val),r=r.next;return t}reduce(e,t){let r=t,n=this.head;for(;n;)r=e(r,n.val),n=n.next;return r}insertAfter(e,t){let r;if(e instanceof k?r=e:r=this.findNode(e),r){let n=new k(t);return n.next=r.next,r.next&&(r.next.prev=n),n.prev=r,r.next=n,r===this.tail&&(this.tail=n),this._length++,!0}return!1}insertBefore(e,t){let r;if(e instanceof k?r=e:r=this.findNode(e),r){let n=new k(t);return n.prev=r.prev,r.prev&&(r.prev.next=n),n.next=r,r.prev=n,r===this.head&&(this.head=n),this._length++,!0}return!1}};var U=class{key;value;forward;constructor(e,t,r){this.key=e,this.value=t,this.forward=new Array(r)}},ge=class{constructor(e=16,t=.5){this._head=new U(null,null,e),this._level=0,this._maxLevel=e,this._probability=t}_head;get head(){return this._head}set head(e){this._head=e}_level;get level(){return this._level}set level(e){this._level=e}_maxLevel;get maxLevel(){return this._maxLevel}set maxLevel(e){this._maxLevel=e}_probability;get probability(){return this._probability}set probability(e){this._probability=e}add(e,t){let r=new U(e,t,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<e;)i=i.forward[s];n[s]=i}for(let s=0;s<r.forward.length;s++)r.forward[s]=n[s].forward[s],n[s].forward[s]=r;r.forward[0]!==null&&(this.level=Math.max(this.level,r.forward.length))}get(e){let t=this.head;for(let r=this.level-1;r>=0;r--)for(;t.forward[r]&&t.forward[r].key<e;)t=t.forward[r];if(t=t.forward[0],t&&t.key===e)return t.value}delete(e){let t=new Array(this.maxLevel).fill(this.head),r=this.head;for(let n=this.level-1;n>=0;n--){for(;r.forward[n]&&r.forward[n].key<e;)r=r.forward[n];t[n]=r}if(r=r.forward[0],r&&r.key===e){for(let n=0;n<this.level&&t[n].forward[n]===r;n++)t[n].forward[n]=r.forward[n];for(;this.level>0&&this.head.forward[this.level-1]===null;)this.level--;return!0}return!1}randomLevel(){let e=1;for(;Math.random()<this.probability&&e<this.maxLevel;)e++;return e}};var me=class a{_elements;constructor(e){this._elements=Array.isArray(e)?e:[]}static fromArray(e){return new a(e)}isEmpty(){return this._elements.length===0}size(){return this._elements.length}peek(){return this.isEmpty()?null:this._elements[this._elements.length-1]}push(e){return this._elements.push(e),this}pop(){return this.isEmpty()?null:this._elements.pop()||null}toArray(){return this._elements.slice()}clear(){this._elements=[]}clone(){return new a(this._elements.slice())}};var ye=class extends j{enqueue(e){this.push(e)}dequeue(){return this.shift()}peek(){return this.head?.val}},B=class a{constructor(e){this._nodes=e||[],this._offset=0}_nodes;get nodes(){return this._nodes}set nodes(e){this._nodes=e}_offset;get offset(){return this._offset}set offset(e){this._offset=e}get size(){return this.nodes.length-this.offset}static fromArray(e){return new a(e)}push(e){return this.nodes.push(e),this}shift(){if(this.size===0)return;let e=this.peek();return this.offset+=1,this.offset*2<this.nodes.length||(this.nodes=this.nodes.slice(this.offset),this.offset=0),e}peek(){return this.size>0?this.nodes[this.offset]:void 0}peekLast(){return this.size>0?this.nodes[this.nodes.length-1]:void 0}enqueue(e){this.push(e)}dequeue(){return this.shift()}getAt(e){return this.nodes[e]}isEmpty(){return this.size===0}toArray(){return this.nodes.slice(this.offset)}clear(){this.nodes=[],this.offset=0}clone(){return new a(this.nodes.slice(this.offset))}*[Symbol.iterator](){for(let e of this.nodes)yield e}};var _e=class extends P{},be=class{constructor(e){e!==void 0&&(this._capacity=e)}_nodes={};get nodes(){return this._nodes}_capacity=Number.MAX_SAFE_INTEGER;get capacity(){return this._capacity}set capacity(e){this._capacity=e}_first=-1;get first(){return this._first}set first(e){this._first=e}_last=-1;get last(){return this._last}set last(e){this._last=e}_size=0;get size(){return this._size}addFirst(e){if(this._size===0){let t=Math.floor(this._capacity/2);this._first=t,this._last=t}else this._first--;this._nodes[this._first]=e,this._size++}addLast(e){if(this._size===0){let t=Math.floor(this._capacity/2);this._first=t,this._last=t}else this._last++;this._nodes[this._last]=e,this._size++}pollFirst(){if(!this._size)return;let e=this.peekFirst();return delete this._nodes[this._first],this._first++,this._size--,e}peekFirst(){if(this._size)return this._nodes[this._first]}pollLast(){if(!this._size)return;let e=this.peekLast();return delete this._nodes[this._last],this._last--,this._size--,e}peekLast(){if(this._size)return this._nodes[this._last]}get(e){return this._nodes[this._first+e]||null}isEmpty(){return this._size<=0}_seNodes(e){this._nodes=e}_setSize(e){this._size=e}},xe=class{_nodes=[];get size(){return this._nodes.length}addLast(e){return this._nodes.push(e)}pollLast(){return this._nodes.pop()??null}pollFirst(){return this._nodes.shift()??null}addFirst(e){return this._nodes.unshift(e)}peekFirst(){return this._nodes[0]??null}peekLast(){return this._nodes[this._nodes.length-1]??null}get(e){return this._nodes[e]??null}set(e,t){return this._nodes[e]=t}insert(e,t){return this._nodes.splice(e,0,t)}delete(e){return this._nodes.splice(e,1)}isEmpty(){return this._nodes.length===0}};var Ne=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(a){let e=Math.random()*16|0;return(a=="x"?e:e&3|8).toString(16)})},v=function(a,e){let t=-1,r=a?a.length:0,n=[];for(;++t<r;){let i=a[t];e(i,t,a)&&(n.push(i),Array.prototype.splice.call(a,t--,1),r--)}return n},Ee=Symbol("thunk"),Ve=a=>typeof a=="function"&&a.__THUNK__===Ee,Te=a=>{let e=()=>a();return e.__THUNK__=Ee,e},J=a=>Object.assign((...t)=>{let r=a(...t);for(;Ve(r)&&typeof r=="function";)r=r();return r},{cont:(...t)=>Te(()=>a(...t))}),Ze=a=>Object.assign(async(...t)=>{let r=await a(...t);for(;Ve(r)&&typeof r=="function";)r=await r();return r},{cont:(...t)=>Te(()=>a(...t))}),ve=a=>a<=0?0:1<<31-Math.clz32(a);var K=class a{nodes=[];comparator;constructor(e){this.comparator=e}get size(){return this.nodes.length}get leaf(){return this.nodes[this.size-1]??void 0}static heapify(e,t){let r=new a(t);return r.nodes=[...e],r.fix(),r}add(e){return this.push(e)}push(e){return this.nodes.push(e),this.bubbleUp(this.nodes.length-1),this}poll(){if(this.nodes.length===0)return;if(this.nodes.length===1)return this.nodes.pop();let e=this.nodes[0];return this.nodes[0]=this.nodes.pop(),this.sinkDown(0),e}pop(){return this.poll()}peek(){if(this.nodes.length!==0)return this.nodes[0]}isEmpty(){return this.size===0}clear(){this.nodes=[]}refill(e){this.nodes=e,this.fix()}has(e){return this.nodes.includes(e)}dfs(e){let t=[],r=n=>{n<this.size&&(e==="in"?(r(2*n+1),t.push(this.nodes[n]),r(2*n+2)):e==="pre"?(t.push(this.nodes[n]),r(2*n+1),r(2*n+2)):e==="post"&&(r(2*n+1),r(2*n+2),t.push(this.nodes[n])))};return r(0),t}toArray(){return[...this.nodes]}getNodes(){return this.nodes}clone(){let e=new a(this.comparator);return e.nodes=[...this.nodes],e}sort(){let e=[],t=this.clone();for(;t.size!==0;){let r=t.poll();r&&e.push(r)}return e}bubbleUp(e){let t=this.nodes[e];for(;e>0;){let r=Math.floor((e-1)/2),n=this.nodes[r];if(this.comparator(t,n)<0)this.nodes[e]=n,this.nodes[r]=t,e=r;else break}}sinkDown(e){let t=2*e+1,r=2*e+2,n=this.nodes.length,i=e;if(t<n&&this.comparator(this.nodes[t],this.nodes[i])<0&&(i=t),r<n&&this.comparator(this.nodes[r],this.nodes[i])<0&&(i=r),i!==e){let s=this.nodes[e];this.nodes[e]=this.nodes[i],this.nodes[i]=s,this.sinkDown(i)}}fix(){for(let e=Math.floor(this.size/2);e>=0;e--)this.sinkDown(e)}},Z=class{element;degree;left;right;child;parent;marked;constructor(e,t=0){this.element=e,this.degree=t,this.marked=!1}},we=class{root;size=0;min;comparator;constructor(e){if(this.clear(),this.comparator=e||this.defaultComparator,typeof this.comparator!="function")throw new Error("FibonacciHeap constructor: given comparator should be a function.")}clear(){this.root=void 0,this.min=void 0,this.size=0}add(e){return this.push(e)}push(e){let t=this.createNode(e);return t.left=t,t.right=t,this.mergeWithRoot(t),(!this.min||this.comparator(t.element,this.min.element)<=0)&&(this.min=t),this.size++,this}peek(){return this.min?this.min.element:void 0}consumeLinkedList(e){let t=[];if(!e)return t;let r=e,n=!1;for(;!(r===e&&n);)r===e&&(n=!0),r&&(t.push(r),r=r.right);return t}mergeWithChild(e,t){e.child?(t.right=e.child.right,t.left=e.child,e.child.right.left=t,e.child.right=t):e.child=t}poll(){return this.pop()}pop(){if(this.size===0)return;let e=this.min;if(e.child){let t=this.consumeLinkedList(e.child);for(let r of t)this.mergeWithRoot(r),r.parent=void 0}return this.removeFromRoot(e),e===e.right?(this.min=void 0,this.root=void 0):(this.min=e.right,this.consolidate()),this.size--,e.element}merge(e){if(e.size!==0){if(this.root&&e.root){let t=this.root,r=e.root,n=t.right,i=r.left;t.right=r,r.left=t,n.left=i,i.right=n}(!this.min||e.min&&this.comparator(e.min.element,this.min.element)<0)&&(this.min=e.min),this.size+=e.size,e.clear()}}defaultComparator(e,t){return e<t?-1:e>t?1:0}createNode(e){return new Z(e)}mergeWithRoot(e){this.root?(e.right=this.root.right,e.left=this.root,this.root.right.left=e,this.root.right=e):this.root=e}removeFromRoot(e){this.root===e&&(this.root=e.right),e.left&&(e.left.right=e.right),e.right&&(e.right.left=e.left)}link(e,t){this.removeFromRoot(e),e.left=e,e.right=e,this.mergeWithChild(t,e),t.degree++,e.parent=t}consolidate(){let e=new Array(this.size),t=this.consumeLinkedList(this.root),r,n,i,s;for(let o of t){for(r=o,i=r.degree;e[i];)n=e[i],this.comparator(r.element,n.element)>0&&(s=r,r=n,n=s),this.link(n,r),e[i]=void 0,i++;e[i]=r}for(let o=0;o<this.size;o++)e[o]&&this.comparator(e[o].element,this.min.element)<=0&&(this.min=e[o])}};var ke=class extends K{constructor(e=(t,r)=>{if(typeof t=="number"&&typeof r=="number")return r-t;throw new Error("The a, b params of compare function must be number")}){super(e)}};var Be=class extends K{constructor(e=(t,r)=>{if(typeof t=="number"&&typeof r=="number")return t-r;throw new Error("The a, b params of compare function must be number")}){super(e)}};var C=class extends K{constructor(e){super(e)}};var Me=class extends C{constructor(e=(t,r)=>{if(typeof t=="number"&&typeof r=="number")return t-r;throw new Error("The a, b params of compare function must be number")}){super(e)}};var Ke=class extends C{constructor(e=(t,r)=>{if(typeof t=="number"&&typeof r=="number")return r-t;throw new Error("The a, b params of compare function must be number")}){super(e)}};var V=class{constructor(e,t){this._key=e,this._val=t}_key;get key(){return this._key}set key(e){this._key=e}_val;get val(){return this._val}set val(e){this._val=e}},S=class{constructor(e,t){this._weight=e!==void 0?e:1,this._val=t,this._hashCode=Ne()}_val;get val(){return this._val}set val(e){this._val=e}_weight;get weight(){return this._weight}set weight(e){this._weight=e}_hashCode;get hashCode(){return this._hashCode}_setHashCode(e){this._hashCode=e}},R=class{_vertices=new Map;get vertices(){return this._vertices}getVertex(e){return this._vertices.get(e)||null}hasVertex(e){return this._vertices.has(this._getVertexKey(e))}addVertex(e,t){if(e instanceof V)return this._addVertexOnly(e);{let r=this.createVertex(e,t);return this._addVertexOnly(r)}}removeVertex(e){let t=this._getVertexKey(e);return this._vertices.delete(t)}removeAllVertices(e){let t=[];for(let r of e)t.push(this.removeVertex(r));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,r,n){if(e instanceof S)return this._addEdgeOnly(e);if(t instanceof V||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof V&&(e=e.key),t instanceof V&&(t=t.key);let i=this.createEdge(e,t,r,n);return this._addEdgeOnly(i)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(e,t,r){let n=this.getEdge(e,t);return n?(n.weight=r,!0):!1}getAllPathsBetween(e,t){let r=[],n=this._getVertex(e),i=this._getVertex(t);if(!(n&&i))return[];let s=(o,l,h,d)=>{h.set(o,!0),o===l&&r.push([n,...d]);let _=this.getNeighbors(o);for(let g of _)h.get(g)||(d.push(g),s(g,l,h,d),v(d,x=>x===g));h.set(o,!1)};return s(n,i,new Map,[]),r}getPathSumWeight(e){let t=0;for(let r=0;r<e.length;r++)t+=this.getEdge(e[r],e[r+1])?.weight||0;return t}getMinCostBetween(e,t,r){if(r===void 0&&(r=!1),r){let n=this.getAllPathsBetween(e,t),i=1/0;for(let s of n)i=Math.min(this.getPathSumWeight(s),i);return i}else{let n=this._getVertex(t),i=this._getVertex(e);if(!(i&&n))return null;let s=new Map,o=new B([i]);s.set(i,!0);let l=0;for(;o.size>0;){for(let h=0;h<o.size;h++){let d=o.shift();if(d===n)return l;if(d!==void 0){let _=this.getNeighbors(d);for(let g of _)s.has(g)||(s.set(g,!0),o.push(g))}}l++}return null}}getMinPathBetween(e,t,r){if(r===void 0&&(r=!1),r){let n=this.getAllPathsBetween(e,t),i=1/0,s=-1,o=0;for(let l of n){let h=this.getPathSumWeight(l);h<i&&(i=h,s=o),o++}return n[s]||null}else{let n=[],i=this._getVertex(e),s=this._getVertex(t);if(!(i&&s))return[];let o=(l,h,d,_)=>{if(d.set(l,!0),l===h){n=[i,..._];return}let g=this.getNeighbors(l);for(let x of g)d.get(x)||(_.push(x),o(x,h,d,_),v(_,E=>E===x));d.set(l,!1)};return o(i,s,new Map,[]),n}}dijkstraWithoutHeap(e,t,r,n){r===void 0&&(r=!1),n===void 0&&(n=!1),t===void 0&&(t=null);let i=1/0,s=null,o=[],l=[],h=this._vertices,d=new Map,_=new Set,g=new Map,x=this._getVertex(e),E=t?this._getVertex(t):null;if(!x)return null;for(let u of h){let f=u[1];f instanceof V&&d.set(f,1/0)}d.set(x,0),g.set(x,null);let m=()=>{let u=1/0,f=null;for(let[p,y]of d)_.has(p)||y<u&&(u=y,f=p);return f},b=u=>{for(let f of h){let p=f[1];if(p instanceof V){let y=[p],c=g.get(p);for(;c;)y.push(c),c=g.get(c);let N=y.reverse();f[1]===u&&(o=N),l.push(N)}}};for(let u=1;u<h.size;u++){let f=m();if(f){if(_.add(f),E&&E===f)return r&&(i=d.get(E)||1/0),n&&b(E),{distMap:d,preMap:g,seen:_,paths:l,minDist:i,minPath:o};let p=this.getNeighbors(f);for(let y of p)if(!_.has(y)){let c=this.getEdge(f,y);if(c){let N=d.get(f),T=d.get(y);N!==void 0&&T!==void 0&&c.weight+N<T&&(d.set(y,c.weight+N),g.set(y,f))}}}}return r&&d.forEach((u,f)=>{f!==x&&u<i&&(i=u,n&&(s=f))}),n&&b(s),{distMap:d,preMap:g,seen:_,paths:l,minDist:i,minPath:o}}dijkstra(e,t,r,n){r===void 0&&(r=!1),n===void 0&&(n=!1),t===void 0&&(t=null);let i=1/0,s=null,o=[],l=[],h=this._vertices,d=new Map,_=new Set,g=new Map,x=this._getVertex(e),E=t?this._getVertex(t):null;if(!x)return null;for(let u of h){let f=u[1];f instanceof V&&d.set(f,1/0)}let m=new C((u,f)=>u.key-f.key);m.add({key:0,val:x}),d.set(x,0),g.set(x,null);let b=u=>{for(let f of h){let p=f[1];if(p instanceof V){let y=[p],c=g.get(p);for(;c;)y.push(c),c=g.get(c);let N=y.reverse();f[1]===u&&(o=N),l.push(N)}}};for(;m.size>0;){let u=m.poll(),f=u?.key,p=u?.val;if(f!==void 0&&p){if(_.add(p),E&&E===p)return r&&(i=d.get(E)||1/0),n&&b(E),{distMap:d,preMap:g,seen:_,paths:l,minDist:i,minPath:o};let y=this.getNeighbors(p);for(let c of y)if(!_.has(c)){let N=this.getEdge(p,c)?.weight;if(typeof N=="number"){let T=d.get(c);T&&f+N<T&&(m.add({key:f+N,val:c}),g.set(c,p),d.set(c,f+N))}}}}return r&&d.forEach((u,f)=>{f!==x&&u<i&&(i=u,n&&(s=f))}),n&&b(s),{distMap:d,preMap:g,seen:_,paths:l,minDist:i,minPath:o}}bellmanFord(e,t,r,n){r===void 0&&(r=!1),n===void 0&&(n=!1);let i=this._getVertex(e),s=[],o=new Map,l=new Map,h=1/0,d=[],_;if(t&&(_=!1),!i)return{hasNegativeCycle:_,distMap:o,preMap:l,paths:s,min:h,minPath:d};let g=this._vertices,x=g.size,E=this.edgeSet(),m=E.length;this._vertices.forEach(u=>{o.set(u,1/0)}),o.set(i,0);for(let u=1;u<x;++u)for(let f=0;f<m;++f){let p=this.getEndsOfEdge(E[f]);if(p){let[y,c]=p,N=E[f].weight,T=o.get(y),D=o.get(c);T!==void 0&&D!==void 0&&o.get(y)!==1/0&&T+N<D&&(o.set(c,T+N),n&&l.set(c,y))}}let b=null;if(r&&o.forEach((u,f)=>{f!==i&&u<h&&(h=u,n&&(b=f))}),n)for(let u of g){let f=u[1];if(f instanceof V){let p=[f],y=l.get(f);for(;y!==void 0;)p.push(y),y=l.get(y);let c=p.reverse();u[1]===b&&(d=c),s.push(c)}}for(let u=0;u<m;++u){let f=this.getEndsOfEdge(E[u]);if(f){let[p]=f,y=E[u].weight,c=o.get(p);c&&c!==1/0&&c+y<c&&(_=!0)}}return{hasNegativeCycle:_,distMap:o,preMap:l,paths:s,min:h,minPath:d}}floyd(){let e=[...this._vertices],t=e.length,r=[],n=[];for(let i=0;i<t;i++){r[i]=[],n[i]=[];for(let s=0;s<t;s++)n[i][s]=null}for(let i=0;i<t;i++)for(let s=0;s<t;s++)r[i][s]=this.getEdge(e[i][1],e[s][1])?.weight||1/0;for(let i=0;i<t;i++)for(let s=0;s<t;s++)for(let o=0;o<t;o++)r[s][o]>r[s][i]+r[i][o]&&(r[s][o]=r[s][i]+r[i][o],n[s][o]=e[i][1]);return{costs:r,predecessor:n}}tarjan(e,t,r,n){e===void 0&&(e=!1),t===void 0&&(t=!1),r===void 0&&(r=!1),n===void 0&&(n=!1);let s=new Map,o=new Map,l=this._vertices;l.forEach(u=>{s.set(u,-1),o.set(u,1/0)});let[h]=l.values(),d=[],_=[],g=0,x=(u,f)=>{g++,s.set(u,g),o.set(u,g);let p=this.getNeighbors(u),y=0;for(let c of p)if(c!==f){s.get(c)===-1&&(y++,x(c,u));let N=o.get(c),T=o.get(u);T!==void 0&&N!==void 0&&o.set(u,Math.min(T,N));let D=s.get(u);if(N!==void 0&&D!==void 0&&(e&&(u===h&&y>=2||u!==h&&N>=D)&&d.push(u),t&&N>D)){let Pe=this.getEdge(u,c);Pe&&_.push(Pe)}}};x(h,null);let E=new Map,m=()=>{let u=new Map;return o.forEach((f,p)=>{u.has(f)?u.get(f)?.push(p):u.set(f,[p])}),u};r&&(E=m());let b=new Map;if(n){let u=new Map;u.size<1&&(u=m()),u.forEach((f,p)=>{f.length>1&&b.set(p,f)})}return{dfnMap:s,lowMap:o,bridges:_,articulationPoints:d,SCCs:E,cycles:b}}_addVertexOnly(e){return this.hasVertex(e)?!1:(this._vertices.set(e.key,e),!0)}_getVertex(e){let t=this._getVertexKey(e);return this._vertices.get(t)||null}_getVertexKey(e){return e instanceof V?e.key:e}_setVertices(e){this._vertices=e}};var F=class extends V{constructor(e,t){super(e,t)}},A=class extends S{constructor(e,t,r,n){super(r,n),this._src=e,this._dest=t}_src;get src(){return this._src}set src(e){this._src=e}_dest;get dest(){return this._dest}set dest(e){this._dest=e}},Y=class extends R{constructor(){super()}_outEdgeMap=new Map;get outEdgeMap(){return this._outEdgeMap}_inEdgeMap=new Map;get inEdgeMap(){return this._inEdgeMap}createVertex(e,t){return new F(e,t??e)}createEdge(e,t,r,n){return new A(e,t,r??1,n)}getEdge(e,t){let r=[];if(e!==null&&t!==null){let n=this._getVertex(e),i=this._getVertex(t);if(n&&i){let s=this._outEdgeMap.get(n);s&&(r=s.filter(o=>o.dest===i.key))}}return r[0]||null}removeEdgeSrcToDest(e,t){let r=this._getVertex(e),n=this._getVertex(t),i=null;if(!r||!n)return null;let s=this._outEdgeMap.get(r);s&&v(s,l=>l.dest===n.key);let o=this._inEdgeMap.get(n);return o&&(i=v(o,l=>l.src===r.key)[0]||null),i}removeEdge(e){let t=null,r=this._getVertex(e.src),n=this._getVertex(e.dest);if(r&&n){let i=this._outEdgeMap.get(r);i&&i.length>0&&v(i,o=>o.src===r.key);let s=this._inEdgeMap.get(n);s&&s.length>0&&(t=v(s,o=>o.dest===n.key)[0])}return t}removeEdgesBetween(e,t){let r=[];if(e&&t){let n=this.removeEdgeSrcToDest(e,t),i=this.removeEdgeSrcToDest(t,e);n&&r.push(n),i&&r.push(i)}return r}incomingEdgesOf(e){let t=this._getVertex(e);return t?this.inEdgeMap.get(t)||[]:[]}outgoingEdgesOf(e){let t=this._getVertex(e);return t?this._outEdgeMap.get(t)||[]:[]}degreeOf(e){return this.outDegreeOf(e)+this.inDegreeOf(e)}inDegreeOf(e){return this.incomingEdgesOf(e).length}outDegreeOf(e){return this.outgoingEdgesOf(e).length}edgesOf(e){return[...this.outgoingEdgesOf(e),...this.incomingEdgesOf(e)]}getEdgeSrc(e){return this._getVertex(e.src)}getEdgeDest(e){return this._getVertex(e.dest)}getDestinations(e){if(e===null)return[];let t=[],r=this.outgoingEdgesOf(e);for(let n of r){let i=this.getEdgeDest(n);i&&t.push(i)}return t}topologicalSort(e){e=e??"key";let t=new Map;for(let s of this.vertices)t.set(s[1],0);let r=[],n=!1,i=s=>{t.set(s,1);let o=this.getDestinations(s);for(let l of o){let h=t.get(l);h===0?i(l):h===1&&(n=!0)}t.set(s,2),r.push(s)};for(let s of this.vertices)t.get(s[1])===0&&i(s[1]);return n?null:(e==="key"&&(r=r.map(s=>s instanceof F?s.key:s)),r.reverse())}edgeSet(){let e=[];return this._outEdgeMap.forEach(t=>{e=[...e,...t]}),e}getNeighbors(e){let t=[],r=this._getVertex(e);if(r){let n=this.outgoingEdgesOf(r);for(let i of n){let s=this._getVertex(i.dest);s&&t.push(s)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.src,e.dest))return null;let t=this._getVertex(e.src),r=this._getVertex(e.dest);return t&&r?[t,r]:null}_addEdgeOnly(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let t=this._getVertex(e.src),r=this._getVertex(e.dest);if(t&&r){let n=this._outEdgeMap.get(t);n?n.push(e):this._outEdgeMap.set(t,[e]);let i=this._inEdgeMap.get(r);return i?i.push(e):this._inEdgeMap.set(r,[e]),!0}else return!1}_setOutEdgeMap(e){this._outEdgeMap=e}_setInEdgeMap(e){this._inEdgeMap=e}};var $=class extends V{constructor(e,t){super(e,t)}},ee=class extends S{constructor(e,t,r,n){super(r,n),this._vertices=[e,t]}_vertices;get vertices(){return this._vertices}set vertices(e){this._vertices=e}},Ce=class extends R{constructor(){super(),this._edges=new Map}_edges;get edges(){return this._edges}createVertex(e,t){return new $(e,t??e)}createEdge(e,t,r,n){return new ee(e,t,r??1,n)}getEdge(e,t){let r=[];if(e!==null&&t!==null){let n=this._getVertex(e),i=this._getVertex(t);n&&i&&(r=this._edges.get(n)?.filter(s=>s.vertices.includes(i.key)))}return r&&r[0]||null}removeEdgeBetween(e,t){let r=this._getVertex(e),n=this._getVertex(t);if(!r||!n)return null;let i=this._edges.get(r),s=null;i&&(s=v(i,l=>l.vertices.includes(n.key))[0]||null);let o=this._edges.get(n);return o&&v(o,l=>l.vertices.includes(r.key)),s}removeEdge(e){return this.removeEdgeBetween(e.vertices[0],e.vertices[1])}degreeOf(e){let t=this._getVertex(e);return t&&this._edges.get(t)?.length||0}edgesOf(e){let t=this._getVertex(e);return t?this._edges.get(t)||[]:[]}edgeSet(){let e=new Set;return this._edges.forEach(t=>{t.forEach(r=>{e.add(r)})}),[...e]}getNeighbors(e){let t=[],r=this._getVertex(e);if(r){let n=this.edgesOf(r);for(let i of n){let s=this._getVertex(i.vertices.filter(o=>o!==r.key)[0]);s&&t.push(s)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.vertices[0],e.vertices[1]))return null;let t=this._getVertex(e.vertices[0]),r=this._getVertex(e.vertices[1]);return t&&r?[t,r]:null}_addEdgeOnly(e){for(let t of e.vertices){let r=this._getVertex(t);if(r===null)return!1;if(r){let n=this._edges.get(r);n?n.push(e):this._edges.set(r,[e])}}return!0}_setEdges(e){this._edges=e}};var te=class extends F{constructor(e,t,r,n){super(e,n),this._lat=t,this._long=r}_lat;get lat(){return this._lat}set lat(e){this._lat=e}_long;get long(){return this._long}set long(e){this._long=e}},re=class extends A{constructor(e,t,r,n){super(e,t,r,n)}},Se=class extends Y{constructor(e,t){super(),this._origin=e,this._bottomRight=t}_origin=[0,0];get origin(){return this._origin}set origin(e){this._origin=e}_bottomRight;get bottomRight(){return this._bottomRight}set bottomRight(e){this._bottomRight=e}createVertex(e,t,r=this.origin[0],n=this.origin[1]){return new te(e,r,n,t)}createEdge(e,t,r,n){return new re(e,t,r,n)}};var G=(t=>(t.ITERATIVE="ITERATIVE",t.RECURSIVE="RECURSIVE",t))(G||{}),ne=(o=>(o.ROOT="ROOT",o.LEFT="LEFT",o.RIGHT="RIGHT",o.ROOT_LEFT="ROOT_LEFT",o.ROOT_RIGHT="ROOT_RIGHT",o.ISOLATED="ISOLATED",o.MAL_NODE="MAL_NODE",o))(ne||{});var Le=(t=>(t.RED="RED",t.BLACK="BLACK",t))(Le||{});var Ue=(r=>(r.VAL="VAL",r.NODE="NODE",r.ID="ID",r))(Ue||{});var ie=(r=>(r.lt="lt",r.eq="eq",r.gt="gt",r))(ie||{});var L=class{key;val;parent;constructor(e,t){this.key=e,this.val=t}_left;get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}_right;get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}get familyPosition(){let e=this;return e.parent?e.parent.left===e?e.left||e.right?"ROOT_LEFT":"LEFT":e.parent.right===e?e.left||e.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":e.left||e.right?"ROOT":"ISOLATED"}},W=class{_loopType="ITERATIVE";constructor(e){if(e!==void 0){let{iterationType:t="ITERATIVE"}=e;this._loopType=t}}_root=null;get root(){return this._root}_size=0;get size(){return this._size}get iterationType(){return this._loopType}set iterationType(e){this._loopType=e}createNode(e,t){return new L(e,t)}clear(){this._root=null,this._size=0}isEmpty(){return this.size===0}add(e,t){let r=(o,l)=>{let h=new B([o]);for(;h.size>0;){let d=h.shift();if(d){if(l&&d.key===l.key)return;let _=this._addTo(l,d);if(_!==void 0)return _;d.left&&h.push(d.left),d.right&&h.push(d.right)}else return}},n,i;if(e===null)i=null;else if(typeof e=="number")i=this.createNode(e,t);else if(e instanceof L)i=e;else return;let s=e?this.get(e,this._defaultCallbackByKey):void 0;return this.root?s?(s.val=t,n=s):n=r(this.root,i):(this._setRoot(i),i!==null?this._setSize(1):this._setSize(0),n=this.root),n}addMany(e,t){let r=[];for(let n=0;n<e.length;n++){let i=e[n];if(i instanceof L){r.push(this.add(i.key,i.val));continue}if(i===null){r.push(this.add(null));continue}let s=t?.[n];r.push(this.add(i,s))}return r}refill(e,t){return this.clear(),e.length===this.addMany(e,t).length}delete(e){let t=[];if(!this.root)return t;let r=typeof e=="number"?this.get(e):e;if(!r)return t;let n=r?.parent?r.parent:null,i=null,s=r;if(r.left){let o=r.left?this.getRightMost(r.left):null;if(o){let l=o.parent;s=this._swap(r,o),l&&(l.right===o?l.right=o.left:l.left=o.left,i=l)}}else if(!n)r.right!==void 0&&this._setRoot(r.right);else{let{familyPosition:o}=r;o==="LEFT"||o==="ROOT_LEFT"?n.left=r.right:(o==="RIGHT"||o==="ROOT_RIGHT")&&(n.right=r.right),i=n}return this._setSize(this.size-1),t.push({deleted:s,needBalanced:i}),t}getDepth(e,t=this.root){typeof e=="number"&&(e=this.get(e)),typeof t=="number"&&(t=this.get(t));let r=0;for(;e?.parent;){if(e===t)return r;r++,e=e.parent}return r}getHeight(e=this.root,t=this.iterationType){if(typeof e=="number"&&(e=this.get(e)),!e)return-1;if(t==="RECURSIVE"){let r=n=>{if(!n)return-1;let i=r(n.left),s=r(n.right);return Math.max(i,s)+1};return r(e)}else{if(!e)return-1;let r=[{node:e,depth:0}],n=0;for(;r.length>0;){let{node:i,depth:s}=r.pop();i.left&&r.push({node:i.left,depth:s+1}),i.right&&r.push({node:i.right,depth:s+1}),n=Math.max(n,s)}return n}}getMinHeight(e=this.root,t=this.iterationType){if(!e)return-1;if(t==="RECURSIVE"){let r=n=>{if(!n||!n.left&&!n.right)return 0;let i=r(n.left),s=r(n.right);return Math.min(i,s)+1};return r(e)}else{let r=[],n=e,i=null,s=new Map;for(;r.length>0||n;)if(n)r.push(n),n=n.left;else if(n=r[r.length-1],!n.right||i===n.right){if(n=r.pop(),n){let o=n.left?s.get(n.left)??-1:-1,l=n.right?s.get(n.right)??-1:-1;s.set(n,1+Math.min(o,l)),i=n,n=null}}else n=n.right;return s.get(e)??-1}}isPerfectlyBalanced(e=this.root){return this.getMinHeight(e)+1>=this.getHeight(e)}getNodes(e,t=this._defaultCallbackByKey,r=!1,n=this.root,i=this.iterationType){if(!n)return[];let s=[];if(i==="RECURSIVE"){let o=l=>{t(l)===e&&(s.push(l),r)||!l.left&&!l.right||(l.left&&o(l.left),l.right&&o(l.right))};o(n)}else{let o=new B([n]);for(;o.size>0;){let l=o.shift();if(l){if(t(l)===e&&(s.push(l),r))return s;l.left&&o.push(l.left),l.right&&o.push(l.right)}}}return s}has(e,t=this._defaultCallbackByKey,r=this.root,n=this.iterationType){return this.getNodes(e,t,!0,r,n).length>0}get(e,t=this._defaultCallbackByKey,r=this.root,n=this.iterationType){return this.getNodes(e,t,!0,r,n)[0]??null}getPathToRoot(e,t=!0){let r=[];for(;e.parent;)r.push(e),e=e.parent;return r.push(e),t?r.reverse():r}getLeftMost(e=this.root,t=this.iterationType){if(typeof e=="number"&&(e=this.get(e)),!e)return e;if(t==="RECURSIVE"){let r=n=>n.left?r(n.left):n;return r(e)}else{let r=J(n=>n.left?r.cont(n.left):n);return r(e)}}getRightMost(e=this.root,t=this.iterationType){if(!e)return e;if(t==="RECURSIVE"){let r=n=>n.right?r(n.right):n;return r(e)}else{let r=J(n=>n.right?r.cont(n.right):n);return r(e)}}isSubtreeBST(e,t=this.iterationType){if(!e)return!0;if(t==="RECURSIVE"){let r=(n,i,s)=>n?n.key<=i||n.key>=s?!1:r(n.left,i,n.key)&&r(n.right,n.key,s):!0;return r(e,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER)}else{let r=[],n=Number.MIN_SAFE_INTEGER,i=e;for(;i||r.length>0;){for(;i;)r.push(i),i=i.left;if(i=r.pop(),!i||n>=i.key)return!1;n=i.key,i=i.right}return!0}}isBST(e=this.iterationType){return this.root===null?!0:this.isSubtreeBST(this.root,e)}subTreeTraverse(e=this._defaultCallbackByKey,t=this.root,r=this.iterationType){typeof t=="number"&&(t=this.get(t));let n=[];if(!t)return n;if(r==="RECURSIVE"){let i=s=>{n.push(e(s)),s.left&&i(s.left),s.right&&i(s.right)};i(t)}else{let i=[t];for(;i.length>0;){let s=i.pop();n.push(e(s)),s.right&&i.push(s.right),s.left&&i.push(s.left)}}return n}dfs(e=this._defaultCallbackByKey,t="in",r=this.root,n="ITERATIVE"){if(!r)return[];let i=[];if(n==="RECURSIVE"){let s=o=>{switch(t){case"in":o.left&&s(o.left),i.push(e(o)),o.right&&s(o.right);break;case"pre":i.push(e(o)),o.left&&s(o.left),o.right&&s(o.right);break;case"post":o.left&&s(o.left),o.right&&s(o.right),i.push(e(o));break}};s(r)}else{let s=[{opt:0,node:r}];for(;s.length>0;){let o=s.pop();if(!(!o||!o.node))if(o.opt===1)i.push(e(o.node));else switch(t){case"in":s.push({opt:0,node:o.node.right}),s.push({opt:1,node:o.node}),s.push({opt:0,node:o.node.left});break;case"pre":s.push({opt:0,node:o.node.right}),s.push({opt:0,node:o.node.left}),s.push({opt:1,node:o.node});break;case"post":s.push({opt:1,node:o.node}),s.push({opt:0,node:o.node.right}),s.push({opt:0,node:o.node.left});break;default:s.push({opt:0,node:o.node.right}),s.push({opt:1,node:o.node}),s.push({opt:0,node:o.node.left});break}}}return i}bfs(e=this._defaultCallbackByKey,t=!1,r=this.root,n=this.iterationType){if(!r)return[];let i=[];if(n==="RECURSIVE"){let s=(o,l)=>{e&&i.push(e(o,t?l:void 0)),o.left&&s(o.left,l+1),o.right&&s(o.right,l+1)};s(r,0)}else{let s=[[r,0]];for(;s.length>0;){let o=s.pop(),[l,h]=o;e&&i.push(e(l,t?h:void 0)),l.right&&s.push([l.right,h+1]),l.left&&s.push([l.left,h+1])}}return i}getPredecessor(e){if(e.left){let t=e.left;for(;!t||t.right&&t.right!==e;)t&&(t=t.right);return t}else return e}morris(e=this._defaultCallbackByKey,t="in",r=this.root){if(r===null)return[];let n=[],i=r,s=l=>{let h=null,d=null;for(;l;)d=l.right,l.right=h,h=l,l=d;return h},o=l=>{let h=s(l),d=h;for(;d;)n.push(e(d)),d=d.right;s(h)};switch(t){case"in":for(;i;){if(i.left){let l=this.getPredecessor(i);if(l.right)l.right=null;else{l.right=i,i=i.left;continue}}n.push(e(i)),i=i.right}break;case"pre":for(;i;){if(i.left){let l=this.getPredecessor(i);if(l.right)l.right=null;else{l.right=i,n.push(e(i)),i=i.left;continue}}else n.push(e(i));i=i.right}break;case"post":for(;i;){if(i.left){let l=this.getPredecessor(i);if(l.right===null){l.right=i,i=i.left;continue}else l.right=null,o(i.left)}i=i.right}o(r);break}return n}_swap(e,t){let{key:r,val:n}=t,i=this.createNode(r,n);return i&&(t.key=e.key,t.val=e.val,e.key=i.key,e.val=i.val),t}_defaultCallbackByKey=e=>e.key;_addTo(e,t){if(t)return t.left===void 0?(t.left=e,e&&this._setSize(this.size+1),t.left):t.right===void 0?(t.right=e,e&&this._setSize(this.size+1),t.right):void 0}_setRoot(e){e&&(e.parent=void 0),this._root=e}_setSize(e){this._size=e}};var M=class extends L{constructor(e,t){super(e,t)}},I=class extends W{constructor(e){if(super(e),e!==void 0){let{comparator:t}=e;t!==void 0&&(this._comparator=t)}}createNode(e,t){return new M(e,t)}add(e,t){let r=null,n=null;if(e instanceof M?n=e:typeof e=="number"?n=this.createNode(e,t):e===null&&(n=null),this.root===null)this._setRoot(n),this._setSize(this.size+1),r=this.root;else{let i=this.root,s=!0;for(;s;)i!==null&&n!==null?this._compare(i.key,n.key)==="eq"?(n&&(i.val=n.val),s=!1,r=i):this._compare(i.key,n.key)==="gt"?i.left===void 0?(n&&(n.parent=i),i.left=n,this._setSize(this.size+1),s=!1,r=i.left):i.left&&(i=i.left):this._compare(i.key,n.key)==="lt"&&(i.right===void 0?(n&&(n.parent=i),i.right=n,this._setSize(this.size+1),s=!1,r=i.right):i.right&&(i=i.right)):s=!1}return r}addMany(e,t,r=!0,n=this.iterationType){function i(m){return m.indexOf(null)===-1}if(!r||!i(e))return super.addMany(e,t);let s=[],o=e.map((m,b)=>[m,t?.[b]]),l=[];function h(m){for(let[b]of m)if(b instanceof M)return!0;return!1}function d(m){for(let[b]of m)if(typeof b=="number")return!0;return!1}let _=[],g=[];if(h(o))l=o.sort((m,b)=>m[0].key-b[0].key);else if(d(o))l=o.sort((m,b)=>m[0]-b[0]);else throw new Error("Invalid input keysOrNodes");_=l.map(([m])=>m),g=l.map(([,m])=>m);let x=(m,b)=>{if(m.length===0)return;let u=Math.floor((m.length-1)/2),f=this.add(m[u],b?.[u]);s.push(f),x(m.slice(0,u),b?.slice(0,u)),x(m.slice(u+1),b?.slice(u+1))},E=()=>{let b=[[0,l.length-1]];for(;b.length>0;){let u=b.pop();if(u){let[f,p]=u;if(f<=p){let y=f+Math.floor((p-f)/2),c=this.add(_[y],g?.[y]);s.push(c),b.push([y+1,p]),b.push([f,y-1])}}}};return n==="RECURSIVE"?x(_,g):E(),s}get(e,t=this._defaultCallbackByKey,r=this.root,n=this.iterationType){return this.getNodes(e,t,!0,r,n)[0]??null}lastKey(e=this.root,t=this.iterationType){return this._compare(0,1)==="lt"?this.getRightMost(e,t)?.key??0:this._compare(0,1)==="gt"?this.getLeftMost(e,t)?.key??0:this.getRightMost(e,t)?.key??0}getNodes(e,t=this._defaultCallbackByKey,r=!1,n=this.root,i=this.iterationType){if(!n)return[];let s=[];if(i==="RECURSIVE"){let o=l=>{t(l)===e&&(s.push(l),r)||!l.left&&!l.right||(t===this._defaultCallbackByKey?(this._compare(l.key,e)==="gt"&&l.left&&o(l.left),this._compare(l.key,e)==="lt"&&l.right&&o(l.right)):(l.left&&o(l.left),l.right&&o(l.right)))};o(n)}else{let o=new B([n]);for(;o.size>0;){let l=o.shift();if(l){if(t(l)===e&&(s.push(l),r))return s;t===this._defaultCallbackByKey?(this._compare(l.key,e)==="gt"&&l.left&&o.push(l.left),this._compare(l.key,e)==="lt"&&l.right&&o.push(l.right)):(l.left&&o.push(l.left),l.right&&o.push(l.right))}}}return s}lesserOrGreaterTraverse(e=this._defaultCallbackByKey,t="lt",r=this.root,n=this.iterationType){typeof r=="number"&&(r=this.get(r));let i=[];if(!r)return i;let s=r.key;if(!this.root)return i;if(n==="RECURSIVE"){let o=l=>{this._compare(l.key,s)===t&&i.push(e(l)),!(!l.left&&!l.right)&&(l.left&&this._compare(l.left.key,s)===t&&o(l.left),l.right&&this._compare(l.right.key,s)===t&&o(l.right))};return o(this.root),i}else{let o=new B([this.root]);for(;o.size>0;){let l=o.shift();l&&(this._compare(l.key,s)===t&&i.push(e(l)),l.left&&this._compare(l.left.key,s)===t&&o.push(l.left),l.right&&this._compare(l.right.key,s)===t&&o.push(l.right))}return i}}perfectlyBalance(e=this.iterationType){let t=this.dfs(n=>n,"in"),r=t.length;if(this.clear(),t.length<1)return!1;if(e==="RECURSIVE"){let n=(i,s)=>{if(i>s)return;let o=i+Math.floor((s-i)/2),l=t[o];this.add(l.key,l.val),n(i,o-1),n(o+1,s)};return n(0,r-1),!0}else{let n=[[0,r-1]];for(;n.length>0;){let i=n.pop();if(i){let[s,o]=i;if(s<=o){let l=s+Math.floor((o-s)/2),h=t[l];this.add(h.key,h.val),n.push([l+1,o]),n.push([s,l-1])}}}return!0}}isAVLBalanced(e=this.iterationType){if(!this.root)return!0;let t=!0;if(e==="RECURSIVE"){let r=n=>{if(!n)return 0;let i=r(n.left),s=r(n.right);return Math.abs(i-s)>1&&(t=!1),Math.max(i,s)+1};r(this.root)}else{let r=[],n=this.root,i=null,s=new Map;for(;r.length>0||n;)if(n)r.push(n),n=n.left;else if(n=r[r.length-1],!n.right||i===n.right){if(n=r.pop(),n){let o=n.left?s.get(n.left)??-1:-1,l=n.right?s.get(n.right)??-1:-1;if(Math.abs(o-l)>1)return!1;s.set(n,1+Math.max(o,l)),i=n,n=null}}else n=n.right}return t}_comparator=(e,t)=>e-t;_compare(e,t){let r=this._comparator(e,t);return r>0?"gt":r<0?"lt":"eq"}};var Re=class{_freq;_max;constructor({frequency:e=0,max:t}){this._freq=e,this._max=t,this._freqMap={0:0},this._msb=ve(t),this._negativeCount=e<0?t:0}_freqMap;get freqMap(){return this._freqMap}set freqMap(e){this._freqMap=e}_msb;get msb(){return this._msb}set msb(e){this._msb=e}_negativeCount;get negativeCount(){return this._negativeCount}set negativeCount(e){this._negativeCount=e}get freq(){return this._freq}get max(){return this._max}readSingle(e){return this._checkIndex(e),this._readSingle(e)}update(e,t){this._checkIndex(e);let r=this._readSingle(e);this._update(e,t),this._updateNegativeCount(r,r+t)}writeSingle(e,t){this._checkIndex(e),this._writeSingle(e,t)}read(e){if(!Number.isInteger(e))throw new Error("Invalid count");return this._read(Math.max(Math.min(e,this.max),0))}lowerBound(e){if(this.negativeCount>0)throw new Error("Sequence is not non-descending");return this._binarySearch(e,(t,r)=>t<r)}upperBound(e){if(this.negativeCount>0)throw new Error("Must not be descending");return this._binarySearch(e,(t,r)=>t<=r)}_getFrequency(e){return e in this.freqMap?this.freqMap[e]:this.freq*(e&-e)}_updateFrequency(e,t){this.freqMap[e]=this._getFrequency(e)+t}_checkIndex(e){if(!Number.isInteger(e))throw new Error("Invalid index: Index must be an integer.");if(e<0||e>=this.max)throw new Error("Index out of range: Index must be within the range [0, this.max).")}_readSingle(e){e=e+1;let t=this._getFrequency(e),r=e-(e&-e);for(e--;e!==r;)t-=this._getFrequency(e),e-=e&-e;return t}_updateNegativeCount(e,t){e<0&&t>=0?this.negativeCount--:e>=0&&t<0&&this.negativeCount++}_update(e,t){for(e=e+1;e<=this.max;)this._updateFrequency(e,t),e+=e&-e}_writeSingle(e,t){let r=this._readSingle(e);this._update(e,t-r),this._updateNegativeCount(r,t)}_read(e){let t=e,r=0;for(;t;)r+=this._getFrequency(t),t-=t&-t;return r}_binarySearch(e,t){let r=0,n=this.msb<<1,i=e;for(;n>r+1;){let s=r+n>>1,o=this._getFrequency(s);s<=this.max&&t(o,i)?(i-=o,r=s):n=s}return r}};var z=class{constructor(e,t,r,n){this._start=e,this._end=t,this._sum=r,this._val=n||null}_start=0;get start(){return this._start}set start(e){this._start=e}_end=0;get end(){return this._end}set end(e){this._end=e}_val=null;get val(){return this._val}set val(e){this._val=e}_sum=0;get sum(){return this._sum}set sum(e){this._sum=e}_left=null;get left(){return this._left}set left(e){this._left=e}_right=null;get right(){return this._right}set right(e){this._right=e}},Fe=class{constructor(e,t,r){t=t||0,r=r||e.length-1,this._values=e,this._start=t,this._end=r,e.length>0?this._root=this.build(t,r):(this._root=null,this._values=[])}_values=[];get values(){return this._values}_start=0;get start(){return this._start}_end;get end(){return this._end}_root;get root(){return this._root}build(e,t){if(e>t)return new z(e,t,0);if(e===t)return new z(e,t,this._values[e]);let r=e+Math.floor((t-e)/2),n=this.build(e,r),i=this.build(r+1,t),s=new z(e,t,n.sum+i.sum);return s.left=n,s.right=i,s}updateNode(e,t,r){let n=this.root||null;if(!n)return;let i=(s,o,l,h)=>{if(s.start===s.end&&s.start===o){s.sum=l,h!==void 0&&(s.val=h);return}let d=s.start+Math.floor((s.end-s.start)/2);o<=d?s.left&&i(s.left,o,l,h):s.right&&i(s.right,o,l,h),s.left&&s.right&&(s.sum=s.left.sum+s.right.sum)};i(n,e,t,r)}querySumByRange(e,t){let r=this.root||null;if(!r)return 0;if(e<0||t>=this.values.length||e>t)return NaN;let n=(i,s,o)=>{if(s<=i.start&&o>=i.end)return i.sum;let l=i.start+Math.floor((i.end-i.start)/2);if(o<=l)return i.left?n(i.left,s,o):NaN;if(s>l)return i.right?n(i.right,s,o):NaN;{let h=0,d=0;return i.left&&(h=n(i.left,s,l)),i.right&&(d=n(i.right,l+1,o)),h+d}};return n(r,e,t)}_setValues(e){this._values=e}_setStart(e){this._start=e}_setEnd(e){this._end=e}_setRoot(e){this._root=e}};var H=class extends M{height;constructor(e,t){super(e,t),this.height=0}},X=class extends I{constructor(e){super(e)}createNode(e,t){return new H(e,t)}add(e,t){let r=super.add(e,t);return r&&this._balancePath(r),r}delete(e){let t=super.delete(e);for(let{needBalanced:r}of t)r&&this._balancePath(r);return t}_swap(e,t){let{key:r,val:n,height:i}=t,s=this.createNode(r,n);return s&&(s.height=i,t.key=e.key,t.val=e.val,t.height=e.height,e.key=s.key,e.val=s.val,e.height=s.height),t}_balanceFactor(e){return e.right?e.left?e.right.height-e.left.height:+e.height:-e.height}_updateHeight(e){if(!e.left&&!e.right)e.height=0;else if(e.left)e.right?e.height=1+Math.max(e.right.height,e.left.height):e.height=1+e.left.height;else{let t=e.right?e.right.height:0;e.height=1+t}}_balancePath(e){let t=this.getPathToRoot(e,!1);for(let r=0;r<t.length;r++){let n=t[r];switch(this._updateHeight(n),this._balanceFactor(n)){case-2:n&&n.left&&(this._balanceFactor(n.left)<=0?this._balanceLL(n):this._balanceLR(n));break;case 2:n&&n.right&&(this._balanceFactor(n.right)>=0?this._balanceRR(n):this._balanceRL(n))}}}_balanceLL(e){let t=e.parent,r=e.left;e.parent=r,r&&r.right&&(r.right.parent=e),r&&(r.parent=t),e===this.root?r&&this._setRoot(r):t?.left===e?t.left=r:t&&(t.right=r),r&&(e.left=r.right,r.right=e),this._updateHeight(e),r&&this._updateHeight(r)}_balanceLR(e){let t=e.parent,r=e.left,n=null;r&&(n=r.right),e&&(e.parent=n),r&&(r.parent=n),n&&(n.left&&(n.left.parent=r),n.right&&(n.right.parent=e),n.parent=t),e===this.root?n&&this._setRoot(n):t&&(t.left===e?t.left=n:t.right=n),n&&(e.left=n.right,r&&(r.right=n.left),n.left=r,n.right=e),this._updateHeight(e),r&&this._updateHeight(r),n&&this._updateHeight(n)}_balanceRR(e){let t=e.parent,r=e.right;e.parent=r,r&&(r.left&&(r.left.parent=e),r.parent=t),e===this.root?r&&this._setRoot(r):t&&(t.left===e?t.left=r:t.right=r),r&&(e.right=r.left,r.left=e),this._updateHeight(e),r&&this._updateHeight(r)}_balanceRL(e){let t=e.parent,r=e.right,n=null;r&&(n=r.left),e.parent=n,r&&(r.parent=n),n&&(n.left&&(n.left.parent=e),n.right&&(n.right.parent=r),n.parent=t),e===this.root?n&&this._setRoot(n):t&&(t.left===e?t.left=n:t.right=n),n&&(e.right=n.left),r&&n&&(r.left=n.right),n&&(n.left=e),n&&(n.right=r),this._updateHeight(e),r&&this._updateHeight(r),n&&this._updateHeight(n)}};var se=class extends M{constructor(e,t){super(e,t),this._color="RED"}_color;get color(){return this._color}set color(e){this._color=e}},Ie=class extends I{constructor(e){super(e)}createNode(e,t){return new se(e,t)}};var O=class extends H{count;constructor(e,t,r=1){super(e,t),this.count=r}},De=class extends X{constructor(e){super(e)}_count=0;get count(){return this._count}createNode(e,t,r){return new O(e,t,r)}add(e,t,r=1){let n,i;if(e instanceof O?i=this.createNode(e.key,e.val,e.count):e===null?i=null:i=this.createNode(e,t,r),!this.root)this._setRoot(i),this._setSize(this.size+1),i&&this._setCount(this.count+i.count),n=this.root;else{let s=this.root,o=!0;for(;o;)s?i&&(this._compare(s.key,i.key)==="eq"?(s.val=i.val,s.count+=i.count,this._setCount(this.count+i.count),o=!1,n=s):this._compare(s.key,i.key)==="gt"?s.left===void 0?(s.left=i,this._setSize(this.size+1),this._setCount(this.count+i.count),o=!1,n=s.left):s.left&&(s=s.left):this._compare(s.key,i.key)==="lt"&&(s.right===void 0?(s.right=i,this._setSize(this.size+1),this._setCount(this.count+i.count),o=!1,n=s.right):s.right&&(s=s.right))):o=!1}return n&&this._balancePath(n),n}_addTo(e,t){if(t)return t.left===void 0?(t.left=e,e!==null&&(this._setSize(this.size+1),this._setCount(this.count+e.count)),t.left):t.right===void 0?(t.right=e,e!==null&&(this._setSize(this.size+1),this._setCount(this.count+e.count)),t.right):void 0}addMany(e,t){let r=[];for(let n=0;n<e.length;n++){let i=e[n];if(i instanceof O){r.push(this.add(i.key,i.val,i.count));continue}if(i===null){r.push(this.add(NaN,null,0));continue}r.push(this.add(i,t?.[n],1))}return r}perfectlyBalance(e=this.iterationType){let t=this.dfs(n=>n,"in"),r=t.length;if(t.length<1)return!1;if(this.clear(),e==="RECURSIVE"){let n=(i,s)=>{if(i>s)return;let o=i+Math.floor((s-i)/2),l=t[o];this.add(l.key,l.val,l.count),n(i,o-1),n(o+1,s)};return n(0,r-1),!0}else{let n=[[0,r-1]];for(;n.length>0;){let i=n.pop();if(i){let[s,o]=i;if(s<=o){let l=s+Math.floor((o-s)/2),h=t[l];this.add(h.key,h.val,h.count),n.push([l+1,o]),n.push([s,l-1])}}}return!0}}delete(e,t=!1){let r=[];if(!this.root)return r;let n=this.get(e);if(!n)return r;let i=n?.parent?n.parent:null,s=null,o=n;if(n.count>1&&!t)n.count--,this._setCount(this.count-1);else{if(n.left){let l=n.left?this.getRightMost(n.left):null;if(l){let h=l.parent;o=this._swap(n,l),h&&(h.right===l?h.right=l.left:h.left=l.left,s=h)}}else if(!i)n.right!==void 0&&this._setRoot(n.right);else{let{familyPosition:l}=n;l==="LEFT"||l==="ROOT_LEFT"?i.left=n.right:(l==="RIGHT"||l==="ROOT_RIGHT")&&(i.right=n.right),s=i}this._setSize(this.size-1),this._setCount(this.count-o.count)}return r.push({deleted:o,needBalanced:s}),s&&this._balancePath(s),r}clear(){super.clear(),this._setCount(0)}_swap(e,t){let{key:r,val:n,count:i,height:s}=t,o=this.createNode(r,n,i);return o&&(o.height=s,t.key=e.key,t.val=e.val,t.count=e.count,t.height=e.height,e.key=o.key,e.val=o.val,e.count=o.count,e.height=o.height),t}_setCount(e){this._count=e}};var Ae=class a{constructor(e,t,r){this._key=e,this._value=t||void 0,this._children=r||[]}_key;get key(){return this._key}set key(e){this._key=e}_value;get value(){return this._value}set value(e){this._value=e}_children;get children(){return this._children}set children(e){this._children=e}addChildren(e){this.children||(this.children=[]),e instanceof a?this.children.push(e):this.children=this.children.concat(e)}getHeight(){let e=0;if(this){let t=(r,n)=>{n>e&&(e=n);let{children:i}=r;if(i)for(let s=0,o=i.length;s<o;s++)t(i[s],n+1)};t(this,0)}return e}};var ze=class{_matrix;constructor(e){let{row:t,col:r,initialVal:n}=e;this._matrix=new Array(t).fill(void 0).map(()=>new Array(r).fill(n||0))}toArray(){return this._matrix}};var oe=class a{constructor(e=0,t=0,r=1){this.x=e;this.y=t;this.w=r}get isZero(){return this.x===0&&this.y===0}get length(){return Math.sqrt(this.x*this.x+this.y*this.y)}get lengthSq(){return this.x*this.x+this.y*this.y}get rounded(){return new a(Math.round(this.x),Math.round(this.y))}static add(e,t){return new a(e.x+t.x,e.y+t.y)}static subtract(e,t){return new a(e.x-t.x,e.y-t.y)}static subtractValue(e,t){return new a(e.x-t,e.y-t)}static multiply(e,t){return new a(e.x*t,e.y*t)}static divide(e,t){return new a(e.x/t,e.y/t)}static equals(e,t){return e.x===t.x&&e.y===t.y}static equalsRounded(e,t,r=12){let n=a.abs(a.subtract(e,t));return n.x<r&&n.y<r}static normalize(e){let t=e.length;return t>2220446049250313e-31?a.divide(e,t):e}static truncate(e,t){return e.length>t?a.multiply(a.normalize(e),t):e}static perp(e){return new a(-e.y,e.x)}static reverse(e){return new a(-e.x,-e.y)}static abs(e){return new a(Math.abs(e.x),Math.abs(e.y))}static dot(e,t){return e.x*t.x+e.y*t.y}static distance(e,t){let r=t.y-e.y,n=t.x-e.x;return Math.sqrt(r*r+n*n)}static distanceSq(e,t){let r=t.y-e.y,n=t.x-e.x;return r*r+n*n}static sign(e,t){return e.y*t.x>e.x*t.y?-1:1}static angle(e){let t=new a(0,-1),r=Math.acos(a.dot(e,t)/(e.length*t.length));return a.sign(e,t)===1?Math.PI*2-r:r}static random(e,t){let r=Math.floor(Math.random()*e-e/2),n=Math.floor(Math.random()*t-t/2);return new a(r,n)}zero(){this.x=0,this.y=0}},He=oe;var Oe=class a{_matrix;constructor(e){typeof e>"u"?this._matrix=a.identity:e instanceof He?(this._matrix=a.identity,this._matrix[0][0]=e.x,this._matrix[1][0]=e.y,this._matrix[2][0]=e.w):this._matrix=e}static get empty(){return[[],[],[]]}static get identity(){return[[1,0,0],[0,1,0],[0,0,1]]}get m(){return this._matrix}static add(e,t){let r=a.empty;for(let n=0;n<3;n++)for(let i=0;i<3;i++)r[n][i]=e.m[n][i]+t.m[n][i];return new a(r)}static subtract(e,t){let r=a.empty;for(let n=0;n<3;n++)for(let i=0;i<3;i++)r[n][i]=e.m[n][i]-t.m[n][i];return new a(r)}static multiply(e,t){let r=a.empty;for(let n=0;n<3;n++)for(let i=0;i<3;i++){r[n][i]=0;for(let s=0;s<3;s++)r[n][i]+=e.m[n][s]*t.m[s][i]}return new a(r)}static multiplyByValue(e,t){let r=a.empty;for(let n=0;n<3;n++)for(let i=0;i<3;i++)r[n][i]=e.m[n][i]*t;return new a(r)}static multiplyByVector(e,t){return a.multiply(e,new a(t)).toVector()}static view(e,t){let n=e/2,i=t/2,s=Math.cos(Math.PI);return new a([[1,0,n],[0,s*1,i],[0,0,1]])}static scale(e){return a.multiplyByValue(new a,e)}static rotate(e){let t=Math.cos(e),r=Math.sin(e);return new a([[t,-r,0],[r,t,0],[0,0,1]])}static translate(e){return new a([[1,0,e.x],[0,1,e.y],[0,0,e.w]])}toVector(){return new He(this._matrix[0][0],this._matrix[1][0])}};var le=class a{direction;turn;constructor(e,t){this.direction=e,this.turn=()=>new a(t[e],t)}},qe=class{onMove;_matrix;_cur;_character;_VISITED;constructor({matrix:e,turning:t,onMove:r,init:{cur:n,charDir:i,VISITED:s}}){this._matrix=e,this._cur=n,this._character=new le(i,t),this.onMove=r,this.onMove&&this.onMove(this._cur),this._VISITED=s,this._matrix[this._cur[0]][this._cur[1]]=this._VISITED}start(){for(;this.check(this._character.direction)||this.check(this._character.turn().direction);){let{direction:e}=this._character;this.check(e)?this.move(e):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(e){let t,r,n=this._matrix,[i,s]=this._cur;switch(e){case"up":if(r=n[i-1],!r)return!1;t=r[s];break;case"right":t=n[i][s+1];break;case"down":if(r=n[i+1],!r)return!1;t=r[s];break;case"left":t=n[i][s-1];break}return t!==void 0&&t!==this._VISITED}move(e){switch(e){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[t,r]=this._cur;this._matrix[t][r]=this._VISITED,this.onMove&&this.onMove(this._cur)}};var Q=class{constructor(e){this._key=e,this._isEnd=!1,this._children=new Map}_key;get key(){return this._key}set key(e){this._key=e}_children;get children(){return this._children}set children(e){this._children=e}_isEnd;get isEnd(){return this._isEnd}set isEnd(e){this._isEnd=e}},je=class{_caseSensitive;constructor(e,t=!0){if(this._root=new Q(""),this._caseSensitive=t,e)for(let r of e)this.add(r)}_root;get root(){return this._root}set root(e){this._root=e}add(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);n||(n=new Q(r),t.children.set(r,n)),t=n}return t.isEnd=!0,!0}has(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);if(!n)return!1;t=n}return t.isEnd}delete(e){e=this._caseProcess(e);let t=!1,r=(n,i)=>{let s=e[i],o=n.children.get(s);return o?i===e.length-1?o.isEnd?(o.children.size>0?o.isEnd=!1:n.children.delete(s),t=!0,!0):!1:r(o,i+1)&&!n.isEnd&&o.children.size===0?(n.children.delete(s),!0):!1:!1};return r(this.root,0),t}getHeight(){let e=this.root,t=0;if(e){let r=(n,i)=>{i>t&&(t=i);let{children:s}=n;if(s)for(let o of s.entries())r(o[1],i+1)};r(e,0)}return t}hasPurePrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);if(!n)return!1;t=n}return!t.isEnd}hasPrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);if(!n)return!1;t=n}return!0}hasCommonPrefix(e){e=this._caseProcess(e);let t="",r=n=>{if(t+=n.key,t!==e&&!n.isEnd)if(n&&n.children&&n.children.size===1)r(Array.from(n.children.values())[0]);else return};return r(this.root),t===e}getLongestCommonPrefix(){let e="",t=r=>{if(e+=r.key,!r.isEnd)if(r&&r.children&&r.children.size===1)t(Array.from(r.children.values())[0]);else return};return t(this.root),e}getWords(e="",t=Number.MAX_SAFE_INTEGER){e=this._caseProcess(e);let r=[],n=0;function i(o,l){for(let h of o.children.keys()){let d=o.children.get(h);d!==void 0&&i(d,l.concat(h))}if(o.isEnd){if(n>t-1)return;r.push(l),n++}}let s=this.root;if(e)for(let o of e){let l=s.children.get(o);l&&(s=l)}return s!==this.root&&i(s,e),r}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};return Je($e);})();
1
+ "use strict";var dataStructureTyped=(()=>{var ae=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Xe=Object.prototype.hasOwnProperty;var Ye=(a,e)=>{for(var t in e)ae(a,t,{get:e[t],enumerable:!0})},Qe=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of We(e))!Xe.call(a,n)&&n!==t&&ae(a,n,{get:()=>e[n],enumerable:!(r=Ge(e,n))||r.enumerable});return a};var Je=a=>Qe(ae({},"__esModule",{value:!0}),a);var $e={};Ye($e,{AVLTree:()=>Y,AVLTreeNode:()=>A,AbstractEdge:()=>S,AbstractGraph:()=>L,AbstractVertex:()=>E,ArrayDeque:()=>xe,BST:()=>F,BSTNode:()=>M,BinaryIndexedTree:()=>Le,BinaryTree:()=>X,BinaryTreeNode:()=>k,CP:()=>ie,Character:()=>le,CoordinateMap:()=>ue,CoordinateSet:()=>de,Deque:()=>be,DirectedEdge:()=>z,DirectedGraph:()=>G,DirectedVertex:()=>D,DoublyLinkedList:()=>j,DoublyLinkedListNode:()=>w,FamilyPosition:()=>ne,FibonacciHeap:()=>ke,FibonacciHeapNode:()=>Z,HashMap:()=>pe,HashTable:()=>he,HashTableNode:()=>P,Heap:()=>K,IterationType:()=>W,LinkedListQueue:()=>ye,MapEdge:()=>re,MapGraph:()=>Re,MapVertex:()=>te,Matrix2D:()=>Oe,MatrixNTI2D:()=>He,MaxHeap:()=>Ce,MaxPriorityQueue:()=>Me,MinHeap:()=>we,MinPriorityQueue:()=>Be,Navigator:()=>Pe,ObjectDeque:()=>_e,PriorityQueue:()=>R,Queue:()=>B,RBColor:()=>Se,RBTree:()=>Fe,RBTreeNode:()=>se,SegmentTree:()=>De,SegmentTreeNode:()=>H,SinglyLinkedList:()=>q,SinglyLinkedListNode:()=>C,SkipList:()=>ge,SkipListNode:()=>U,Stack:()=>me,THUNK_SYMBOL:()=>Ve,TopologicalProperty:()=>Ue,TreeMap:()=>fe,TreeMultiset:()=>Ie,TreeMultisetNode:()=>O,TreeNode:()=>ze,TreeSet:()=>ce,Trie:()=>qe,TrieNode:()=>Q,UndirectedEdge:()=>ee,UndirectedGraph:()=>Ke,UndirectedVertex:()=>$,Vector2D:()=>oe,arrayRemove:()=>v,getMSB:()=>ve,isThunk:()=>Ee,toThunk:()=>Te,trampoline:()=>J,trampolineAsync:()=>Ze,uuidV4:()=>Ne});var P=class{key;val;next;constructor(e,t){this.key=e,this.val=t,this.next=null}},he=class a{static DEFAULT_CAPACITY=16;static LOAD_FACTOR=.75;constructor(e=a.DEFAULT_CAPACITY,t){this._hashFn=t||this._defaultHashFn,this._capacity=Math.max(e,a.DEFAULT_CAPACITY),this._size=0,this._buckets=new Array(this._capacity).fill(null)}_capacity;get capacity(){return this._capacity}set capacity(e){this._capacity=e}_size;get size(){return this._size}_buckets;get buckets(){return this._buckets}set buckets(e){this._buckets=e}_hashFn;get hashFn(){return this._hashFn}set hashFn(e){this._hashFn=e}set(e,t){let r=this._hash(e),n=new P(e,t);if(!this._buckets[r])this._buckets[r]=n;else{let i=this._buckets[r];for(;i;){if(i.key===e){i.val=t;return}if(!i.next)break;i=i.next}i.next=n}this._size++,this._size/this._capacity>=a.LOAD_FACTOR&&this._expand()}get(e){let t=this._hash(e),r=this._buckets[t];for(;r;){if(r.key===e)return r.val;r=r.next}}delete(e){let t=this._hash(e),r=this._buckets[t],n=null;for(;r;){if(r.key===e){n?n.next=r.next:this._buckets[t]=r.next,this._size--,r.next=null;return}n=r,r=r.next}}_defaultHashFn(e){return(typeof e=="string"?this._murmurStringHashFn(e):this._objectHash(e))%this._capacity}_multiplicativeStringHashFn(e){let t=String(e),r=0;for(let n=0;n<t.length;n++){let i=t.charCodeAt(n),s=.618033988749895,o=1<<30;r=(r*s+i)%o}return Math.abs(r)}_murmurStringHashFn(e){let t=String(e),n=0;for(let i=0;i<t.length;i++){let s=t.charCodeAt(i);n=(n^s)*1540483477,n=(n^n>>>15)*668265261,n=n^n>>>15}return Math.abs(n)}_hash(e){return this.hashFn(e)}_stringHash(e){let t=0;for(let r=0;r<e.length;r++)t=t*31+e.charCodeAt(r)&4294967295;return t}_objectHash(e){return this._stringHash(JSON.stringify(e))}_expand(){let e=this._capacity*2,t=new Array(e).fill(null);for(let r of this._buckets){let n=r;for(;n;){let i=this._hash(n.key),s=new P(n.key,n.val);if(!t[i])t[i]=s;else{let o=t[i];for(;o.next;)o=o.next;o.next=s}n=n.next}}this._buckets=t,this._capacity=e}};var ue=class extends Map{constructor(e){super(),e!==void 0&&(this._joint=e)}_joint="_";get joint(){return this._joint}has(e){return super.has(e.join(this._joint))}set(e,t){return super.set(e.join(this._joint),t)}get(e){return super.get(e.join(this._joint))}delete(e){return super.delete(e.join(this._joint))}_setJoint(e){this._joint=e}};var de=class extends Set{constructor(e){super(),e!==void 0&&(this._joint=e)}_joint="_";get joint(){return this._joint}has(e){return super.has(e.join(this._joint))}add(e){return super.add(e.join(this._joint))}delete(e){return super.delete(e.join(this._joint))}_setJoint(e){this._joint=e}};var fe=class{};var ce=class{};var pe=class{constructor(e=16,t=.75,r){this._initialCapacity=e,this._loadFactor=t,this._capacityMultiplier=2,this._size=0,this._table=new Array(e),this._hashFn=r||(n=>{let i=String(n),s=0;for(let o=0;o<i.length;o++)s+=i.charCodeAt(o);return s%this.table.length})}_initialCapacity;get initialCapacity(){return this._initialCapacity}set initialCapacity(e){this._initialCapacity=e}_loadFactor;get loadFactor(){return this._loadFactor}set loadFactor(e){this._loadFactor=e}_capacityMultiplier;get capacityMultiplier(){return this._capacityMultiplier}set capacityMultiplier(e){this._capacityMultiplier=e}_size;get size(){return this._size}set size(e){this._size=e}_table;get table(){return this._table}set table(e){this._table=e}_hashFn;get hashFn(){return this._hashFn}set hashFn(e){this._hashFn=e}set(e,t){this.size/this.table.length>=this.loadFactor&&this.resizeTable(this.table.length*this.capacityMultiplier);let n=this._hash(e);this.table[n]||(this.table[n]=[]);for(let i=0;i<this.table[n].length;i++)if(this.table[n][i][0]===e){this.table[n][i][1]=t;return}this.table[n].push([e,t]),this.size++}get(e){let t=this._hash(e);if(this.table[t]){for(let[r,n]of this.table[t])if(r===e)return n}}delete(e){let t=this._hash(e);if(this.table[t]){for(let r=0;r<this.table[t].length;r++)if(this.table[t][r][0]===e){this.table[t].splice(r,1),this.size--,this.size/this.table.length<this.loadFactor/this.capacityMultiplier&&this.resizeTable(this.table.length/this.capacityMultiplier);return}}}*entries(){for(let e of this.table)if(e)for(let[t,r]of e)yield[t,r]}[Symbol.iterator](){return this.entries()}clear(){this.size=0,this.table=new Array(this.initialCapacity)}isEmpty(){return this.size===0}_hash(e){return this._hashFn(e)}resizeTable(e){let t=new Array(e);for(let r of this._table)if(r)for(let[n,i]of r){let s=this._hash(n)%e;t[s]||(t[s]=[]),t[s].push([n,i])}this._table=t}};var C=class{constructor(e){this._val=e,this._next=null}_val;get val(){return this._val}set val(e){this._val=e}_next;get next(){return this._next}set next(e){this._next=e}},q=class a{constructor(){this._head=null,this._tail=null,this._length=0}_head;get head(){return this._head}set head(e){this._head=e}_tail;get tail(){return this._tail}set tail(e){this._tail=e}_length;get length(){return this._length}static fromArray(e){let t=new a;for(let r of e)t.push(r);return t}getLength(){return this._length}push(e){let t=new C(e);this.head?(this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),this._length++}pop(){if(!this.head)return;if(this.head===this.tail){let r=this.head.val;return this.head=null,this.tail=null,this._length--,r}let e=this.head;for(;e.next!==this.tail;)e=e.next;let t=this.tail.val;return e.next=null,this.tail=e,this._length--,t}shift(){if(!this.head)return;let e=this.head;return this.head=this.head.next,this._length--,e.val}unshift(e){let t=new C(e);this.head?(t.next=this.head,this.head=t):(this.head=t,this.tail=t),this._length++}getAt(e){if(e<0||e>=this.length)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t.val}getNodeAt(e){let t=this.head;for(let r=0;r<e;r++)t=t.next;return t}deleteAt(e){if(e<0||e>=this.length)return;if(e===0)return this.shift();if(e===this.length-1)return this.pop();let t=this.getNodeAt(e-1),r=t.next;return t.next=r.next,this._length--,r.val}delete(e){if(!e)return!1;let t;e instanceof C?t=e.val:t=e;let r=this.head,n=null;for(;r;){if(r.val===t)return n===null?(this.head=r.next,r===this.tail&&(this.tail=null)):(n.next=r.next,r===this.tail&&(this.tail=n)),this._length--,!0;n=r,r=r.next}return!1}insertAt(e,t){if(e<0||e>this.length)return!1;if(e===0)return this.unshift(t),!0;if(e===this.length)return this.push(t),!0;let r=new C(t),n=this.getNodeAt(e-1);return r.next=n.next,n.next=r,this._length++,!0}isEmpty(){return this.length===0}clear(){this._head=null,this._tail=null,this._length=0}toArray(){let e=[],t=this.head;for(;t;)e.push(t.val),t=t.next;return e}reverse(){if(!this.head||this.head===this.tail)return;let e=null,t=this.head,r=null;for(;t;)r=t.next,t.next=e,e=t,t=r;[this.head,this.tail]=[this.tail,this.head]}find(e){let t=this.head;for(;t;){if(e(t.val))return t.val;t=t.next}return null}indexOf(e){let t=0,r=this.head;for(;r;){if(r.val===e)return t;t++,r=r.next}return-1}findNode(e){let t=this.head;for(;t;){if(t.val===e)return t;t=t.next}return null}insertBefore(e,t){if(!this.head)return!1;let r;if(e instanceof C?r=e.val:r=e,this.head.val===r)return this.unshift(t),!0;let n=this.head;for(;n.next;){if(n.next.val===r){let i=new C(t);return i.next=n.next,n.next=i,this._length++,!0}n=n.next}return!1}insertAfter(e,t){let r;if(e instanceof C?r=e:r=this.findNode(e),r){let n=new C(t);return n.next=r.next,r.next=n,r===this.tail&&(this.tail=n),this._length++,!0}return!1}countOccurrences(e){let t=0,r=this.head;for(;r;)r.val===e&&t++,r=r.next;return t}*[Symbol.iterator](){let e=this.head;for(;e;)yield e.val,e=e.next}};var w=class{constructor(e){this._val=e,this._next=null,this._prev=null}_val;get val(){return this._val}set val(e){this._val=e}_next;get next(){return this._next}set next(e){this._next=e}_prev;get prev(){return this._prev}set prev(e){this._prev=e}},j=class a{constructor(){this._head=null,this._tail=null,this._length=0}_head;get head(){return this._head}set head(e){this._head=e}_tail;get tail(){return this._tail}set tail(e){this._tail=e}_length;get length(){return this._length}get size(){return this.length}static fromArray(e){let t=new a;for(let r of e)t.push(r);return t}push(e){let t=new w(e);this.head?(t.prev=this.tail,this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),this._length++}addLast(e){this.push(e)}pop(){if(!this.tail)return;let e=this.tail;return this.head===this.tail?(this.head=null,this.tail=null):(this.tail=e.prev,this.tail.next=null),this._length--,e.val}pollLast(){return this.pop()}shift(){if(!this.head)return;let e=this.head;return this.head===this.tail?(this.head=null,this.tail=null):(this.head=e.next,this.head.prev=null),this._length--,e.val}pollFirst(){return this.shift()}unshift(e){let t=new w(e);this.head?(t.next=this.head,this.head.prev=t,this.head=t):(this.head=t,this.tail=t),this._length++}addFirst(e){this.unshift(e)}peekFirst(){return this.head?.val}peekLast(){return this.tail?.val}getAt(e){if(e<0||e>=this.length)return;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t.val}getNodeAt(e){if(e<0||e>=this.length)return null;let t=this.head;for(let r=0;r<e;r++)t=t.next;return t}findNode(e){let t=this.head;for(;t;){if(t.val===e)return t;t=t.next}return null}insertAt(e,t){if(e<0||e>this.length)return!1;if(e===0)return this.unshift(t),!0;if(e===this.length)return this.push(t),!0;let r=new w(t),n=this.getNodeAt(e-1),i=n.next;return r.prev=n,r.next=i,n.next=r,i.prev=r,this._length++,!0}deleteAt(e){if(e<0||e>=this.length)return;if(e===0)return this.shift();if(e===this.length-1)return this.pop();let t=this.getNodeAt(e),r=t.prev,n=t.next;return r.next=n,n.prev=r,this._length--,t.val}delete(e){let t;if(e instanceof w?t=e:t=this.findNode(e),t){if(t===this.head)this.shift();else if(t===this.tail)this.pop();else{let r=t.prev,n=t.next;r.next=n,n.prev=r,this._length--}return!0}return!1}toArray(){let e=[],t=this.head;for(;t;)e.push(t.val),t=t.next;return e}isEmpty(){return this.length===0}clear(){this._head=null,this._tail=null,this._length=0}find(e){let t=this.head;for(;t;){if(e(t.val))return t.val;t=t.next}return null}indexOf(e){let t=0,r=this.head;for(;r;){if(r.val===e)return t;t++,r=r.next}return-1}findLast(e){let t=this.tail;for(;t;){if(e(t.val))return t.val;t=t.prev}return null}toArrayReverse(){let e=[],t=this.tail;for(;t;)e.push(t.val),t=t.prev;return e}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}}forEach(e){let t=this.head,r=0;for(;t;)e(t.val,r),t=t.next,r++}map(e){let t=new a,r=this.head;for(;r;)t.push(e(r.val)),r=r.next;return t}filter(e){let t=new a,r=this.head;for(;r;)e(r.val)&&t.push(r.val),r=r.next;return t}reduce(e,t){let r=t,n=this.head;for(;n;)r=e(r,n.val),n=n.next;return r}insertAfter(e,t){let r;if(e instanceof w?r=e:r=this.findNode(e),r){let n=new w(t);return n.next=r.next,r.next&&(r.next.prev=n),n.prev=r,r.next=n,r===this.tail&&(this.tail=n),this._length++,!0}return!1}insertBefore(e,t){let r;if(e instanceof w?r=e:r=this.findNode(e),r){let n=new w(t);return n.prev=r.prev,r.prev&&(r.prev.next=n),n.next=r,r.prev=n,r===this.head&&(this.head=n),this._length++,!0}return!1}};var U=class{key;value;forward;constructor(e,t,r){this.key=e,this.value=t,this.forward=new Array(r)}},ge=class{constructor(e=16,t=.5){this._head=new U(null,null,e),this._level=0,this._maxLevel=e,this._probability=t}_head;get head(){return this._head}set head(e){this._head=e}_level;get level(){return this._level}set level(e){this._level=e}_maxLevel;get maxLevel(){return this._maxLevel}set maxLevel(e){this._maxLevel=e}_probability;get probability(){return this._probability}set probability(e){this._probability=e}add(e,t){let r=new U(e,t,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<e;)i=i.forward[s];n[s]=i}for(let s=0;s<r.forward.length;s++)r.forward[s]=n[s].forward[s],n[s].forward[s]=r;r.forward[0]!==null&&(this.level=Math.max(this.level,r.forward.length))}get(e){let t=this.head;for(let r=this.level-1;r>=0;r--)for(;t.forward[r]&&t.forward[r].key<e;)t=t.forward[r];if(t=t.forward[0],t&&t.key===e)return t.value}delete(e){let t=new Array(this.maxLevel).fill(this.head),r=this.head;for(let n=this.level-1;n>=0;n--){for(;r.forward[n]&&r.forward[n].key<e;)r=r.forward[n];t[n]=r}if(r=r.forward[0],r&&r.key===e){for(let n=0;n<this.level&&t[n].forward[n]===r;n++)t[n].forward[n]=r.forward[n];for(;this.level>0&&this.head.forward[this.level-1]===null;)this.level--;return!0}return!1}randomLevel(){let e=1;for(;Math.random()<this.probability&&e<this.maxLevel;)e++;return e}};var me=class a{_elements;constructor(e){this._elements=Array.isArray(e)?e:[]}static fromArray(e){return new a(e)}isEmpty(){return this._elements.length===0}size(){return this._elements.length}peek(){return this.isEmpty()?null:this._elements[this._elements.length-1]}push(e){return this._elements.push(e),this}pop(){return this.isEmpty()?null:this._elements.pop()||null}toArray(){return this._elements.slice()}clear(){this._elements=[]}clone(){return new a(this._elements.slice())}};var ye=class extends q{enqueue(e){this.push(e)}dequeue(){return this.shift()}peek(){return this.head?.val}},B=class a{constructor(e){this._nodes=e||[],this._offset=0}_nodes;get nodes(){return this._nodes}set nodes(e){this._nodes=e}_offset;get offset(){return this._offset}set offset(e){this._offset=e}get size(){return this.nodes.length-this.offset}static fromArray(e){return new a(e)}push(e){return this.nodes.push(e),this}shift(){if(this.size===0)return;let e=this.peek();return this.offset+=1,this.offset*2<this.nodes.length||(this.nodes=this.nodes.slice(this.offset),this.offset=0),e}peek(){return this.size>0?this.nodes[this.offset]:void 0}peekLast(){return this.size>0?this.nodes[this.nodes.length-1]:void 0}enqueue(e){this.push(e)}dequeue(){return this.shift()}getAt(e){return this.nodes[e]}isEmpty(){return this.size===0}toArray(){return this.nodes.slice(this.offset)}clear(){this.nodes=[],this.offset=0}clone(){return new a(this.nodes.slice(this.offset))}*[Symbol.iterator](){for(let e of this.nodes)yield e}};var be=class extends j{},_e=class{constructor(e){e!==void 0&&(this._capacity=e)}_nodes={};get nodes(){return this._nodes}_capacity=Number.MAX_SAFE_INTEGER;get capacity(){return this._capacity}set capacity(e){this._capacity=e}_first=-1;get first(){return this._first}set first(e){this._first=e}_last=-1;get last(){return this._last}set last(e){this._last=e}_size=0;get size(){return this._size}addFirst(e){if(this._size===0){let t=Math.floor(this._capacity/2);this._first=t,this._last=t}else this._first--;this._nodes[this._first]=e,this._size++}addLast(e){if(this._size===0){let t=Math.floor(this._capacity/2);this._first=t,this._last=t}else this._last++;this._nodes[this._last]=e,this._size++}pollFirst(){if(!this._size)return;let e=this.peekFirst();return delete this._nodes[this._first],this._first++,this._size--,e}peekFirst(){if(this._size)return this._nodes[this._first]}pollLast(){if(!this._size)return;let e=this.peekLast();return delete this._nodes[this._last],this._last--,this._size--,e}peekLast(){if(this._size)return this._nodes[this._last]}get(e){return this._nodes[this._first+e]||null}isEmpty(){return this._size<=0}_seNodes(e){this._nodes=e}_setSize(e){this._size=e}},xe=class{_nodes=[];get size(){return this._nodes.length}addLast(e){return this._nodes.push(e)}pollLast(){return this._nodes.pop()??null}pollFirst(){return this._nodes.shift()??null}addFirst(e){return this._nodes.unshift(e)}peekFirst(){return this._nodes[0]??null}peekLast(){return this._nodes[this._nodes.length-1]??null}get(e){return this._nodes[e]??null}set(e,t){return this._nodes[e]=t}insert(e,t){return this._nodes.splice(e,0,t)}delete(e){return this._nodes.splice(e,1)}isEmpty(){return this._nodes.length===0}};var Ne=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(a){let e=Math.random()*16|0;return(a=="x"?e:e&3|8).toString(16)})},v=function(a,e){let t=-1,r=a?a.length:0,n=[];for(;++t<r;){let i=a[t];e(i,t,a)&&(n.push(i),Array.prototype.splice.call(a,t--,1),r--)}return n},Ve=Symbol("thunk"),Ee=a=>typeof a=="function"&&a.__THUNK__===Ve,Te=a=>{let e=()=>a();return e.__THUNK__=Ve,e},J=a=>Object.assign((...t)=>{let r=a(...t);for(;Ee(r)&&typeof r=="function";)r=r();return r},{cont:(...t)=>Te(()=>a(...t))}),Ze=a=>Object.assign(async(...t)=>{let r=await a(...t);for(;Ee(r)&&typeof r=="function";)r=await r();return r},{cont:(...t)=>Te(()=>a(...t))}),ve=a=>a<=0?0:1<<31-Math.clz32(a);var K=class a{nodes=[];comparator;constructor(e){this.comparator=e}get size(){return this.nodes.length}get leaf(){return this.nodes[this.size-1]??void 0}static heapify(e,t){let r=new a(t);return r.nodes=[...e],r.fix(),r}add(e){return this.push(e)}push(e){return this.nodes.push(e),this.bubbleUp(this.nodes.length-1),this}poll(){if(this.nodes.length===0)return;if(this.nodes.length===1)return this.nodes.pop();let e=this.nodes[0];return this.nodes[0]=this.nodes.pop(),this.sinkDown(0),e}pop(){return this.poll()}peek(){if(this.nodes.length!==0)return this.nodes[0]}isEmpty(){return this.size===0}clear(){this.nodes=[]}refill(e){this.nodes=e,this.fix()}has(e){return this.nodes.includes(e)}dfs(e){let t=[],r=n=>{n<this.size&&(e==="in"?(r(2*n+1),t.push(this.nodes[n]),r(2*n+2)):e==="pre"?(t.push(this.nodes[n]),r(2*n+1),r(2*n+2)):e==="post"&&(r(2*n+1),r(2*n+2),t.push(this.nodes[n])))};return r(0),t}toArray(){return[...this.nodes]}getNodes(){return this.nodes}clone(){let e=new a(this.comparator);return e.nodes=[...this.nodes],e}sort(){let e=[],t=this.clone();for(;t.size!==0;){let r=t.poll();r&&e.push(r)}return e}bubbleUp(e){let t=this.nodes[e];for(;e>0;){let r=Math.floor((e-1)/2),n=this.nodes[r];if(this.comparator(t,n)<0)this.nodes[e]=n,this.nodes[r]=t,e=r;else break}}sinkDown(e){let t=2*e+1,r=2*e+2,n=this.nodes.length,i=e;if(t<n&&this.comparator(this.nodes[t],this.nodes[i])<0&&(i=t),r<n&&this.comparator(this.nodes[r],this.nodes[i])<0&&(i=r),i!==e){let s=this.nodes[e];this.nodes[e]=this.nodes[i],this.nodes[i]=s,this.sinkDown(i)}}fix(){for(let e=Math.floor(this.size/2);e>=0;e--)this.sinkDown(e)}},Z=class{element;degree;left;right;child;parent;marked;constructor(e,t=0){this.element=e,this.degree=t,this.marked=!1}},ke=class{root;size=0;min;comparator;constructor(e){if(this.clear(),this.comparator=e||this.defaultComparator,typeof this.comparator!="function")throw new Error("FibonacciHeap constructor: given comparator should be a function.")}clear(){this.root=void 0,this.min=void 0,this.size=0}add(e){return this.push(e)}push(e){let t=this.createNode(e);return t.left=t,t.right=t,this.mergeWithRoot(t),(!this.min||this.comparator(t.element,this.min.element)<=0)&&(this.min=t),this.size++,this}peek(){return this.min?this.min.element:void 0}consumeLinkedList(e){let t=[];if(!e)return t;let r=e,n=!1;for(;!(r===e&&n);)r===e&&(n=!0),r&&(t.push(r),r=r.right);return t}mergeWithChild(e,t){e.child?(t.right=e.child.right,t.left=e.child,e.child.right.left=t,e.child.right=t):e.child=t}poll(){return this.pop()}pop(){if(this.size===0)return;let e=this.min;if(e.child){let t=this.consumeLinkedList(e.child);for(let r of t)this.mergeWithRoot(r),r.parent=void 0}return this.removeFromRoot(e),e===e.right?(this.min=void 0,this.root=void 0):(this.min=e.right,this.consolidate()),this.size--,e.element}merge(e){if(e.size!==0){if(this.root&&e.root){let t=this.root,r=e.root,n=t.right,i=r.left;t.right=r,r.left=t,n.left=i,i.right=n}(!this.min||e.min&&this.comparator(e.min.element,this.min.element)<0)&&(this.min=e.min),this.size+=e.size,e.clear()}}defaultComparator(e,t){return e<t?-1:e>t?1:0}createNode(e){return new Z(e)}mergeWithRoot(e){this.root?(e.right=this.root.right,e.left=this.root,this.root.right.left=e,this.root.right=e):this.root=e}removeFromRoot(e){this.root===e&&(this.root=e.right),e.left&&(e.left.right=e.right),e.right&&(e.right.left=e.left)}link(e,t){this.removeFromRoot(e),e.left=e,e.right=e,this.mergeWithChild(t,e),t.degree++,e.parent=t}consolidate(){let e=new Array(this.size),t=this.consumeLinkedList(this.root),r,n,i,s;for(let o of t){for(r=o,i=r.degree;e[i];)n=e[i],this.comparator(r.element,n.element)>0&&(s=r,r=n,n=s),this.link(n,r),e[i]=void 0,i++;e[i]=r}for(let o=0;o<this.size;o++)e[o]&&this.comparator(e[o].element,this.min.element)<=0&&(this.min=e[o])}};var Ce=class extends K{constructor(e=(t,r)=>{if(typeof t=="number"&&typeof r=="number")return r-t;throw new Error("The a, b params of compare function must be number")}){super(e)}};var we=class extends K{constructor(e=(t,r)=>{if(typeof t=="number"&&typeof r=="number")return t-r;throw new Error("The a, b params of compare function must be number")}){super(e)}};var R=class extends K{constructor(e){super(e)}};var Be=class extends R{constructor(e=(t,r)=>{if(typeof t=="number"&&typeof r=="number")return t-r;throw new Error("The a, b params of compare function must be number")}){super(e)}};var Me=class extends R{constructor(e=(t,r)=>{if(typeof t=="number"&&typeof r=="number")return r-t;throw new Error("The a, b params of compare function must be number")}){super(e)}};var E=class{constructor(e,t){this._key=e,this._val=t}_key;get key(){return this._key}set key(e){this._key=e}_val;get val(){return this._val}set val(e){this._val=e}},S=class{constructor(e,t){this._weight=e!==void 0?e:1,this._val=t,this._hashCode=Ne()}_val;get val(){return this._val}set val(e){this._val=e}_weight;get weight(){return this._weight}set weight(e){this._weight=e}_hashCode;get hashCode(){return this._hashCode}_setHashCode(e){this._hashCode=e}},L=class{_vertices=new Map;get vertices(){return this._vertices}getVertex(e){return this._vertices.get(e)||null}hasVertex(e){return this._vertices.has(this._getVertexKey(e))}addVertex(e,t){if(e instanceof E)return this._addVertexOnly(e);{let r=this.createVertex(e,t);return this._addVertexOnly(r)}}removeVertex(e){let t=this._getVertexKey(e);return this._vertices.delete(t)}removeAllVertices(e){let t=[];for(let r of e)t.push(this.removeVertex(r));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,r,n){if(e instanceof S)return this._addEdgeOnly(e);if(t instanceof E||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof E&&(e=e.key),t instanceof E&&(t=t.key);let i=this.createEdge(e,t,r,n);return this._addEdgeOnly(i)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(e,t,r){let n=this.getEdge(e,t);return n?(n.weight=r,!0):!1}getAllPathsBetween(e,t){let r=[],n=this._getVertex(e),i=this._getVertex(t);if(!(n&&i))return[];let s=(o,l,h,d)=>{h.set(o,!0),o===l&&r.push([n,...d]);let p=this.getNeighbors(o);for(let g of p)h.get(g)||(d.push(g),s(g,l,h,d),v(d,x=>x===g));h.set(o,!1)};return s(n,i,new Map,[]),r}getPathSumWeight(e){let t=0;for(let r=0;r<e.length;r++)t+=this.getEdge(e[r],e[r+1])?.weight||0;return t}getMinCostBetween(e,t,r){if(r===void 0&&(r=!1),r){let n=this.getAllPathsBetween(e,t),i=1/0;for(let s of n)i=Math.min(this.getPathSumWeight(s),i);return i}else{let n=this._getVertex(t),i=this._getVertex(e);if(!(i&&n))return null;let s=new Map,o=new B([i]);s.set(i,!0);let l=0;for(;o.size>0;){for(let h=0;h<o.size;h++){let d=o.shift();if(d===n)return l;if(d!==void 0){let p=this.getNeighbors(d);for(let g of p)s.has(g)||(s.set(g,!0),o.push(g))}}l++}return null}}getMinPathBetween(e,t,r){if(r===void 0&&(r=!1),r){let n=this.getAllPathsBetween(e,t),i=1/0,s=-1,o=0;for(let l of n){let h=this.getPathSumWeight(l);h<i&&(i=h,s=o),o++}return n[s]||null}else{let n=[],i=this._getVertex(e),s=this._getVertex(t);if(!(i&&s))return[];let o=(l,h,d,p)=>{if(d.set(l,!0),l===h){n=[i,...p];return}let g=this.getNeighbors(l);for(let x of g)d.get(x)||(p.push(x),o(x,h,d,p),v(p,V=>V===x));d.set(l,!1)};return o(i,s,new Map,[]),n}}dijkstraWithoutHeap(e,t,r,n){r===void 0&&(r=!1),n===void 0&&(n=!1),t===void 0&&(t=null);let i=1/0,s=null,o=[],l=[],h=this._vertices,d=new Map,p=new Set,g=new Map,x=this._getVertex(e),V=t?this._getVertex(t):null;if(!x)return null;for(let u of h){let f=u[1];f instanceof E&&d.set(f,1/0)}d.set(x,0),g.set(x,null);let y=()=>{let u=1/0,f=null;for(let[m,b]of d)p.has(m)||b<u&&(u=b,f=m);return f},_=u=>{for(let f of h){let m=f[1];if(m instanceof E){let b=[m],c=g.get(m);for(;c;)b.push(c),c=g.get(c);let N=b.reverse();f[1]===u&&(o=N),l.push(N)}}};for(let u=1;u<h.size;u++){let f=y();if(f){if(p.add(f),V&&V===f)return r&&(i=d.get(V)||1/0),n&&_(V),{distMap:d,preMap:g,seen:p,paths:l,minDist:i,minPath:o};let m=this.getNeighbors(f);for(let b of m)if(!p.has(b)){let c=this.getEdge(f,b);if(c){let N=d.get(f),T=d.get(b);N!==void 0&&T!==void 0&&c.weight+N<T&&(d.set(b,c.weight+N),g.set(b,f))}}}}return r&&d.forEach((u,f)=>{f!==x&&u<i&&(i=u,n&&(s=f))}),n&&_(s),{distMap:d,preMap:g,seen:p,paths:l,minDist:i,minPath:o}}dijkstra(e,t,r,n){r===void 0&&(r=!1),n===void 0&&(n=!1),t===void 0&&(t=null);let i=1/0,s=null,o=[],l=[],h=this._vertices,d=new Map,p=new Set,g=new Map,x=this._getVertex(e),V=t?this._getVertex(t):null;if(!x)return null;for(let u of h){let f=u[1];f instanceof E&&d.set(f,1/0)}let y=new R((u,f)=>u.key-f.key);y.add({key:0,val:x}),d.set(x,0),g.set(x,null);let _=u=>{for(let f of h){let m=f[1];if(m instanceof E){let b=[m],c=g.get(m);for(;c;)b.push(c),c=g.get(c);let N=b.reverse();f[1]===u&&(o=N),l.push(N)}}};for(;y.size>0;){let u=y.poll(),f=u?.key,m=u?.val;if(f!==void 0&&m){if(p.add(m),V&&V===m)return r&&(i=d.get(V)||1/0),n&&_(V),{distMap:d,preMap:g,seen:p,paths:l,minDist:i,minPath:o};let b=this.getNeighbors(m);for(let c of b)if(!p.has(c)){let N=this.getEdge(m,c)?.weight;if(typeof N=="number"){let T=d.get(c);T&&f+N<T&&(y.add({key:f+N,val:c}),g.set(c,m),d.set(c,f+N))}}}}return r&&d.forEach((u,f)=>{f!==x&&u<i&&(i=u,n&&(s=f))}),n&&_(s),{distMap:d,preMap:g,seen:p,paths:l,minDist:i,minPath:o}}bellmanFord(e,t,r,n){r===void 0&&(r=!1),n===void 0&&(n=!1);let i=this._getVertex(e),s=[],o=new Map,l=new Map,h=1/0,d=[],p;if(t&&(p=!1),!i)return{hasNegativeCycle:p,distMap:o,preMap:l,paths:s,min:h,minPath:d};let g=this._vertices,x=g.size,V=this.edgeSet(),y=V.length;this._vertices.forEach(u=>{o.set(u,1/0)}),o.set(i,0);for(let u=1;u<x;++u)for(let f=0;f<y;++f){let m=this.getEndsOfEdge(V[f]);if(m){let[b,c]=m,N=V[f].weight,T=o.get(b),I=o.get(c);T!==void 0&&I!==void 0&&o.get(b)!==1/0&&T+N<I&&(o.set(c,T+N),n&&l.set(c,b))}}let _=null;if(r&&o.forEach((u,f)=>{f!==i&&u<h&&(h=u,n&&(_=f))}),n)for(let u of g){let f=u[1];if(f instanceof E){let m=[f],b=l.get(f);for(;b!==void 0;)m.push(b),b=l.get(b);let c=m.reverse();u[1]===_&&(d=c),s.push(c)}}for(let u=0;u<y;++u){let f=this.getEndsOfEdge(V[u]);if(f){let[m]=f,b=V[u].weight,c=o.get(m);c&&c!==1/0&&c+b<c&&(p=!0)}}return{hasNegativeCycle:p,distMap:o,preMap:l,paths:s,min:h,minPath:d}}floyd(){let e=[...this._vertices],t=e.length,r=[],n=[];for(let i=0;i<t;i++){r[i]=[],n[i]=[];for(let s=0;s<t;s++)n[i][s]=null}for(let i=0;i<t;i++)for(let s=0;s<t;s++)r[i][s]=this.getEdge(e[i][1],e[s][1])?.weight||1/0;for(let i=0;i<t;i++)for(let s=0;s<t;s++)for(let o=0;o<t;o++)r[s][o]>r[s][i]+r[i][o]&&(r[s][o]=r[s][i]+r[i][o],n[s][o]=e[i][1]);return{costs:r,predecessor:n}}tarjan(e,t,r,n){e===void 0&&(e=!1),t===void 0&&(t=!1),r===void 0&&(r=!1),n===void 0&&(n=!1);let s=new Map,o=new Map,l=this._vertices;l.forEach(u=>{s.set(u,-1),o.set(u,1/0)});let[h]=l.values(),d=[],p=[],g=0,x=(u,f)=>{g++,s.set(u,g),o.set(u,g);let m=this.getNeighbors(u),b=0;for(let c of m)if(c!==f){s.get(c)===-1&&(b++,x(c,u));let N=o.get(c),T=o.get(u);T!==void 0&&N!==void 0&&o.set(u,Math.min(T,N));let I=s.get(u);if(N!==void 0&&I!==void 0&&(e&&(u===h&&b>=2||u!==h&&N>=I)&&d.push(u),t&&N>I)){let je=this.getEdge(u,c);je&&p.push(je)}}};x(h,null);let V=new Map,y=()=>{let u=new Map;return o.forEach((f,m)=>{u.has(f)?u.get(f)?.push(m):u.set(f,[m])}),u};r&&(V=y());let _=new Map;if(n){let u=new Map;u.size<1&&(u=y()),u.forEach((f,m)=>{f.length>1&&_.set(m,f)})}return{dfnMap:s,lowMap:o,bridges:p,articulationPoints:d,SCCs:V,cycles:_}}_addVertexOnly(e){return this.hasVertex(e)?!1:(this._vertices.set(e.key,e),!0)}_getVertex(e){let t=this._getVertexKey(e);return this._vertices.get(t)||null}_getVertexKey(e){return e instanceof E?e.key:e}_setVertices(e){this._vertices=e}};var D=class extends E{constructor(e,t){super(e,t)}},z=class extends S{constructor(e,t,r,n){super(r,n),this._src=e,this._dest=t}_src;get src(){return this._src}set src(e){this._src=e}_dest;get dest(){return this._dest}set dest(e){this._dest=e}},G=class extends L{constructor(){super()}_outEdgeMap=new Map;get outEdgeMap(){return this._outEdgeMap}_inEdgeMap=new Map;get inEdgeMap(){return this._inEdgeMap}createVertex(e,t){return new D(e,t??e)}createEdge(e,t,r,n){return new z(e,t,r??1,n)}getEdge(e,t){let r=[];if(e!==null&&t!==null){let n=this._getVertex(e),i=this._getVertex(t);if(n&&i){let s=this._outEdgeMap.get(n);s&&(r=s.filter(o=>o.dest===i.key))}}return r[0]||null}removeEdgeSrcToDest(e,t){let r=this._getVertex(e),n=this._getVertex(t),i=null;if(!r||!n)return null;let s=this._outEdgeMap.get(r);s&&v(s,l=>l.dest===n.key);let o=this._inEdgeMap.get(n);return o&&(i=v(o,l=>l.src===r.key)[0]||null),i}removeEdge(e){let t=null,r=this._getVertex(e.src),n=this._getVertex(e.dest);if(r&&n){let i=this._outEdgeMap.get(r);i&&i.length>0&&v(i,o=>o.src===r.key);let s=this._inEdgeMap.get(n);s&&s.length>0&&(t=v(s,o=>o.dest===n.key)[0])}return t}removeEdgesBetween(e,t){let r=[];if(e&&t){let n=this.removeEdgeSrcToDest(e,t),i=this.removeEdgeSrcToDest(t,e);n&&r.push(n),i&&r.push(i)}return r}incomingEdgesOf(e){let t=this._getVertex(e);return t?this.inEdgeMap.get(t)||[]:[]}outgoingEdgesOf(e){let t=this._getVertex(e);return t?this._outEdgeMap.get(t)||[]:[]}degreeOf(e){return this.outDegreeOf(e)+this.inDegreeOf(e)}inDegreeOf(e){return this.incomingEdgesOf(e).length}outDegreeOf(e){return this.outgoingEdgesOf(e).length}edgesOf(e){return[...this.outgoingEdgesOf(e),...this.incomingEdgesOf(e)]}getEdgeSrc(e){return this._getVertex(e.src)}getEdgeDest(e){return this._getVertex(e.dest)}getDestinations(e){if(e===null)return[];let t=[],r=this.outgoingEdgesOf(e);for(let n of r){let i=this.getEdgeDest(n);i&&t.push(i)}return t}topologicalSort(e){e=e??"key";let t=new Map;for(let s of this.vertices)t.set(s[1],0);let r=[],n=!1,i=s=>{t.set(s,1);let o=this.getDestinations(s);for(let l of o){let h=t.get(l);h===0?i(l):h===1&&(n=!0)}t.set(s,2),r.push(s)};for(let s of this.vertices)t.get(s[1])===0&&i(s[1]);return n?null:(e==="key"&&(r=r.map(s=>s instanceof D?s.key:s)),r.reverse())}edgeSet(){let e=[];return this._outEdgeMap.forEach(t=>{e=[...e,...t]}),e}getNeighbors(e){let t=[],r=this._getVertex(e);if(r){let n=this.outgoingEdgesOf(r);for(let i of n){let s=this._getVertex(i.dest);s&&t.push(s)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.src,e.dest))return null;let t=this._getVertex(e.src),r=this._getVertex(e.dest);return t&&r?[t,r]:null}_addEdgeOnly(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let t=this._getVertex(e.src),r=this._getVertex(e.dest);if(t&&r){let n=this._outEdgeMap.get(t);n?n.push(e):this._outEdgeMap.set(t,[e]);let i=this._inEdgeMap.get(r);return i?i.push(e):this._inEdgeMap.set(r,[e]),!0}else return!1}_setOutEdgeMap(e){this._outEdgeMap=e}_setInEdgeMap(e){this._inEdgeMap=e}};var $=class extends E{constructor(e,t){super(e,t)}},ee=class extends S{constructor(e,t,r,n){super(r,n),this._vertices=[e,t]}_vertices;get vertices(){return this._vertices}set vertices(e){this._vertices=e}},Ke=class extends L{constructor(){super(),this._edges=new Map}_edges;get edges(){return this._edges}createVertex(e,t){return new $(e,t??e)}createEdge(e,t,r,n){return new ee(e,t,r??1,n)}getEdge(e,t){let r=[];if(e!==null&&t!==null){let n=this._getVertex(e),i=this._getVertex(t);n&&i&&(r=this._edges.get(n)?.filter(s=>s.vertices.includes(i.key)))}return r&&r[0]||null}removeEdgeBetween(e,t){let r=this._getVertex(e),n=this._getVertex(t);if(!r||!n)return null;let i=this._edges.get(r),s=null;i&&(s=v(i,l=>l.vertices.includes(n.key))[0]||null);let o=this._edges.get(n);return o&&v(o,l=>l.vertices.includes(r.key)),s}removeEdge(e){return this.removeEdgeBetween(e.vertices[0],e.vertices[1])}degreeOf(e){let t=this._getVertex(e);return t&&this._edges.get(t)?.length||0}edgesOf(e){let t=this._getVertex(e);return t?this._edges.get(t)||[]:[]}edgeSet(){let e=new Set;return this._edges.forEach(t=>{t.forEach(r=>{e.add(r)})}),[...e]}getNeighbors(e){let t=[],r=this._getVertex(e);if(r){let n=this.edgesOf(r);for(let i of n){let s=this._getVertex(i.vertices.filter(o=>o!==r.key)[0]);s&&t.push(s)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.vertices[0],e.vertices[1]))return null;let t=this._getVertex(e.vertices[0]),r=this._getVertex(e.vertices[1]);return t&&r?[t,r]:null}_addEdgeOnly(e){for(let t of e.vertices){let r=this._getVertex(t);if(r===null)return!1;if(r){let n=this._edges.get(r);n?n.push(e):this._edges.set(r,[e])}}return!0}_setEdges(e){this._edges=e}};var te=class extends D{constructor(e,t,r,n){super(e,n),this._lat=t,this._long=r}_lat;get lat(){return this._lat}set lat(e){this._lat=e}_long;get long(){return this._long}set long(e){this._long=e}},re=class extends z{constructor(e,t,r,n){super(e,t,r,n)}},Re=class extends G{constructor(e,t){super(),this._origin=e,this._bottomRight=t}_origin=[0,0];get origin(){return this._origin}set origin(e){this._origin=e}_bottomRight;get bottomRight(){return this._bottomRight}set bottomRight(e){this._bottomRight=e}createVertex(e,t,r=this.origin[0],n=this.origin[1]){return new te(e,r,n,t)}createEdge(e,t,r,n){return new re(e,t,r,n)}};var W=(t=>(t.ITERATIVE="ITERATIVE",t.RECURSIVE="RECURSIVE",t))(W||{}),ne=(o=>(o.ROOT="ROOT",o.LEFT="LEFT",o.RIGHT="RIGHT",o.ROOT_LEFT="ROOT_LEFT",o.ROOT_RIGHT="ROOT_RIGHT",o.ISOLATED="ISOLATED",o.MAL_NODE="MAL_NODE",o))(ne||{});var Se=(t=>(t.RED="RED",t.BLACK="BLACK",t))(Se||{});var Ue=(r=>(r.VAL="VAL",r.NODE="NODE",r.ID="ID",r))(Ue||{});var ie=(r=>(r.lt="lt",r.eq="eq",r.gt="gt",r))(ie||{});var k=class{key;val;parent;constructor(e,t){this.key=e,this.val=t}_left;get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}_right;get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}get familyPosition(){let e=this;return this.parent?this.parent.left===e?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===e?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},X=class{constructor(e){if(e!==void 0){let{iterationType:t="ITERATIVE"}=e;this._iterationType=t}}_iterationType="ITERATIVE";get iterationType(){return this._iterationType}set iterationType(e){this._iterationType=e}_root=null;get root(){return this._root}_size=0;get size(){return this._size}createNode(e,t){return new k(e,t)}clear(){this._root=null,this._size=0}isEmpty(){return this.size===0}add(e,t){let r=(l,h)=>{let d=new B([l]);for(;d.size>0;){let p=d.shift();if(p){if(h&&p.key===h.key)return;let g=this._addTo(h,p);if(g!==void 0)return g;p.left&&d.push(p.left),p.right&&d.push(p.right)}else return}},n,i;if(e===null)i=null;else if(typeof e=="number")i=this.createNode(e,t);else if(e instanceof k)i=e;else return;let s=typeof e=="number"?e:e?e.key:void 0,o=s!==void 0?this.get(s,this._defaultCallbackByKey):void 0;return this.root?o?(o.val=t,n=o):n=r(this.root,i):(this._setRoot(i),i!==null?this._setSize(1):this._setSize(0),n=this.root),n}addMany(e,t){return e.map((r,n)=>{if(r instanceof k)return this.add(r.key,r.val);if(r===null)return this.add(null);let i=t?.[n];return this.add(r,i)})}refill(e,t){return this.clear(),e.length===this.addMany(e,t).length}delete(e,t=this._defaultCallbackByKey){let r=[];if(!this.root)return r;e instanceof k&&(t=l=>l);let n=this.get(e,t);if(!n)return r;let i=n?.parent?n.parent:null,s=null,o=n;if(n.left){let l=n.left?this.getRightMost(n.left):null;if(l){let h=l.parent;o=this._swap(n,l),h&&(h.right===l?h.right=l.left:h.left=l.left,s=h)}}else if(!i)n.right!==void 0&&this._setRoot(n.right);else{let{familyPosition:l}=n;l==="LEFT"||l==="ROOT_LEFT"?i.left=n.right:(l==="RIGHT"||l==="ROOT_RIGHT")&&(i.right=n.right),s=i}return this._setSize(this.size-1),r.push({deleted:o,needBalanced:s}),r}getDepth(e,t=this.root){typeof e=="number"&&(e=this.get(e)),typeof t=="number"&&(t=this.get(t));let r=0;for(;e?.parent;){if(e===t)return r;r++,e=e.parent}return r}getHeight(e=this.root,t=this.iterationType){if(typeof e=="number"&&(e=this.get(e)),!e)return-1;if(t==="RECURSIVE"){let r=n=>{if(!n)return-1;let i=r(n.left),s=r(n.right);return Math.max(i,s)+1};return r(e)}else{if(!e)return-1;let r=[{node:e,depth:0}],n=0;for(;r.length>0;){let{node:i,depth:s}=r.pop();i.left&&r.push({node:i.left,depth:s+1}),i.right&&r.push({node:i.right,depth:s+1}),n=Math.max(n,s)}return n}}getMinHeight(e=this.root,t=this.iterationType){if(!e)return-1;if(t==="RECURSIVE"){let r=n=>{if(!n||!n.left&&!n.right)return 0;let i=r(n.left),s=r(n.right);return Math.min(i,s)+1};return r(e)}else{let r=[],n=e,i=null,s=new Map;for(;r.length>0||n;)if(n)r.push(n),n=n.left;else if(n=r[r.length-1],!n.right||i===n.right){if(n=r.pop(),n){let o=n.left?s.get(n.left)??-1:-1,l=n.right?s.get(n.right)??-1:-1;s.set(n,1+Math.min(o,l)),i=n,n=null}}else n=n.right;return s.get(e)??-1}}isPerfectlyBalanced(e=this.root){return this.getMinHeight(e)+1>=this.getHeight(e)}getNodes(e,t=this._defaultCallbackByKey,r=!1,n=this.root,i=this.iterationType){if(!n)return[];e instanceof k&&(t=o=>o);let s=[];if(i==="RECURSIVE"){let o=l=>{t(l)===e&&(s.push(l),r)||!l.left&&!l.right||(l.left&&o(l.left),l.right&&o(l.right))};o(n)}else{let o=new B([n]);for(;o.size>0;){let l=o.shift();if(l){if(t(l)===e&&(s.push(l),r))return s;l.left&&o.push(l.left),l.right&&o.push(l.right)}}}return s}has(e,t=this._defaultCallbackByKey,r=this.root,n=this.iterationType){return e instanceof k&&(t=i=>i),this.getNodes(e,t,!0,r,n).length>0}get(e,t=this._defaultCallbackByKey,r=this.root,n=this.iterationType){return e instanceof k&&(t=i=>i),this.getNodes(e,t,!0,r,n)[0]??null}getPathToRoot(e,t=!0){let r=[];for(;e.parent;)r.push(e),e=e.parent;return r.push(e),t?r.reverse():r}getLeftMost(e=this.root,t=this.iterationType){if(typeof e=="number"&&(e=this.get(e)),!e)return e;if(t==="RECURSIVE"){let r=n=>n.left?r(n.left):n;return r(e)}else{let r=J(n=>n.left?r.cont(n.left):n);return r(e)}}getRightMost(e=this.root,t=this.iterationType){if(!e)return e;if(t==="RECURSIVE"){let r=n=>n.right?r(n.right):n;return r(e)}else{let r=J(n=>n.right?r.cont(n.right):n);return r(e)}}isSubtreeBST(e,t=this.iterationType){if(!e)return!0;if(t==="RECURSIVE"){let r=(n,i,s)=>n?n.key<=i||n.key>=s?!1:r(n.left,i,n.key)&&r(n.right,n.key,s):!0;return r(e,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER)}else{let r=[],n=Number.MIN_SAFE_INTEGER,i=e;for(;i||r.length>0;){for(;i;)r.push(i),i=i.left;if(i=r.pop(),!i||n>=i.key)return!1;n=i.key,i=i.right}return!0}}isBST(e=this.iterationType){return this.root===null?!0:this.isSubtreeBST(this.root,e)}subTreeTraverse(e=this._defaultCallbackByKey,t=this.root,r=this.iterationType){typeof t=="number"&&(t=this.get(t));let n=[];if(!t)return n;if(r==="RECURSIVE"){let i=s=>{n.push(e(s)),s.left&&i(s.left),s.right&&i(s.right)};i(t)}else{let i=[t];for(;i.length>0;){let s=i.pop();n.push(e(s)),s.right&&i.push(s.right),s.left&&i.push(s.left)}}return n}dfs(e=this._defaultCallbackByKey,t="in",r=this.root,n="ITERATIVE"){if(!r)return[];let i=[];if(n==="RECURSIVE"){let s=o=>{switch(t){case"in":o.left&&s(o.left),i.push(e(o)),o.right&&s(o.right);break;case"pre":i.push(e(o)),o.left&&s(o.left),o.right&&s(o.right);break;case"post":o.left&&s(o.left),o.right&&s(o.right),i.push(e(o));break}};s(r)}else{let s=[{opt:0,node:r}];for(;s.length>0;){let o=s.pop();if(!(!o||!o.node))if(o.opt===1)i.push(e(o.node));else switch(t){case"in":s.push({opt:0,node:o.node.right}),s.push({opt:1,node:o.node}),s.push({opt:0,node:o.node.left});break;case"pre":s.push({opt:0,node:o.node.right}),s.push({opt:0,node:o.node.left}),s.push({opt:1,node:o.node});break;case"post":s.push({opt:1,node:o.node}),s.push({opt:0,node:o.node.right}),s.push({opt:0,node:o.node.left});break;default:s.push({opt:0,node:o.node.right}),s.push({opt:1,node:o.node}),s.push({opt:0,node:o.node.left});break}}}return i}bfs(e=this._defaultCallbackByKey,t=!1,r=this.root,n=this.iterationType){if(!r)return[];let i=[];if(n==="RECURSIVE"){let s=(o,l)=>{e&&i.push(e(o,t?l:void 0)),o.left&&s(o.left,l+1),o.right&&s(o.right,l+1)};s(r,0)}else{let s=[[r,0]];for(;s.length>0;){let o=s.pop(),[l,h]=o;e&&i.push(e(l,t?h:void 0)),l.right&&s.push([l.right,h+1]),l.left&&s.push([l.left,h+1])}}return i}getPredecessor(e){if(e.left){let t=e.left;for(;!t||t.right&&t.right!==e;)t&&(t=t.right);return t}else return e}morris(e=this._defaultCallbackByKey,t="in",r=this.root){if(r===null)return[];let n=[],i=r,s=l=>{let h=null,d=null;for(;l;)d=l.right,l.right=h,h=l,l=d;return h},o=l=>{let h=s(l),d=h;for(;d;)n.push(e(d)),d=d.right;s(h)};switch(t){case"in":for(;i;){if(i.left){let l=this.getPredecessor(i);if(l.right)l.right=null;else{l.right=i,i=i.left;continue}}n.push(e(i)),i=i.right}break;case"pre":for(;i;){if(i.left){let l=this.getPredecessor(i);if(l.right)l.right=null;else{l.right=i,n.push(e(i)),i=i.left;continue}}else n.push(e(i));i=i.right}break;case"post":for(;i;){if(i.left){let l=this.getPredecessor(i);if(l.right===null){l.right=i,i=i.left;continue}else l.right=null,o(i.left)}i=i.right}o(r);break}return n}_swap(e,t){let{key:r,val:n}=t,i=this.createNode(r,n);return i&&(t.key=e.key,t.val=e.val,e.key=i.key,e.val=i.val),t}_defaultCallbackByKey=e=>e.key;_addTo(e,t){if(t)return t.left===void 0?(t.left=e,e&&this._setSize(this.size+1),t.left):t.right===void 0?(t.right=e,e&&this._setSize(this.size+1),t.right):void 0}_setRoot(e){e&&(e.parent=void 0),this._root=e}_setSize(e){this._size=e}};var M=class extends k{constructor(e,t){super(e,t)}},F=class extends X{constructor(e){if(super(e),e!==void 0){let{comparator:t}=e;t!==void 0&&(this._comparator=t)}}createNode(e,t){return new M(e,t)}add(e,t){let r=null,n=null;if(e instanceof M?n=e:typeof e=="number"?n=this.createNode(e,t):e===null&&(n=null),this.root===null)this._setRoot(n),this._setSize(this.size+1),r=this.root;else{let i=this.root,s=!0;for(;s;)i!==null&&n!==null?this._compare(i.key,n.key)==="eq"?(n&&(i.val=n.val),s=!1,r=i):this._compare(i.key,n.key)==="gt"?i.left===void 0?(n&&(n.parent=i),i.left=n,this._setSize(this.size+1),s=!1,r=i.left):i.left&&(i=i.left):this._compare(i.key,n.key)==="lt"&&(i.right===void 0?(n&&(n.parent=i),i.right=n,this._setSize(this.size+1),s=!1,r=i.right):i.right&&(i=i.right)):s=!1}return r}addMany(e,t,r=!0,n=this.iterationType){function i(y){return y.indexOf(null)===-1}if(!r||!i(e))return super.addMany(e,t);let s=[],o=e.map((y,_)=>[y,t?.[_]]),l=[];function h(y){for(let[_]of y)if(_ instanceof M)return!0;return!1}function d(y){for(let[_]of y)if(typeof _=="number")return!0;return!1}let p=[],g=[];if(h(o))l=o.sort((y,_)=>y[0].key-_[0].key);else if(d(o))l=o.sort((y,_)=>y[0]-_[0]);else throw new Error("Invalid input keysOrNodes");p=l.map(([y])=>y),g=l.map(([,y])=>y);let x=(y,_)=>{if(y.length===0)return;let u=Math.floor((y.length-1)/2),f=this.add(y[u],_?.[u]);s.push(f),x(y.slice(0,u),_?.slice(0,u)),x(y.slice(u+1),_?.slice(u+1))},V=()=>{let _=[[0,l.length-1]];for(;_.length>0;){let u=_.pop();if(u){let[f,m]=u;if(f<=m){let b=f+Math.floor((m-f)/2),c=this.add(p[b],g?.[b]);s.push(c),_.push([b+1,m]),_.push([f,b-1])}}}};return n==="RECURSIVE"?x(p,g):V(),s}get(e,t=this._defaultCallbackByKey,r=this.root,n=this.iterationType){return this.getNodes(e,t,!0,r,n)[0]??null}lastKey(e=this.root,t=this.iterationType){return this._compare(0,1)==="lt"?this.getRightMost(e,t)?.key??0:this._compare(0,1)==="gt"?this.getLeftMost(e,t)?.key??0:this.getRightMost(e,t)?.key??0}getNodes(e,t=this._defaultCallbackByKey,r=!1,n=this.root,i=this.iterationType){if(!n)return[];let s=[];if(i==="RECURSIVE"){let o=l=>{t(l)===e&&(s.push(l),r)||!l.left&&!l.right||(t===this._defaultCallbackByKey?(this._compare(l.key,e)==="gt"&&l.left&&o(l.left),this._compare(l.key,e)==="lt"&&l.right&&o(l.right)):(l.left&&o(l.left),l.right&&o(l.right)))};o(n)}else{let o=new B([n]);for(;o.size>0;){let l=o.shift();if(l){if(t(l)===e&&(s.push(l),r))return s;t===this._defaultCallbackByKey?(this._compare(l.key,e)==="gt"&&l.left&&o.push(l.left),this._compare(l.key,e)==="lt"&&l.right&&o.push(l.right)):(l.left&&o.push(l.left),l.right&&o.push(l.right))}}}return s}lesserOrGreaterTraverse(e=this._defaultCallbackByKey,t="lt",r=this.root,n=this.iterationType){typeof r=="number"&&(r=this.get(r));let i=[];if(!r)return i;let s=r.key;if(!this.root)return i;if(n==="RECURSIVE"){let o=l=>{this._compare(l.key,s)===t&&i.push(e(l)),!(!l.left&&!l.right)&&(l.left&&this._compare(l.left.key,s)===t&&o(l.left),l.right&&this._compare(l.right.key,s)===t&&o(l.right))};return o(this.root),i}else{let o=new B([this.root]);for(;o.size>0;){let l=o.shift();l&&(this._compare(l.key,s)===t&&i.push(e(l)),l.left&&this._compare(l.left.key,s)===t&&o.push(l.left),l.right&&this._compare(l.right.key,s)===t&&o.push(l.right))}return i}}perfectlyBalance(e=this.iterationType){let t=this.dfs(n=>n,"in"),r=t.length;if(this.clear(),t.length<1)return!1;if(e==="RECURSIVE"){let n=(i,s)=>{if(i>s)return;let o=i+Math.floor((s-i)/2),l=t[o];this.add(l.key,l.val),n(i,o-1),n(o+1,s)};return n(0,r-1),!0}else{let n=[[0,r-1]];for(;n.length>0;){let i=n.pop();if(i){let[s,o]=i;if(s<=o){let l=s+Math.floor((o-s)/2),h=t[l];this.add(h.key,h.val),n.push([l+1,o]),n.push([s,l-1])}}}return!0}}isAVLBalanced(e=this.iterationType){if(!this.root)return!0;let t=!0;if(e==="RECURSIVE"){let r=n=>{if(!n)return 0;let i=r(n.left),s=r(n.right);return Math.abs(i-s)>1&&(t=!1),Math.max(i,s)+1};r(this.root)}else{let r=[],n=this.root,i=null,s=new Map;for(;r.length>0||n;)if(n)r.push(n),n=n.left;else if(n=r[r.length-1],!n.right||i===n.right){if(n=r.pop(),n){let o=n.left?s.get(n.left)??-1:-1,l=n.right?s.get(n.right)??-1:-1;if(Math.abs(o-l)>1)return!1;s.set(n,1+Math.max(o,l)),i=n,n=null}}else n=n.right}return t}_comparator=(e,t)=>e-t;_compare(e,t){let r=this._comparator(e,t);return r>0?"gt":r<0?"lt":"eq"}};var Le=class{_freq;_max;constructor({frequency:e=0,max:t}){this._freq=e,this._max=t,this._freqMap={0:0},this._msb=ve(t),this._negativeCount=e<0?t:0}_freqMap;get freqMap(){return this._freqMap}set freqMap(e){this._freqMap=e}_msb;get msb(){return this._msb}set msb(e){this._msb=e}_negativeCount;get negativeCount(){return this._negativeCount}set negativeCount(e){this._negativeCount=e}get freq(){return this._freq}get max(){return this._max}readSingle(e){return this._checkIndex(e),this._readSingle(e)}update(e,t){this._checkIndex(e);let r=this._readSingle(e);this._update(e,t),this._updateNegativeCount(r,r+t)}writeSingle(e,t){this._checkIndex(e),this._writeSingle(e,t)}read(e){if(!Number.isInteger(e))throw new Error("Invalid count");return this._read(Math.max(Math.min(e,this.max),0))}lowerBound(e){if(this.negativeCount>0)throw new Error("Sequence is not non-descending");return this._binarySearch(e,(t,r)=>t<r)}upperBound(e){if(this.negativeCount>0)throw new Error("Must not be descending");return this._binarySearch(e,(t,r)=>t<=r)}_getFrequency(e){return e in this.freqMap?this.freqMap[e]:this.freq*(e&-e)}_updateFrequency(e,t){this.freqMap[e]=this._getFrequency(e)+t}_checkIndex(e){if(!Number.isInteger(e))throw new Error("Invalid index: Index must be an integer.");if(e<0||e>=this.max)throw new Error("Index out of range: Index must be within the range [0, this.max).")}_readSingle(e){e=e+1;let t=this._getFrequency(e),r=e-(e&-e);for(e--;e!==r;)t-=this._getFrequency(e),e-=e&-e;return t}_updateNegativeCount(e,t){e<0&&t>=0?this.negativeCount--:e>=0&&t<0&&this.negativeCount++}_update(e,t){for(e=e+1;e<=this.max;)this._updateFrequency(e,t),e+=e&-e}_writeSingle(e,t){let r=this._readSingle(e);this._update(e,t-r),this._updateNegativeCount(r,t)}_read(e){let t=e,r=0;for(;t;)r+=this._getFrequency(t),t-=t&-t;return r}_binarySearch(e,t){let r=0,n=this.msb<<1,i=e;for(;n>r+1;){let s=r+n>>1,o=this._getFrequency(s);s<=this.max&&t(o,i)?(i-=o,r=s):n=s}return r}};var H=class{constructor(e,t,r,n){this._start=e,this._end=t,this._sum=r,this._val=n||null}_start=0;get start(){return this._start}set start(e){this._start=e}_end=0;get end(){return this._end}set end(e){this._end=e}_val=null;get val(){return this._val}set val(e){this._val=e}_sum=0;get sum(){return this._sum}set sum(e){this._sum=e}_left=null;get left(){return this._left}set left(e){this._left=e}_right=null;get right(){return this._right}set right(e){this._right=e}},De=class{constructor(e,t,r){t=t||0,r=r||e.length-1,this._values=e,this._start=t,this._end=r,e.length>0?this._root=this.build(t,r):(this._root=null,this._values=[])}_values=[];get values(){return this._values}_start=0;get start(){return this._start}_end;get end(){return this._end}_root;get root(){return this._root}build(e,t){if(e>t)return new H(e,t,0);if(e===t)return new H(e,t,this._values[e]);let r=e+Math.floor((t-e)/2),n=this.build(e,r),i=this.build(r+1,t),s=new H(e,t,n.sum+i.sum);return s.left=n,s.right=i,s}updateNode(e,t,r){let n=this.root||null;if(!n)return;let i=(s,o,l,h)=>{if(s.start===s.end&&s.start===o){s.sum=l,h!==void 0&&(s.val=h);return}let d=s.start+Math.floor((s.end-s.start)/2);o<=d?s.left&&i(s.left,o,l,h):s.right&&i(s.right,o,l,h),s.left&&s.right&&(s.sum=s.left.sum+s.right.sum)};i(n,e,t,r)}querySumByRange(e,t){let r=this.root||null;if(!r)return 0;if(e<0||t>=this.values.length||e>t)return NaN;let n=(i,s,o)=>{if(s<=i.start&&o>=i.end)return i.sum;let l=i.start+Math.floor((i.end-i.start)/2);if(o<=l)return i.left?n(i.left,s,o):NaN;if(s>l)return i.right?n(i.right,s,o):NaN;{let h=0,d=0;return i.left&&(h=n(i.left,s,l)),i.right&&(d=n(i.right,l+1,o)),h+d}};return n(r,e,t)}_setValues(e){this._values=e}_setStart(e){this._start=e}_setEnd(e){this._end=e}_setRoot(e){this._root=e}};var A=class extends M{height;constructor(e,t){super(e,t),this.height=0}},Y=class extends F{constructor(e){super(e)}createNode(e,t){return new A(e,t)}add(e,t){let r=super.add(e,t);return r&&this._balancePath(r),r}delete(e,t=this._defaultCallbackByKey){let r=super.delete(e,t);for(let{needBalanced:n}of r)n&&this._balancePath(n);return r}_swap(e,t){let{key:r,val:n,height:i}=t,s=this.createNode(r,n);return s&&(s.height=i,t.key=e.key,t.val=e.val,t.height=e.height,e.key=s.key,e.val=s.val,e.height=s.height),t}_balanceFactor(e){return e.right?e.left?e.right.height-e.left.height:+e.height:-e.height}_updateHeight(e){if(!e.left&&!e.right)e.height=0;else if(e.left)e.right?e.height=1+Math.max(e.right.height,e.left.height):e.height=1+e.left.height;else{let t=e.right?e.right.height:0;e.height=1+t}}_balancePath(e){let t=this.getPathToRoot(e,!1);for(let r=0;r<t.length;r++){let n=t[r];switch(this._updateHeight(n),this._balanceFactor(n)){case-2:n&&n.left&&(this._balanceFactor(n.left)<=0?this._balanceLL(n):this._balanceLR(n));break;case 2:n&&n.right&&(this._balanceFactor(n.right)>=0?this._balanceRR(n):this._balanceRL(n))}}}_balanceLL(e){let t=e.parent,r=e.left;e.parent=r,r&&r.right&&(r.right.parent=e),r&&(r.parent=t),e===this.root?r&&this._setRoot(r):t?.left===e?t.left=r:t&&(t.right=r),r&&(e.left=r.right,r.right=e),this._updateHeight(e),r&&this._updateHeight(r)}_balanceLR(e){let t=e.parent,r=e.left,n=null;r&&(n=r.right),e&&(e.parent=n),r&&(r.parent=n),n&&(n.left&&(n.left.parent=r),n.right&&(n.right.parent=e),n.parent=t),e===this.root?n&&this._setRoot(n):t&&(t.left===e?t.left=n:t.right=n),n&&(e.left=n.right,r&&(r.right=n.left),n.left=r,n.right=e),this._updateHeight(e),r&&this._updateHeight(r),n&&this._updateHeight(n)}_balanceRR(e){let t=e.parent,r=e.right;e.parent=r,r&&(r.left&&(r.left.parent=e),r.parent=t),e===this.root?r&&this._setRoot(r):t&&(t.left===e?t.left=r:t.right=r),r&&(e.right=r.left,r.left=e),this._updateHeight(e),r&&this._updateHeight(r)}_balanceRL(e){let t=e.parent,r=e.right,n=null;r&&(n=r.left),e.parent=n,r&&(r.parent=n),n&&(n.left&&(n.left.parent=e),n.right&&(n.right.parent=r),n.parent=t),e===this.root?n&&this._setRoot(n):t&&(t.left===e?t.left=n:t.right=n),n&&(e.right=n.left),r&&n&&(r.left=n.right),n&&(n.left=e),n&&(n.right=r),this._updateHeight(e),r&&this._updateHeight(r),n&&this._updateHeight(n)}};var se=class extends M{constructor(e,t){super(e,t),this._color="RED"}_color;get color(){return this._color}set color(e){this._color=e}},Fe=class extends F{constructor(e){super(e)}createNode(e,t){return new se(e,t)}};var O=class extends A{count;constructor(e,t,r=1){super(e,t),this.count=r}},Ie=class extends Y{constructor(e){super(e)}_count=0;get count(){return this._count}createNode(e,t,r){return new O(e,t,r)}add(e,t,r=1){let n,i;if(e instanceof O?i=this.createNode(e.key,e.val,e.count):e===null?i=null:i=this.createNode(e,t,r),!this.root)this._setRoot(i),this._setSize(this.size+1),i&&this._setCount(this.count+i.count),n=this.root;else{let s=this.root,o=!0;for(;o;)s?i&&(this._compare(s.key,i.key)==="eq"?(s.val=i.val,s.count+=i.count,this._setCount(this.count+i.count),o=!1,n=s):this._compare(s.key,i.key)==="gt"?s.left===void 0?(s.left=i,this._setSize(this.size+1),this._setCount(this.count+i.count),o=!1,n=s.left):s.left&&(s=s.left):this._compare(s.key,i.key)==="lt"&&(s.right===void 0?(s.right=i,this._setSize(this.size+1),this._setCount(this.count+i.count),o=!1,n=s.right):s.right&&(s=s.right))):o=!1}return n&&this._balancePath(n),n}_addTo(e,t){if(t)return t.left===void 0?(t.left=e,e!==null&&(this._setSize(this.size+1),this._setCount(this.count+e.count)),t.left):t.right===void 0?(t.right=e,e!==null&&(this._setSize(this.size+1),this._setCount(this.count+e.count)),t.right):void 0}addMany(e,t){let r=[];for(let n=0;n<e.length;n++){let i=e[n];if(i instanceof O){r.push(this.add(i.key,i.val,i.count));continue}if(i===null){r.push(this.add(NaN,void 0,0));continue}r.push(this.add(i,t?.[n],1))}return r}perfectlyBalance(e=this.iterationType){let t=this.dfs(n=>n,"in"),r=t.length;if(t.length<1)return!1;if(this.clear(),e==="RECURSIVE"){let n=(i,s)=>{if(i>s)return;let o=i+Math.floor((s-i)/2),l=t[o];this.add(l.key,l.val,l.count),n(i,o-1),n(o+1,s)};return n(0,r-1),!0}else{let n=[[0,r-1]];for(;n.length>0;){let i=n.pop();if(i){let[s,o]=i;if(s<=o){let l=s+Math.floor((o-s)/2),h=t[l];this.add(h.key,h.val,h.count),n.push([l+1,o]),n.push([s,l-1])}}}return!0}}delete(e,t=this._defaultCallbackByKey,r=!1){let n=[];if(!this.root)return n;let i=this.get(e,t);if(!i)return n;let s=i?.parent?i.parent:null,o=null,l=i;if(i.count>1&&!r)i.count--,this._setCount(this.count-1);else{if(i.left){let h=i.left?this.getRightMost(i.left):null;if(h){let d=h.parent;l=this._swap(i,h),d&&(d.right===h?d.right=h.left:d.left=h.left,o=d)}}else if(!s)i.right!==void 0&&this._setRoot(i.right);else{let{familyPosition:h}=i;h==="LEFT"||h==="ROOT_LEFT"?s.left=i.right:(h==="RIGHT"||h==="ROOT_RIGHT")&&(s.right=i.right),o=s}this._setSize(this.size-1),this._setCount(this.count-l.count)}return n.push({deleted:l,needBalanced:o}),o&&this._balancePath(o),n}clear(){super.clear(),this._setCount(0)}_swap(e,t){let{key:r,val:n,count:i,height:s}=t,o=this.createNode(r,n,i);return o&&(o.height=s,t.key=e.key,t.val=e.val,t.count=e.count,t.height=e.height,e.key=o.key,e.val=o.val,e.count=o.count,e.height=o.height),t}_setCount(e){this._count=e}};var ze=class a{constructor(e,t,r){this._key=e,this._value=t||void 0,this._children=r||[]}_key;get key(){return this._key}set key(e){this._key=e}_value;get value(){return this._value}set value(e){this._value=e}_children;get children(){return this._children}set children(e){this._children=e}addChildren(e){this.children||(this.children=[]),e instanceof a?this.children.push(e):this.children=this.children.concat(e)}getHeight(){let e=0;if(this){let t=(r,n)=>{n>e&&(e=n);let{children:i}=r;if(i)for(let s=0,o=i.length;s<o;s++)t(i[s],n+1)};t(this,0)}return e}};var He=class{_matrix;constructor(e){let{row:t,col:r,initialVal:n}=e;this._matrix=new Array(t).fill(void 0).map(()=>new Array(r).fill(n||0))}toArray(){return this._matrix}};var oe=class a{constructor(e=0,t=0,r=1){this.x=e;this.y=t;this.w=r}get isZero(){return this.x===0&&this.y===0}get length(){return Math.sqrt(this.x*this.x+this.y*this.y)}get lengthSq(){return this.x*this.x+this.y*this.y}get rounded(){return new a(Math.round(this.x),Math.round(this.y))}static add(e,t){return new a(e.x+t.x,e.y+t.y)}static subtract(e,t){return new a(e.x-t.x,e.y-t.y)}static subtractValue(e,t){return new a(e.x-t,e.y-t)}static multiply(e,t){return new a(e.x*t,e.y*t)}static divide(e,t){return new a(e.x/t,e.y/t)}static equals(e,t){return e.x===t.x&&e.y===t.y}static equalsRounded(e,t,r=12){let n=a.abs(a.subtract(e,t));return n.x<r&&n.y<r}static normalize(e){let t=e.length;return t>2220446049250313e-31?a.divide(e,t):e}static truncate(e,t){return e.length>t?a.multiply(a.normalize(e),t):e}static perp(e){return new a(-e.y,e.x)}static reverse(e){return new a(-e.x,-e.y)}static abs(e){return new a(Math.abs(e.x),Math.abs(e.y))}static dot(e,t){return e.x*t.x+e.y*t.y}static distance(e,t){let r=t.y-e.y,n=t.x-e.x;return Math.sqrt(r*r+n*n)}static distanceSq(e,t){let r=t.y-e.y,n=t.x-e.x;return r*r+n*n}static sign(e,t){return e.y*t.x>e.x*t.y?-1:1}static angle(e){let t=new a(0,-1),r=Math.acos(a.dot(e,t)/(e.length*t.length));return a.sign(e,t)===1?Math.PI*2-r:r}static random(e,t){let r=Math.floor(Math.random()*e-e/2),n=Math.floor(Math.random()*t-t/2);return new a(r,n)}zero(){this.x=0,this.y=0}},Ae=oe;var Oe=class a{_matrix;constructor(e){typeof e>"u"?this._matrix=a.identity:e instanceof Ae?(this._matrix=a.identity,this._matrix[0][0]=e.x,this._matrix[1][0]=e.y,this._matrix[2][0]=e.w):this._matrix=e}static get empty(){return[[],[],[]]}static get identity(){return[[1,0,0],[0,1,0],[0,0,1]]}get m(){return this._matrix}static add(e,t){let r=a.empty;for(let n=0;n<3;n++)for(let i=0;i<3;i++)r[n][i]=e.m[n][i]+t.m[n][i];return new a(r)}static subtract(e,t){let r=a.empty;for(let n=0;n<3;n++)for(let i=0;i<3;i++)r[n][i]=e.m[n][i]-t.m[n][i];return new a(r)}static multiply(e,t){let r=a.empty;for(let n=0;n<3;n++)for(let i=0;i<3;i++){r[n][i]=0;for(let s=0;s<3;s++)r[n][i]+=e.m[n][s]*t.m[s][i]}return new a(r)}static multiplyByValue(e,t){let r=a.empty;for(let n=0;n<3;n++)for(let i=0;i<3;i++)r[n][i]=e.m[n][i]*t;return new a(r)}static multiplyByVector(e,t){return a.multiply(e,new a(t)).toVector()}static view(e,t){let n=e/2,i=t/2,s=Math.cos(Math.PI);return new a([[1,0,n],[0,s*1,i],[0,0,1]])}static scale(e){return a.multiplyByValue(new a,e)}static rotate(e){let t=Math.cos(e),r=Math.sin(e);return new a([[t,-r,0],[r,t,0],[0,0,1]])}static translate(e){return new a([[1,0,e.x],[0,1,e.y],[0,0,e.w]])}toVector(){return new Ae(this._matrix[0][0],this._matrix[1][0])}};var le=class a{direction;turn;constructor(e,t){this.direction=e,this.turn=()=>new a(t[e],t)}},Pe=class{onMove;_matrix;_cur;_character;_VISITED;constructor({matrix:e,turning:t,onMove:r,init:{cur:n,charDir:i,VISITED:s}}){this._matrix=e,this._cur=n,this._character=new le(i,t),this.onMove=r,this.onMove&&this.onMove(this._cur),this._VISITED=s,this._matrix[this._cur[0]][this._cur[1]]=this._VISITED}start(){for(;this.check(this._character.direction)||this.check(this._character.turn().direction);){let{direction:e}=this._character;this.check(e)?this.move(e):this.check(this._character.turn().direction)&&(this._character=this._character.turn())}}check(e){let t,r,n=this._matrix,[i,s]=this._cur;switch(e){case"up":if(r=n[i-1],!r)return!1;t=r[s];break;case"right":t=n[i][s+1];break;case"down":if(r=n[i+1],!r)return!1;t=r[s];break;case"left":t=n[i][s-1];break}return t!==void 0&&t!==this._VISITED}move(e){switch(e){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[t,r]=this._cur;this._matrix[t][r]=this._VISITED,this.onMove&&this.onMove(this._cur)}};var Q=class{constructor(e){this._key=e,this._isEnd=!1,this._children=new Map}_key;get key(){return this._key}set key(e){this._key=e}_children;get children(){return this._children}set children(e){this._children=e}_isEnd;get isEnd(){return this._isEnd}set isEnd(e){this._isEnd=e}},qe=class{_caseSensitive;constructor(e,t=!0){if(this._root=new Q(""),this._caseSensitive=t,e)for(let r of e)this.add(r)}_root;get root(){return this._root}set root(e){this._root=e}add(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);n||(n=new Q(r),t.children.set(r,n)),t=n}return t.isEnd=!0,!0}has(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);if(!n)return!1;t=n}return t.isEnd}delete(e){e=this._caseProcess(e);let t=!1,r=(n,i)=>{let s=e[i],o=n.children.get(s);return o?i===e.length-1?o.isEnd?(o.children.size>0?o.isEnd=!1:n.children.delete(s),t=!0,!0):!1:r(o,i+1)&&!n.isEnd&&o.children.size===0?(n.children.delete(s),!0):!1:!1};return r(this.root,0),t}getHeight(){let e=this.root,t=0;if(e){let r=(n,i)=>{i>t&&(t=i);let{children:s}=n;if(s)for(let o of s.entries())r(o[1],i+1)};r(e,0)}return t}hasPurePrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);if(!n)return!1;t=n}return!t.isEnd}hasPrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);if(!n)return!1;t=n}return!0}hasCommonPrefix(e){e=this._caseProcess(e);let t="",r=n=>{if(t+=n.key,t!==e&&!n.isEnd)if(n&&n.children&&n.children.size===1)r(Array.from(n.children.values())[0]);else return};return r(this.root),t===e}getLongestCommonPrefix(){let e="",t=r=>{if(e+=r.key,!r.isEnd)if(r&&r.children&&r.children.size===1)t(Array.from(r.children.values())[0]);else return};return t(this.root),e}getWords(e="",t=Number.MAX_SAFE_INTEGER){e=this._caseProcess(e);let r=[],n=0;function i(o,l){for(let h of o.children.keys()){let d=o.children.get(h);d!==void 0&&i(d,l.concat(h))}if(o.isEnd){if(n>t-1)return;r.push(l),n++}}let s=this.root;if(e)for(let o of e){let l=s.children.get(o);l&&(s=l)}return s!==this.root&&i(s,e),r}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};return Je($e);})();
2
2
  /**
3
3
  * data-structure-typed
4
4
  *