data-structure-typed 1.38.2 → 1.38.4

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 (48) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +9 -9
  4. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  5. package/dist/cjs/data-structures/binary-tree/bst.d.ts +4 -4
  6. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  7. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
  8. package/dist/cjs/types/helpers.d.ts +1 -1
  9. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +9 -9
  10. package/dist/mjs/data-structures/binary-tree/bst.d.ts +4 -4
  11. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
  12. package/dist/mjs/types/helpers.d.ts +1 -1
  13. package/dist/umd/index.global.js +1 -1
  14. package/dist/umd/index.global.js.map +1 -1
  15. package/package.json +6 -6
  16. package/src/data-structures/binary-tree/avl-tree.ts +1 -1
  17. package/src/data-structures/binary-tree/binary-indexed-tree.ts +1 -1
  18. package/src/data-structures/binary-tree/binary-tree.ts +21 -21
  19. package/src/data-structures/binary-tree/bst.ts +7 -7
  20. package/src/data-structures/binary-tree/tree-multiset.ts +2 -1
  21. package/src/data-structures/graph/abstract-graph.ts +11 -10
  22. package/src/data-structures/graph/directed-graph.ts +2 -1
  23. package/src/data-structures/graph/undirected-graph.ts +5 -4
  24. package/src/data-structures/hash/hash-map.ts +1 -1
  25. package/src/data-structures/hash/tree-map.ts +1 -2
  26. package/src/data-structures/hash/tree-set.ts +1 -2
  27. package/src/data-structures/linked-list/singly-linked-list.ts +1 -1
  28. package/src/data-structures/matrix/matrix.ts +1 -1
  29. package/src/data-structures/matrix/vector2d.ts +1 -2
  30. package/src/data-structures/queue/deque.ts +4 -5
  31. package/src/data-structures/queue/queue.ts +1 -1
  32. package/src/types/data-structures/binary-tree/binary-tree.ts +1 -1
  33. package/src/types/data-structures/matrix/navigator.ts +1 -1
  34. package/src/types/helpers.ts +1 -1
  35. package/src/types/utils/utils.ts +1 -1
  36. package/src/types/utils/validate-type.ts +2 -2
  37. package/test/integration/bst.test.ts +1 -1
  38. package/test/integration/index.html +2 -2
  39. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +22 -6
  40. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +20 -1
  41. package/test/unit/data-structures/binary-tree/bst.test.ts +3 -3
  42. package/test/unit/data-structures/binary-tree/overall.test.ts +1 -1
  43. package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +1 -1
  44. package/test/unit/data-structures/heap/heap.test.ts +2 -2
  45. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +1 -1
  46. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +2 -2
  47. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +2 -2
  48. package/test/utils/big-o.ts +1 -1
@@ -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 i of Ge(e))!We.call(a,i)&&i!==t&&ae(a,i,{get:()=>e[i],enumerable:!(r=Ye(e,i))||r.enumerable});return a};var Je=a=>Qe(ae({},"__esModule",{value:!0}),a);var $e={};Xe($e,{AVLTree:()=>X,AVLTreeNode:()=>H,AbstractEdge:()=>L,AbstractGraph:()=>C,AbstractVertex:()=>V,ArrayDeque:()=>xe,BST:()=>I,BSTNode:()=>M,BinaryIndexedTree:()=>Ce,BinaryTree:()=>W,BinaryTreeNode:()=>R,CP:()=>ne,Character:()=>le,CoordinateMap:()=>ue,CoordinateSet:()=>de,Deque:()=>_e,DirectedEdge:()=>A,DirectedGraph:()=>Y,DirectedVertex:()=>F,DoublyLinkedList:()=>P,DoublyLinkedListNode:()=>k,FamilyPosition:()=>ie,FibonacciHeap:()=>we,FibonacciHeapNode:()=>Z,HashMap:()=>pe,HashTable:()=>he,HashTableNode:()=>q,Heap:()=>K,IterationType:()=>G,LinkedListQueue:()=>ye,MapEdge:()=>re,MapGraph:()=>Le,MapVertex:()=>te,Matrix2D:()=>Oe,MatrixNTI2D:()=>ze,MaxHeap:()=>ke,MaxPriorityQueue:()=>Ke,MinHeap:()=>Be,MinPriorityQueue:()=>Me,Navigator:()=>qe,ObjectDeque:()=>be,PriorityQueue:()=>S,Queue:()=>B,RBColor:()=>Re,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:()=>Se,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),i=new q(e,t);if(!this._buckets[r])this._buckets[r]=i;else{let n=this._buckets[r];for(;n;){if(n.key===e){n.val=t;return}if(!n.next)break;n=n.next}n.next=i}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],i=null;for(;r;){if(r.key===e){i?i.next=r.next:this._buckets[t]=r.next,this._size--,r.next=null;return}i=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 i=0;i<t.length;i++){let n=t.charCodeAt(i),s=.618033988749895,o=1<<30;r=(r*s+n)%o}return Math.abs(r)}_murmurStringHashFn(e){let t=String(e),i=0;for(let n=0;n<t.length;n++){let s=t.charCodeAt(n);i=(i^s)*1540483477,i=(i^i>>>15)*668265261,i=i^i>>>15}return Math.abs(i)}_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 i=r;for(;i;){let n=this._hash(i.key),s=new q(i.key,i.val);if(!t[n])t[n]=s;else{let o=t[n];for(;o.next;)o=o.next;o.next=s}i=i.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||(i=>{let n=String(i),s=0;for(let o=0;o<n.length;o++)s+=n.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 i=this._hash(e);this.table[i]||(this.table[i]=[]);for(let n=0;n<this.table[i].length;n++)if(this.table[i][n][0]===e){this.table[i][n][1]=t;return}this.table[i].push([e,t]),this.size++}get(e){let t=this._hash(e);if(this.table[t]){for(let[r,i]of this.table[t])if(r===e)return i}}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[i,n]of r){let s=this._hash(i)%e;t[s]||(t[s]=[]),t[s].push([i,n])}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){let t;e instanceof w?t=e.val:t=e;let r=this.head,i=null;for(;r;){if(r.val===t)return i===null?(this.head=r.next,r===this.tail&&(this.tail=null)):(i.next=r.next,r===this.tail&&(this.tail=i)),this._length--,!0;i=r,r=r.next}return!1}insertAt(e,t){if(e<0||e>this.length)return!1;if(e===0)return this.unshift(t),!0;if(e===this.length)return this.push(t),!0;let r=new w(t),i=this.getNodeAt(e-1);return r.next=i.next,i.next=r,this._length++,!0}isEmpty(){return this.length===0}clear(){this._head=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 i=this.head;for(;i.next;){if(i.next.val===r){let n=new w(t);return n.next=i.next,i.next=n,this._length++,!0}i=i.next}return!1}insertAfter(e,t){let r;if(e instanceof w?r=e:r=this.findNode(e),r){let i=new w(t);return i.next=r.next,r.next=i,r===this.tail&&(this.tail=i),this._length++,!0}return!1}countOccurrences(e){let t=0,r=this.head;for(;r;)r.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),i=this.getNodeAt(e-1),n=i.next;return r.prev=i,r.next=n,i.next=r,n.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,i=t.next;return r.next=i,i.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,i=t.next;r.next=i,i.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,i=this.head;for(;i;)r=e(r,i.val),i=i.next;return r}insertAfter(e,t){let r;if(e instanceof k?r=e:r=this.findNode(e),r){let i=new k(t);return i.next=r.next,r.next&&(r.next.prev=i),i.prev=r,r.next=i,r===this.tail&&(this.tail=i),this._length++,!0}return!1}insertBefore(e,t){let r;if(e instanceof k?r=e:r=this.findNode(e),r){let i=new k(t);return i.prev=r.prev,r.prev&&(r.prev.next=i),i.next=r,r.prev=i,r===this.head&&(this.head=i),this._length++,!0}return!1}};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()),i=new Array(this.maxLevel).fill(this.head),n=this.head;for(let s=this.level-1;s>=0;s--){for(;n.forward[s]&&n.forward[s].key<e;)n=n.forward[s];i[s]=n}for(let s=0;s<r.forward.length;s++)r.forward[s]=i[s].forward[s],i[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 i=this.level-1;i>=0;i--){for(;r.forward[i]&&r.forward[i].key<e;)r=r.forward[i];t[i]=r}if(r=r.forward[0],r&&r.key===e){for(let i=0;i<this.level&&t[i].forward[i]===r;i++)t[i].forward[i]=r.forward[i];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,i=[];for(;++t<r;){let n=a[t];e(n,t,a)&&(i.push(n),Array.prototype.splice.call(a,t--,1),r--)}return i},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=i=>{i<this.size&&(e==="in"?(r(2*i+1),t.push(this.nodes[i]),r(2*i+2)):e==="pre"?(t.push(this.nodes[i]),r(2*i+1),r(2*i+2)):e==="post"&&(r(2*i+1),r(2*i+2),t.push(this.nodes[i])))};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),i=this.nodes[r];if(this.comparator(t,i)<0)this.nodes[e]=i,this.nodes[r]=t,e=r;else break}}sinkDown(e){let t=2*e+1,r=2*e+2,i=this.nodes.length,n=e;if(t<i&&this.comparator(this.nodes[t],this.nodes[n])<0&&(n=t),r<i&&this.comparator(this.nodes[r],this.nodes[n])<0&&(n=r),n!==e){let s=this.nodes[e];this.nodes[e]=this.nodes[n],this.nodes[n]=s,this.sinkDown(n)}}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,i=!1;for(;!(r===e&&i);)r===e&&(i=!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,i=t.right,n=r.left;t.right=r,r.left=t,i.left=n,n.right=i}(!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,i,n,s;for(let o of t){for(r=o,n=r.degree;e[n];)i=e[n],this.comparator(r.element,i.element)>0&&(s=r,r=i,i=s),this.link(i,r),e[n]=void 0,n++;e[n]=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 S=class extends K{constructor(e){super(e)}};var Me=class extends S{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 S{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}},L=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}},C=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,i){if(e instanceof L)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 n=this.createEdge(e,t,r,i);return this._addEdgeOnly(n)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(e,t,r){let i=this.getEdge(e,t);return i?(i.weight=r,!0):!1}getAllPathsBetween(e,t){let r=[],i=this._getVertex(e),n=this._getVertex(t);if(!(i&&n))return[];let s=(o,l,h,d)=>{h.set(o,!0),o===l&&r.push([i,...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(i,n,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 i=this.getAllPathsBetween(e,t),n=1/0;for(let s of i)n=Math.min(this.getPathSumWeight(s),n);return n}else{let i=this._getVertex(t),n=this._getVertex(e);if(!(n&&i))return null;let s=new Map,o=new B([n]);s.set(n,!0);let l=0;for(;o.size>0;){for(let h=0;h<o.size;h++){let d=o.shift();if(d===i)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 i=this.getAllPathsBetween(e,t),n=1/0,s=-1,o=0;for(let l of i){let h=this.getPathSumWeight(l);h<n&&(n=h,s=o),o++}return i[s]||null}else{let i=[],n=this._getVertex(e),s=this._getVertex(t);if(!(n&&s))return[];let o=(l,h,d,_)=>{if(d.set(l,!0),l===h){i=[n,..._];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(n,s,new Map,[]),i}}dijkstraWithoutHeap(e,t,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1),t===void 0&&(t=null);let n=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&&(n=d.get(E)||1/0),i&&b(E),{distMap:d,preMap:g,seen:_,paths:l,minDist:n,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<n&&(n=u,i&&(s=f))}),i&&b(s),{distMap:d,preMap:g,seen:_,paths:l,minDist:n,minPath:o}}dijkstra(e,t,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1),t===void 0&&(t=null);let n=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 S((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&&(n=d.get(E)||1/0),i&&b(E),{distMap:d,preMap:g,seen:_,paths:l,minDist:n,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<n&&(n=u,i&&(s=f))}),i&&b(s),{distMap:d,preMap:g,seen:_,paths:l,minDist:n,minPath:o}}bellmanFord(e,t,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1);let n=this._getVertex(e),s=[],o=new Map,l=new Map,h=1/0,d=[],_;if(t&&(_=!1),!n)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(n,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),i&&l.set(c,y))}}let b=null;if(r&&o.forEach((u,f)=>{f!==n&&u<h&&(h=u,i&&(b=f))}),i)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=[],i=[];for(let n=0;n<t;n++){r[n]=[],i[n]=[];for(let s=0;s<t;s++)i[n][s]=null}for(let n=0;n<t;n++)for(let s=0;s<t;s++)r[n][s]=this.getEdge(e[n][1],e[s][1])?.weight||1/0;for(let n=0;n<t;n++)for(let s=0;s<t;s++)for(let o=0;o<t;o++)r[s][o]>r[s][n]+r[n][o]&&(r[s][o]=r[s][n]+r[n][o],i[s][o]=e[n][1]);return{costs:r,predecessor:i}}tarjan(e,t,r,i){e===void 0&&(e=!1),t===void 0&&(t=!1),r===void 0&&(r=!1),i===void 0&&(i=!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(i){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 L{constructor(e,t,r,i){super(r,i),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 C{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,i){return new A(e,t,r??1,i)}getEdge(e,t){let r=[];if(e!==null&&t!==null){let i=this._getVertex(e),n=this._getVertex(t);if(i&&n){let s=this._outEdgeMap.get(i);s&&(r=s.filter(o=>o.dest===n.key))}}return r[0]||null}removeEdgeSrcToDest(e,t){let r=this._getVertex(e),i=this._getVertex(t),n=null;if(!r||!i)return null;let s=this._outEdgeMap.get(r);s&&v(s,l=>l.dest===i.key);let o=this._inEdgeMap.get(i);return o&&(n=v(o,l=>l.src===r.key)[0]||null),n}removeEdge(e){let t=null,r=this._getVertex(e.src),i=this._getVertex(e.dest);if(r&&i){let n=this._outEdgeMap.get(r);n&&n.length>0&&v(n,o=>o.src===r.key);let s=this._inEdgeMap.get(i);s&&s.length>0&&(t=v(s,o=>o.dest===i.key)[0])}return t}removeEdgesBetween(e,t){let r=[];if(e&&t){let i=this.removeEdgeSrcToDest(e,t),n=this.removeEdgeSrcToDest(t,e);i&&r.push(i),n&&r.push(n)}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 i of r){let n=this.getEdgeDest(i);n&&t.push(n)}return t}topologicalSort(e){e=e??"key";let t=new Map;for(let s of this.vertices)t.set(s[1],0);let r=[],i=!1,n=s=>{t.set(s,1);let o=this.getDestinations(s);for(let l of o){let h=t.get(l);h===0?n(l):h===1&&(i=!0)}t.set(s,2),r.push(s)};for(let s of this.vertices)t.get(s[1])===0&&n(s[1]);return i?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 i=this.outgoingEdgesOf(r);for(let n of i){let s=this._getVertex(n.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 i=this._outEdgeMap.get(t);i?i.push(e):this._outEdgeMap.set(t,[e]);let n=this._inEdgeMap.get(r);return n?n.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 L{constructor(e,t,r,i){super(r,i),this._vertices=[e,t]}_vertices;get vertices(){return this._vertices}set vertices(e){this._vertices=e}},Se=class extends C{constructor(){super(),this._edges=new Map}_edges;get edges(){return this._edges}createVertex(e,t){return new $(e,t??e)}createEdge(e,t,r,i){return new ee(e,t,r??1,i)}getEdge(e,t){let r=[];if(e!==null&&t!==null){let i=this._getVertex(e),n=this._getVertex(t);i&&n&&(r=this._edges.get(i)?.filter(s=>s.vertices.includes(n.key)))}return r&&r[0]||null}removeEdgeBetween(e,t){let r=this._getVertex(e),i=this._getVertex(t);if(!r||!i)return null;let n=this._edges.get(r),s=null;n&&(s=v(n,l=>l.vertices.includes(i.key))[0]||null);let o=this._edges.get(i);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 i=this.edgesOf(r);for(let n of i){let s=this._getVertex(n.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 i=this._edges.get(r);i?i.push(e):this._edges.set(r,[e])}}return!0}_setEdges(e){this._edges=e}};var te=class extends F{constructor(e,t,r,i){super(e,i),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,i){super(e,t,r,i)}},Le=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],i=this.origin[1]){return new te(e,r,i,t)}createEdge(e,t,r,i){return new re(e,t,r,i)}};var G=(t=>(t.ITERATIVE="ITERATIVE",t.RECURSIVE="RECURSIVE",t))(G||{}),ie=(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))(ie||{});var Re=(t=>(t.RED="RED",t.BLACK="BLACK",t))(Re||{});var Ue=(r=>(r.VAL="VAL",r.NODE="NODE",r.ID="ID",r))(Ue||{});var ne=(r=>(r.lt="lt",r.eq="eq",r.gt="gt",r))(ne||{});var R=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 R(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}},i,n;if(e===null)n=null;else if(typeof e=="number")n=this.createNode(e,t);else if(e instanceof R)n=e;else return;let s=e?this.get(e,this._defaultCallbackByKey):void 0;return this.root?s?(s.val=t,i=s):i=r(this.root,n):(this._setRoot(n),n!==null?this._setSize(1):this._setSize(0),i=this.root),i}addMany(e,t){let r=[];for(let i=0;i<e.length;i++){let n=e[i];if(n instanceof R){r.push(this.add(n.key,n.val));continue}if(n===null){r.push(this.add(null));continue}let s=t?.[i];r.push(this.add(n,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 i=r?.parent?r.parent:null,n=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,n=l)}}else if(!i)r.right!==void 0&&this._setRoot(r.right);else{let{familyPosition:o}=r;o==="LEFT"||o==="ROOT_LEFT"?i.left=r.right:(o==="RIGHT"||o==="ROOT_RIGHT")&&(i.right=r.right),n=i}return this._setSize(this.size-1),t.push({deleted:s,needBalanced:n}),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=i=>{if(!i)return-1;let n=r(i.left),s=r(i.right);return Math.max(n,s)+1};return r(e)}else{if(!e)return-1;let r=[{node:e,depth:0}],i=0;for(;r.length>0;){let{node:n,depth:s}=r.pop();n.left&&r.push({node:n.left,depth:s+1}),n.right&&r.push({node:n.right,depth:s+1}),i=Math.max(i,s)}return i}}getMinHeight(e=this.root,t=this.iterationType){if(!e)return-1;if(t==="RECURSIVE"){let r=i=>{if(!i||!i.left&&!i.right)return 0;let n=r(i.left),s=r(i.right);return Math.min(n,s)+1};return r(e)}else{let r=[],i=e,n=null,s=new Map;for(;r.length>0||i;)if(i)r.push(i),i=i.left;else if(i=r[r.length-1],!i.right||n===i.right){if(i=r.pop(),i){let o=i.left?s.get(i.left)??-1:-1,l=i.right?s.get(i.right)??-1:-1;s.set(i,1+Math.min(o,l)),n=i,i=null}}else i=i.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,i=this.root,n=this.iterationType){if(!i)return[];let s=[];if(n==="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(i)}else{let o=new B([i]);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,i=this.iterationType){return this.getNodes(e,t,!0,r,i).length>0}get(e,t=this._defaultCallbackByKey,r=this.root,i=this.iterationType){return this.getNodes(e,t,!0,r,i)[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=i=>i.left?r(i.left):i;return r(e)}else{let r=J(i=>i.left?r.cont(i.left):i);return r(e)}}getRightMost(e=this.root,t=this.iterationType){if(!e)return e;if(t==="RECURSIVE"){let r=i=>i.right?r(i.right):i;return r(e)}else{let r=J(i=>i.right?r.cont(i.right):i);return r(e)}}isSubtreeBST(e,t=this.iterationType){if(!e)return!0;if(t==="RECURSIVE"){let r=(i,n,s)=>i?i.key<=n||i.key>=s?!1:r(i.left,n,i.key)&&r(i.right,i.key,s):!0;return r(e,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER)}else{let r=[],i=Number.MIN_SAFE_INTEGER,n=e;for(;n||r.length>0;){for(;n;)r.push(n),n=n.left;if(n=r.pop(),!n||i>=n.key)return!1;i=n.key,n=n.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 i=[];if(!t)return i;if(r==="RECURSIVE"){let n=s=>{i.push(e(s)),s.left&&n(s.left),s.right&&n(s.right)};n(t)}else{let n=[t];for(;n.length>0;){let s=n.pop();i.push(e(s)),s.right&&n.push(s.right),s.left&&n.push(s.left)}}return i}dfs(e=this._defaultCallbackByKey,t="in",r=this.root,i="ITERATIVE"){if(!r)return[];let n=[];if(i==="RECURSIVE"){let s=o=>{switch(t){case"in":o.left&&s(o.left),n.push(e(o)),o.right&&s(o.right);break;case"pre":n.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),n.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)n.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 n}bfs(e=this._defaultCallbackByKey,t=!1,r=this.root,i=this.iterationType){if(!r)return[];let n=[];if(i==="RECURSIVE"){let s=(o,l)=>{e&&n.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&&n.push(e(l,t?h:void 0)),l.right&&s.push([l.right,h+1]),l.left&&s.push([l.left,h+1])}}return n}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 i=[],n=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;)i.push(e(d)),d=d.right;s(h)};switch(t){case"in":for(;n;){if(n.left){let l=this.getPredecessor(n);if(l.right)l.right=null;else{l.right=n,n=n.left;continue}}i.push(e(n)),n=n.right}break;case"pre":for(;n;){if(n.left){let l=this.getPredecessor(n);if(l.right)l.right=null;else{l.right=n,i.push(e(n)),n=n.left;continue}}else i.push(e(n));n=n.right}break;case"post":for(;n;){if(n.left){let l=this.getPredecessor(n);if(l.right===null){l.right=n,n=n.left;continue}else l.right=null,o(n.left)}n=n.right}o(r);break}return i}_swap(e,t){let{key:r,val:i}=t,n=this.createNode(r,i);return n&&(t.key=e.key,t.val=e.val,e.key=n.key,e.val=n.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 R{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,i=null;if(e instanceof M?i=e:typeof e=="number"?i=this.createNode(e,t):e===null&&(i=null),this.root===null)this._setRoot(i),this._setSize(this.size+1),r=this.root;else{let n=this.root,s=!0;for(;s;)n!==null&&i!==null?this._compare(n.key,i.key)==="eq"?(i&&(n.val=i.val),s=!1,r=n):this._compare(n.key,i.key)==="gt"?n.left===void 0?(i&&(i.parent=n),n.left=i,this._setSize(this.size+1),s=!1,r=n.left):n.left&&(n=n.left):this._compare(n.key,i.key)==="lt"&&(n.right===void 0?(i&&(i.parent=n),n.right=i,this._setSize(this.size+1),s=!1,r=n.right):n.right&&(n=n.right)):s=!1}return r}addMany(e,t,r=!0,i=this.iterationType){function n(m){return m.indexOf(null)===-1}if(!r||!n(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 i==="RECURSIVE"?x(_,g):E(),s}get(e,t=this._defaultCallbackByKey,r=this.root,i=this.iterationType){return this.getNodes(e,t,!0,r,i)[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,i=this.root,n=this.iterationType){if(!i)return[];let s=[];if(n==="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(i)}else{let o=new B([i]);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,i=this.iterationType){typeof r=="number"&&(r=this.get(r));let n=[];if(!r)return n;let s=r.key;if(!this.root)return n;if(i==="RECURSIVE"){let o=l=>{this._compare(l.key,s)===t&&n.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),n}else{let o=new B([this.root]);for(;o.size>0;){let l=o.shift();l&&(this._compare(l.key,s)===t&&n.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 n}}perfectlyBalance(e=this.iterationType){let t=this.dfs(i=>i,"in"),r=t.length;if(this.clear(),t.length<1)return!1;if(e==="RECURSIVE"){let i=(n,s)=>{if(n>s)return;let o=n+Math.floor((s-n)/2),l=t[o];this.add(l.key,l.val),i(n,o-1),i(o+1,s)};return i(0,r-1),!0}else{let i=[[0,r-1]];for(;i.length>0;){let n=i.pop();if(n){let[s,o]=n;if(s<=o){let l=s+Math.floor((o-s)/2),h=t[l];this.add(h.key,h.val),i.push([l+1,o]),i.push([s,l-1])}}}return!0}}isAVLBalanced(e=this.iterationType){if(!this.root)return!0;let t=!0;if(e==="RECURSIVE"){let r=i=>{if(!i)return 0;let n=r(i.left),s=r(i.right);return Math.abs(n-s)>1&&(t=!1),Math.max(n,s)+1};r(this.root)}else{let r=[],i=this.root,n=null,s=new Map;for(;r.length>0||i;)if(i)r.push(i),i=i.left;else if(i=r[r.length-1],!i.right||n===i.right){if(i=r.pop(),i){let o=i.left?s.get(i.left)??-1:-1,l=i.right?s.get(i.right)??-1:-1;if(Math.abs(o-l)>1)return!1;s.set(i,1+Math.max(o,l)),n=i,i=null}}else i=i.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 Ce=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,i=this.msb<<1,n=e;for(;i>r+1;){let s=r+i>>1,o=this._getFrequency(s);s<=this.max&&t(o,n)?(n-=o,r=s):i=s}return r}};var z=class{constructor(e,t,r,i){this._start=e,this._end=t,this._sum=r,this._val=i||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),i=this.build(e,r),n=this.build(r+1,t),s=new z(e,t,i.sum+n.sum);return s.left=i,s.right=n,s}updateNode(e,t,r){let i=this.root||null;if(!i)return;let n=(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&&n(s.left,o,l,h):s.right&&n(s.right,o,l,h),s.left&&s.right&&(s.sum=s.left.sum+s.right.sum)};n(i,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 i=(n,s,o)=>{if(s<=n.start&&o>=n.end)return n.sum;let l=n.start+Math.floor((n.end-n.start)/2);if(o<=l)return n.left?i(n.left,s,o):NaN;if(s>l)return n.right?i(n.right,s,o):NaN;{let h=0,d=0;return n.left&&(h=i(n.left,s,l)),n.right&&(d=i(n.right,l+1,o)),h+d}};return i(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:i,height:n}=t,s=this.createNode(r,i);return s&&(s.height=n,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 i=t[r];switch(this._updateHeight(i),this._balanceFactor(i)){case-2:i&&i.left&&(this._balanceFactor(i.left)<=0?this._balanceLL(i):this._balanceLR(i));break;case 2:i&&i.right&&(this._balanceFactor(i.right)>=0?this._balanceRR(i):this._balanceRL(i))}}}_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,i=null;r&&(i=r.right),e&&(e.parent=i),r&&(r.parent=i),i&&(i.left&&(i.left.parent=r),i.right&&(i.right.parent=e),i.parent=t),e===this.root?i&&this._setRoot(i):t&&(t.left===e?t.left=i:t.right=i),i&&(e.left=i.right,r&&(r.right=i.left),i.left=r,i.right=e),this._updateHeight(e),r&&this._updateHeight(r),i&&this._updateHeight(i)}_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,i=null;r&&(i=r.left),e.parent=i,r&&(r.parent=i),i&&(i.left&&(i.left.parent=e),i.right&&(i.right.parent=r),i.parent=t),e===this.root?i&&this._setRoot(i):t&&(t.left===e?t.left=i:t.right=i),i&&(e.right=i.left),r&&i&&(r.left=i.right),i&&(i.left=e),i&&(i.right=r),this._updateHeight(e),r&&this._updateHeight(r),i&&this._updateHeight(i)}};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 i,n;if(e instanceof O?n=this.createNode(e.key,e.val,e.count):e===null?n=null:n=this.createNode(e,t,r),!this.root)this._setRoot(n),this._setSize(this.size+1),n&&this._setCount(this.count+n.count),i=this.root;else{let s=this.root,o=!0;for(;o;)s?n&&(this._compare(s.key,n.key)==="eq"?(s.val=n.val,s.count+=n.count,this._setCount(this.count+n.count),o=!1,i=s):this._compare(s.key,n.key)==="gt"?s.left===void 0?(s.left=n,this._setSize(this.size+1),this._setCount(this.count+n.count),o=!1,i=s.left):s.left&&(s=s.left):this._compare(s.key,n.key)==="lt"&&(s.right===void 0?(s.right=n,this._setSize(this.size+1),this._setCount(this.count+n.count),o=!1,i=s.right):s.right&&(s=s.right))):o=!1}return i&&this._balancePath(i),i}_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 i=0;i<e.length;i++){let n=e[i];if(n instanceof O){r.push(this.add(n.key,n.val,n.count));continue}if(n===null){r.push(this.add(NaN,null,0));continue}r.push(this.add(n,t?.[i],1))}return r}perfectlyBalance(e=this.iterationType){let t=this.dfs(i=>i,"in"),r=t.length;if(t.length<1)return!1;if(this.clear(),e==="RECURSIVE"){let i=(n,s)=>{if(n>s)return;let o=n+Math.floor((s-n)/2),l=t[o];this.add(l.key,l.val,l.count),i(n,o-1),i(o+1,s)};return i(0,r-1),!0}else{let i=[[0,r-1]];for(;i.length>0;){let n=i.pop();if(n){let[s,o]=n;if(s<=o){let l=s+Math.floor((o-s)/2),h=t[l];this.add(h.key,h.val,h.count),i.push([l+1,o]),i.push([s,l-1])}}}return!0}}delete(e,t=!1){let r=[];if(!this.root)return r;let i=this.get(e);if(!i)return r;let n=i?.parent?i.parent:null,s=null,o=i;if(i.count>1&&!t)i.count--,this._setCount(this.count-1);else{if(i.left){let l=i.left?this.getRightMost(i.left):null;if(l){let h=l.parent;o=this._swap(i,l),h&&(h.right===l?h.right=l.left:h.left=l.left,s=h)}}else if(!n)i.right!==void 0&&this._setRoot(i.right);else{let{familyPosition:l}=i;l==="LEFT"||l==="ROOT_LEFT"?n.left=i.right:(l==="RIGHT"||l==="ROOT_RIGHT")&&(n.right=i.right),s=n}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:i,count:n,height:s}=t,o=this.createNode(r,i,n);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,i)=>{i>e&&(e=i);let{children:n}=r;if(n)for(let s=0,o=n.length;s<o;s++)t(n[s],i+1)};t(this,0)}return e}};var ze=class{_matrix;constructor(e){let{row:t,col:r,initialVal:i}=e;this._matrix=new Array(t).fill(void 0).map(()=>new Array(r).fill(i||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 i=a.abs(a.subtract(e,t));return i.x<r&&i.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,i=t.x-e.x;return Math.sqrt(r*r+i*i)}static distanceSq(e,t){let r=t.y-e.y,i=t.x-e.x;return r*r+i*i}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),i=Math.floor(Math.random()*t-t/2);return new a(r,i)}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 i=0;i<3;i++)for(let n=0;n<3;n++)r[i][n]=e.m[i][n]+t.m[i][n];return new a(r)}static subtract(e,t){let r=a.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++)r[i][n]=e.m[i][n]-t.m[i][n];return new a(r)}static multiply(e,t){let r=a.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++){r[i][n]=0;for(let s=0;s<3;s++)r[i][n]+=e.m[i][s]*t.m[s][n]}return new a(r)}static multiplyByValue(e,t){let r=a.empty;for(let i=0;i<3;i++)for(let n=0;n<3;n++)r[i][n]=e.m[i][n]*t;return new a(r)}static multiplyByVector(e,t){return a.multiply(e,new a(t)).toVector()}static view(e,t){let i=e/2,n=t/2,s=Math.cos(Math.PI);return new a([[1,0,i],[0,s*1,n],[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:i,charDir:n,VISITED:s}}){this._matrix=e,this._cur=i,this._character=new le(n,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,i=this._matrix,[n,s]=this._cur;switch(e){case"up":if(r=i[n-1],!r)return!1;t=r[s];break;case"right":t=i[n][s+1];break;case"down":if(r=i[n+1],!r)return!1;t=r[s];break;case"left":t=i[n][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 i=t.children.get(r);i||(i=new Q(r),t.children.set(r,i)),t=i}return t.isEnd=!0,!0}has(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let i=t.children.get(r);if(!i)return!1;t=i}return t.isEnd}delete(e){e=this._caseProcess(e);let t=!1,r=(i,n)=>{let s=e[n],o=i.children.get(s);return o?n===e.length-1?o.isEnd?(o.children.size>0?o.isEnd=!1:i.children.delete(s),t=!0,!0):!1:r(o,n+1)&&!i.isEnd&&o.children.size===0?(i.children.delete(s),!0):!1:!1};return r(this.root,0),t}getHeight(){let e=this.root,t=0;if(e){let r=(i,n)=>{n>t&&(t=n);let{children:s}=i;if(s)for(let o of s.entries())r(o[1],n+1)};r(e,0)}return t}hasPurePrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let i=t.children.get(r);if(!i)return!1;t=i}return!t.isEnd}hasPrefix(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let i=t.children.get(r);if(!i)return!1;t=i}return!0}hasCommonPrefix(e){e=this._caseProcess(e);let t="",r=i=>{if(t+=i.key,t!==e&&!i.isEnd)if(i&&i.children&&i.children.size===1)r(Array.from(i.children.values())[0]);else return};return r(this.root),t===e}getLongestCommonPrefix(){let e="",t=r=>{if(e+=r.key,!r.isEnd)if(r&&r.children&&r.children.size===1)t(Array.from(r.children.values())[0]);else return};return t(this.root),e}getWords(e="",t=Number.MAX_SAFE_INTEGER){e=this._caseProcess(e);let r=[],i=0;function n(o,l){for(let h of o.children.keys()){let d=o.children.get(h);d!==void 0&&n(d,l.concat(h))}if(o.isEnd){if(i>t-1)return;r.push(l),i++}}let s=this.root;if(e)for(let o of e){let l=s.children.get(o);l&&(s=l)}return s!==this.root&&n(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 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){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);})();
2
2
  /**
3
3
  * data-structure-typed
4
4
  *