data-structure-typed 1.41.1 → 1.41.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
+ /**
3
+ * data-structure-typed
4
+ *
5
+ * @author Tyler Zeng
6
+ * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
7
+ * @license MIT License
8
+ */
2
9
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RedBlackTree = exports.SN = exports.RBTreeNode = void 0;
10
+ exports.RedBlackTree = exports.NIL = exports.RBTreeNode = void 0;
4
11
  const types_1 = require("../../types");
5
12
  class RBTreeNode {
6
13
  key;
@@ -17,10 +24,17 @@ class RBTreeNode {
17
24
  }
18
25
  }
19
26
  exports.RBTreeNode = RBTreeNode;
20
- exports.SN = new RBTreeNode(0);
27
+ exports.NIL = new RBTreeNode(0);
28
+ /**
29
+ * 1. Each node is either red or black.
30
+ * 2. The root node is always black.
31
+ * 3. Leaf nodes are typically NIL nodes and are considered black.
32
+ * 4. Red nodes must have black children.
33
+ * 5. Black balance: Every path from any node to each of its leaf nodes contains the same number of black nodes.
34
+ */
21
35
  class RedBlackTree {
22
36
  constructor() {
23
- this._root = exports.SN;
37
+ this._root = exports.NIL;
24
38
  }
25
39
  _root;
26
40
  get root() {
@@ -35,11 +49,11 @@ class RedBlackTree {
35
49
  */
36
50
  insert(key) {
37
51
  const node = new RBTreeNode(key, types_1.RBTNColor.RED);
38
- node.left = exports.SN;
39
- node.right = exports.SN;
52
+ node.left = exports.NIL;
53
+ node.right = exports.NIL;
40
54
  let y = null;
41
55
  let x = this.root;
42
- while (x !== exports.SN) {
56
+ while (x !== exports.NIL) {
43
57
  y = x;
44
58
  if (node.key < x.key) {
45
59
  x = x.left;
@@ -76,9 +90,9 @@ class RedBlackTree {
76
90
  */
77
91
  delete(key) {
78
92
  const helper = (node) => {
79
- let z = exports.SN;
93
+ let z = exports.NIL;
80
94
  let x, y;
81
- while (node !== exports.SN) {
95
+ while (node !== exports.NIL) {
82
96
  if (node.key === key) {
83
97
  z = node;
84
98
  }
@@ -89,16 +103,16 @@ class RedBlackTree {
89
103
  node = node.left;
90
104
  }
91
105
  }
92
- if (z === exports.SN) {
106
+ if (z === exports.NIL) {
93
107
  return;
94
108
  }
95
109
  y = z;
96
110
  let yOriginalColor = y.color;
97
- if (z.left === exports.SN) {
111
+ if (z.left === exports.NIL) {
98
112
  x = z.right;
99
113
  this._rbTransplant(z, z.right);
100
114
  }
101
- else if (z.right === exports.SN) {
115
+ else if (z.right === exports.NIL) {
102
116
  x = z.left;
103
117
  this._rbTransplant(z, z.left);
104
118
  }
@@ -126,7 +140,7 @@ class RedBlackTree {
126
140
  helper(this.root);
127
141
  }
128
142
  isRealNode(node) {
129
- return node !== exports.SN && node !== null;
143
+ return node !== exports.NIL && node !== null;
130
144
  }
131
145
  /**
132
146
  * The function `getNode` is a recursive depth-first search algorithm that searches for a node with a
@@ -161,7 +175,7 @@ class RedBlackTree {
161
175
  * @returns The leftmost node in the given RBTreeNode.
162
176
  */
163
177
  getLeftMost(node = this.root) {
164
- while (node.left !== null && node.left !== exports.SN) {
178
+ while (node.left !== null && node.left !== exports.NIL) {
165
179
  node = node.left;
166
180
  }
167
181
  return node;
@@ -172,7 +186,7 @@ class RedBlackTree {
172
186
  * @returns the rightmost node in a red-black tree.
173
187
  */
174
188
  getRightMost(node) {
175
- while (node.right !== null && node.right !== exports.SN) {
189
+ while (node.right !== null && node.right !== exports.NIL) {
176
190
  node = node.right;
177
191
  }
178
192
  return node;
@@ -183,11 +197,11 @@ class RedBlackTree {
183
197
  * @returns the successor of the given RBTreeNode.
184
198
  */
185
199
  getSuccessor(x) {
186
- if (x.right !== exports.SN) {
200
+ if (x.right !== exports.NIL) {
187
201
  return this.getLeftMost(x.right);
188
202
  }
189
203
  let y = x.parent;
190
- while (y !== exports.SN && y !== null && x === y.right) {
204
+ while (y !== exports.NIL && y !== null && x === y.right) {
191
205
  x = y;
192
206
  y = y.parent;
193
207
  }
@@ -200,16 +214,69 @@ class RedBlackTree {
200
214
  * @returns the predecessor of the given RBTreeNode 'x'.
201
215
  */
202
216
  getPredecessor(x) {
203
- if (x.left !== exports.SN) {
217
+ if (x.left !== exports.NIL) {
204
218
  return this.getRightMost(x.left);
205
219
  }
206
220
  let y = x.parent;
207
- while (y !== exports.SN && x === y.left) {
221
+ while (y !== exports.NIL && x === y.left) {
208
222
  x = y;
209
223
  y = y.parent;
210
224
  }
211
225
  return y;
212
226
  }
227
+ print(beginRoot = this.root) {
228
+ const display = (root) => {
229
+ const [lines, , ,] = _displayAux(root);
230
+ for (const line of lines) {
231
+ console.log(line);
232
+ }
233
+ };
234
+ const _displayAux = (node) => {
235
+ if (node === null) {
236
+ return [[], 0, 0, 0];
237
+ }
238
+ if (node.right === null && node.left === null) {
239
+ const line = `${node.key}`;
240
+ const width = line.length;
241
+ const height = 1;
242
+ const middle = Math.floor(width / 2);
243
+ return [[line], width, height, middle];
244
+ }
245
+ if (node.right === null) {
246
+ const [lines, n, p, x] = _displayAux(node.left);
247
+ const s = `${node.key}`;
248
+ const u = s.length;
249
+ const first_line = ' '.repeat(x + 1) + '_'.repeat(n - x - 1) + s;
250
+ const second_line = ' '.repeat(x) + '/' + ' '.repeat(n - x - 1 + u);
251
+ const shifted_lines = lines.map(line => line + ' '.repeat(u));
252
+ return [[first_line, second_line, ...shifted_lines], n + u, p + 2, n + Math.floor(u / 2)];
253
+ }
254
+ if (node.left === null) {
255
+ const [lines, n, p, u] = _displayAux(node.right);
256
+ const s = `${node.key}`;
257
+ const x = s.length;
258
+ const first_line = s + '_'.repeat(x) + ' '.repeat(n - x);
259
+ const second_line = ' '.repeat(u + x) + '\\' + ' '.repeat(n - x - 1);
260
+ const shifted_lines = lines.map(line => ' '.repeat(u) + line);
261
+ return [[first_line, second_line, ...shifted_lines], n + x, p + 2, Math.floor(u / 2)];
262
+ }
263
+ const [left, n, p, x] = _displayAux(node.left);
264
+ const [right, m, q, y] = _displayAux(node.right);
265
+ const s = `${node.key}`;
266
+ const u = s.length;
267
+ const first_line = ' '.repeat(x + 1) + '_'.repeat(n - x - 1) + s + '_'.repeat(y) + ' '.repeat(m - y);
268
+ const second_line = ' '.repeat(x) + '/' + ' '.repeat(n - x - 1 + u + y) + '\\' + ' '.repeat(m - y - 1);
269
+ if (p < q) {
270
+ left.push(...new Array(q - p).fill(' '.repeat(n)));
271
+ }
272
+ else if (q < p) {
273
+ right.push(...new Array(p - q).fill(' '.repeat(m)));
274
+ }
275
+ const zipped_lines = left.map((a, i) => a + ' '.repeat(u) + right[i]);
276
+ return [[first_line, second_line, ...zipped_lines], n + m + u, Math.max(p, q) + 2, n + Math.floor(u / 2)];
277
+ };
278
+ display(beginRoot);
279
+ }
213
280
  /**
214
281
  * The function performs a left rotation on a red-black tree node.
215
282
  * @param {RBTreeNode} x - The parameter `x` is a RBTreeNode object.
@@ -217,7 +284,7 @@ class RedBlackTree {
217
284
  _leftRotate(x) {
218
285
  const y = x.right;
219
286
  x.right = y.left;
220
- if (y.left !== exports.SN) {
287
+ if (y.left !== exports.NIL) {
221
288
  y.left.parent = x;
222
289
  }
223
290
  y.parent = x.parent;
@@ -241,7 +308,7 @@ class RedBlackTree {
241
308
  _rightRotate(x) {
242
309
  const y = x.left;
243
310
  x.left = y.right;
244
- if (y.right !== exports.SN) {
311
+ if (y.right !== exports.NIL) {
245
312
  y.right.parent = x;
246
313
  }
247
314
  y.parent = x.parent;
@@ -1,4 +1,4 @@
1
- "use strict";var dataStructureTyped=(()=>{var ae=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Xe=Object.prototype.hasOwnProperty;var Ye=(h,e)=>{for(var t in e)ae(h,t,{get:e[t],enumerable:!0})},Qe=(h,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of We(e))!Xe.call(h,n)&&n!==t&&ae(h,n,{get:()=>e[n],enumerable:!(r=Ge(e,n))||r.enumerable});return h};var Je=h=>Qe(ae({},"__esModule",{value:!0}),h);var $e={};Ye($e,{AVLTree:()=>J,AVLTreeNode:()=>I,AbstractEdge:()=>R,AbstractGraph:()=>S,AbstractVertex:()=>T,ArrayDeque:()=>_e,BST:()=>Q,BSTNode:()=>L,BinaryIndexedTree:()=>Se,BinaryTree:()=>Y,BinaryTreeNode:()=>w,CP:()=>le,Character:()=>he,CoordinateMap:()=>fe,CoordinateSet:()=>de,Deque:()=>Ne,DirectedEdge:()=>z,DirectedGraph:()=>W,DirectedVertex:()=>D,DoublyLinkedList:()=>j,DoublyLinkedListNode:()=>k,FamilyPosition:()=>oe,FibonacciHeap:()=>Oe,FibonacciHeapNode:()=>te,HashMap:()=>ge,HashTable:()=>ue,HashTableNode:()=>U,Heap:()=>K,IterationType:()=>X,LinkedListQueue:()=>be,MapEdge:()=>se,MapGraph:()=>Re,MapVertex:()=>ie,Matrix2D:()=>He,MatrixNTI2D:()=>Ae,MaxHeap:()=>Be,MaxPriorityQueue:()=>Ke,MinHeap:()=>Ce,MinPriorityQueue:()=>ke,Navigator:()=>Pe,ObjectDeque:()=>Ee,PriorityQueue:()=>M,Queue:()=>v,RBTNColor:()=>Le,RBTreeNode:()=>Z,RedBlackTree:()=>Ie,SN:()=>x,SegmentTree:()=>De,SegmentTreeNode:()=>A,SinglyLinkedList:()=>q,SinglyLinkedListNode:()=>C,SkipList:()=>me,SkipListNode:()=>G,Stack:()=>ye,THUNK_SYMBOL:()=>xe,TopologicalProperty:()=>je,TreeMap:()=>ce,TreeMultiset:()=>Fe,TreeMultisetNode:()=>H,TreeNode:()=>ze,TreeSet:()=>pe,Trie:()=>Ue,TrieNode:()=>$,UndirectedEdge:()=>ne,UndirectedGraph:()=>Me,UndirectedVertex:()=>re,Vector2D:()=>P,arrayRemove:()=>B,getMSB:()=>we,isThunk:()=>Te,toThunk:()=>ve,trampoline:()=>ee,trampolineAsync:()=>Ze,uuidV4:()=>Ve});var U=class{key;value;next;constructor(e,t){this.key=e,this.value=t,this.next=null}},ue=class h{static DEFAULT_CAPACITY=16;static LOAD_FACTOR=.75;constructor(e=h.DEFAULT_CAPACITY,t){this._hashFn=t||this._defaultHashFn,this._capacity=Math.max(e,h.DEFAULT_CAPACITY),this._size=0,this._buckets=new Array(this._capacity).fill(null)}_capacity;get capacity(){return this._capacity}_size;get size(){return this._size}_buckets;get buckets(){return this._buckets}_hashFn;get hashFn(){return this._hashFn}set(e,t){let r=this._hash(e),n=new U(e,t);if(!this._buckets[r])this._buckets[r]=n;else{let i=this._buckets[r];for(;i;){if(i.key===e){i.value=t;return}if(!i.next)break;i=i.next}i.next=n}this._size++,this._size/this._capacity>=h.LOAD_FACTOR&&this._expand()}get(e){let t=this._hash(e),r=this._buckets[t];for(;r;){if(r.key===e)return r.value;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 U(n.key,n.value);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 fe=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))}};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))}};var ce=class{};var pe=class{};var ge=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}_loadFactor;get loadFactor(){return this._loadFactor}_capacityMultiplier;get capacityMultiplier(){return this._capacityMultiplier}_size;get size(){return this._size}_table;get table(){return this._table}_hashFn;get hashFn(){return this._hashFn}set(e,t){this.size/this.table.length>=this.loadFactor&&this.resizeTable(this.table.length*this.capacityMultiplier);let n=this._hash(e);this.table[n]||(this.table[n]=[]);for(let i=0;i<this.table[n].length;i++)if(this.table[n][i][0]===e){this.table[n][i][1]=t;return}this.table[n].push([e,t]),this._size++}get(e){let t=this._hash(e);if(this.table[t]){for(let[r,n]of this.table[t])if(r===e)return n}}delete(e){let t=this._hash(e);if(this.table[t]){for(let r=0;r<this.table[t].length;r++)if(this.table[t][r][0]===e){this.table[t].splice(r,1),this._size--,this.size/this.table.length<this.loadFactor/this.capacityMultiplier&&this.resizeTable(this.table.length/this.capacityMultiplier);return}}}*entries(){for(let e of this.table)if(e)for(let[t,r]of e)yield[t,r]}[Symbol.iterator](){return this.entries()}clear(){this._size=0,this._table=new Array(this.initialCapacity)}isEmpty(){return this.size===0}_hash(e){return this._hashFn(e)}resizeTable(e){let t=new Array(e);for(let r of this._table)if(r)for(let[n,i]of r){let s=this._hash(n)%e;t[s]||(t[s]=[]),t[s].push([n,i])}this._table=t}};var C=class{value;next;constructor(e){this.value=e,this.next=null}},q=class h{constructor(){this._head=null,this._tail=null,this._length=0}_head;get head(){return this._head}_tail;get tail(){return this._tail}_length;get length(){return this._length}static fromArray(e){let t=new h;for(let r of e)t.push(r);return t}push(e){let t=new C(e);this.head?(this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._length++}addLast(e){this.push(e)}pop(){if(!this.head)return;if(this.head===this.tail){let r=this.head.value;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.value;return e.next=null,this._tail=e,this._length--,t}popLast(){return this.pop()}shift(){if(!this.head)return;let e=this.head;return this._head=this.head.next,this._length--,e.value}popFirst(){return this.shift()}unshift(e){let t=new C(e);this.head?(t.next=this.head,this._head=t):(this._head=t,this._tail=t),this._length++}addFirst(e){this.unshift(e)}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.value}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.value}delete(e){if(!e)return!1;let t;e instanceof C?t=e.value:t=e;let r=this.head,n=null;for(;r;){if(r.value===t)return n===null?(this._head=r.next,r===this.tail&&(this._tail=null)):(n.next=r.next,r===this.tail&&(this._tail=n)),this._length--,!0;n=r,r=r.next}return!1}insertAt(e,t){if(e<0||e>this.length)return!1;if(e===0)return this.unshift(t),!0;if(e===this.length)return this.push(t),!0;let r=new C(t),n=this.getNodeAt(e-1);return r.next=n.next,n.next=r,this._length++,!0}isEmpty(){return this.length===0}clear(){this._head=null,this._tail=null,this._length=0}toArray(){let e=[],t=this.head;for(;t;)e.push(t.value),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.value))return t.value;t=t.next}return null}indexOf(e){let t=0,r=this.head;for(;r;){if(r.value===e)return t;t++,r=r.next}return-1}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}return null}insertBefore(e,t){if(!this.head)return!1;let r;if(e instanceof C?r=e.value:r=e,this.head.value===r)return this.unshift(t),!0;let n=this.head;for(;n.next;){if(n.next.value===r){let i=new C(t);return i.next=n.next,n.next=i,this._length++,!0}n=n.next}return!1}insertAfter(e,t){let r;if(e instanceof C?r=e:r=this.getNode(e),r){let n=new C(t);return n.next=r.next,r.next=n,r===this.tail&&(this._tail=n),this._length++,!0}return!1}countOccurrences(e){let t=0,r=this.head;for(;r;)r.value===e&&t++,r=r.next;return t}forEach(e){let t=this.head,r=0;for(;t;)e(t.value,r),t=t.next,r++}map(e){let t=new h,r=this.head;for(;r;)t.push(e(r.value)),r=r.next;return t}filter(e){let t=new h,r=this.head;for(;r;)e(r.value)&&t.push(r.value),r=r.next;return t}reduce(e,t){let r=t,n=this.head;for(;n;)r=e(r,n.value),n=n.next;return r}*[Symbol.iterator](){let e=this.head;for(;e;)yield e.value,e=e.next}};var k=class{value;next;prev;constructor(e){this.value=e,this.next=null,this.prev=null}},j=class h{constructor(){this._head=null,this._tail=null,this._length=0}_head;get head(){return this._head}_tail;get tail(){return this._tail}_length;get length(){return this._length}get size(){return this.length}static fromArray(e){let t=new h;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.value}popLast(){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.value}popFirst(){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)}getFirst(){return this.head?.value}getLast(){return this.tail?.value}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.value}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}getNode(e){let t=this.head;for(;t;){if(t.value===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}insertBefore(e,t){let r;if(e instanceof k?r=e:r=this.getNode(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}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.value}delete(e){let t;if(e instanceof k?t=e:t=this.getNode(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.value),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.value))return t.value;t=t.next}return null}indexOf(e){let t=0,r=this.head;for(;r;){if(r.value===e)return t;t++,r=r.next}return-1}findBackward(e){let t=this.tail;for(;t;){if(e(t.value))return t.value;t=t.prev}return null}toArrayBackward(){let e=[],t=this.tail;for(;t;)e.push(t.value),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.value,r),t=t.next,r++}map(e){let t=new h,r=this.head;for(;r;)t.push(e(r.value)),r=r.next;return t}filter(e){let t=new h,r=this.head;for(;r;)e(r.value)&&t.push(r.value),r=r.next;return t}reduce(e,t){let r=t,n=this.head;for(;n;)r=e(r,n.value),n=n.next;return r}insertAfter(e,t){let r;if(e instanceof k?r=e:r=this.getNode(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}*[Symbol.iterator](){let e=this.head;for(;e;)yield e.value,e=e.next}};var G=class{key;value;forward;constructor(e,t,r){this.key=e,this.value=t,this.forward=new Array(r)}},me=class{constructor(e=16,t=.5){this._head=new G(null,null,e),this._level=0,this._maxLevel=e,this._probability=t}_head;get head(){return this._head}_level;get level(){return this._level}_maxLevel;get maxLevel(){return this._maxLevel}_probability;get probability(){return this._probability}add(e,t){let r=new G(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}has(e){return this.get(e)!==void 0}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}getFirst(){let e=this.head.forward[0];return e?e.value:void 0}getLast(){let e=this.head;for(let t=this.level-1;t>=0;t--)for(;e.forward[t];)e=e.forward[t];return e.value}higher(e){let t=this.head;for(let n=this.level-1;n>=0;n--)for(;t.forward[n]&&t.forward[n].key<=e;)t=t.forward[n];let r=t.forward[0];return r?r.value:void 0}lower(e){let t=this.head,r=null;for(let n=this.level-1;n>=0;n--){for(;t.forward[n]&&t.forward[n].key<e;)t=t.forward[n];t.key<e&&(r=t)}return r?r.value:void 0}_randomLevel(){let e=1;for(;Math.random()<this.probability&&e<this.maxLevel;)e++;return e}};var ye=class h{constructor(e){this._elements=Array.isArray(e)?e:[]}_elements;get elements(){return this._elements}static fromArray(e){return new h(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 h(this.elements.slice())}};var be=class extends q{enqueue(e){this.push(e)}dequeue(){return this.shift()}getFirst(){return this.head?.value}peek(){return this.getFirst()}},v=class h{constructor(e){this._nodes=e||[],this._offset=0}_nodes;get nodes(){return this._nodes}_offset;get offset(){return this._offset}get size(){return this.nodes.length-this.offset}static fromArray(e){return new h(e)}push(e){return this.nodes.push(e),this}shift(){if(this.size===0)return;let e=this.getFirst();return this._offset+=1,this.offset*2<this.nodes.length||(this._nodes=this.nodes.slice(this.offset),this._offset=0),e}getFirst(){return this.size>0?this.nodes[this.offset]:void 0}peek(){return this.getFirst()}getLast(){return this.size>0?this.nodes[this.nodes.length-1]:void 0}peekLast(){return this.getLast()}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 h(this.nodes.slice(this.offset))}*[Symbol.iterator](){for(let e of this.nodes)yield e}};var Ne=class extends j{},Ee=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}_first=-1;get first(){return this._first}_last=-1;get last(){return this._last}_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++}popFirst(){if(!this.size)return;let e=this.getFirst();return delete this.nodes[this.first],this._first++,this._size--,e}getFirst(){if(this.size)return this.nodes[this.first]}popLast(){if(!this.size)return;let e=this.getLast();return delete this.nodes[this.last],this._last--,this._size--,e}getLast(){if(this.size)return this.nodes[this.last]}get(e){return this.nodes[this.first+e]||null}isEmpty(){return this.size<=0}},_e=class{_nodes=[];get nodes(){return this._nodes}get size(){return this.nodes.length}addLast(e){return this.nodes.push(e)}popLast(){return this.nodes.pop()??null}popFirst(){return this.nodes.shift()??null}addFirst(e){return this.nodes.unshift(e)}getFirst(){return this.nodes[0]??null}getLast(){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 Ve=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(h){let e=Math.random()*16|0;return(h=="x"?e:e&3|8).toString(16)})},B=function(h,e){let t=-1,r=h?h.length:0,n=[];for(;++t<r;){let i=h[t];e(i,t,h)&&(n.push(i),Array.prototype.splice.call(h,t--,1),r--)}return n},xe=Symbol("thunk"),Te=h=>typeof h=="function"&&h.__THUNK__===xe,ve=h=>{let e=()=>h();return e.__THUNK__=xe,e},ee=h=>Object.assign((...t)=>{let r=h(...t);for(;Te(r)&&typeof r=="function";)r=r();return r},{cont:(...t)=>ve(()=>h(...t))}),Ze=h=>Object.assign(async(...t)=>{let r=await h(...t);for(;Te(r)&&typeof r=="function";)r=await r();return r},{cont:(...t)=>ve(()=>h(...t))}),we=h=>h<=0?0:1<<31-Math.clz32(h);var K=class h{constructor(e){this._comparator=e.comparator,e.nodes&&e.nodes.length>0&&(this._nodes=e.nodes,this.fix())}_nodes=[];get nodes(){return this._nodes}_comparator;get comparator(){return this._comparator}get size(){return this.nodes.length}get leaf(){return this.nodes[this.size-1]??void 0}static heapify(e){return new h(e)}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 h({comparator: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)}},te=class{element;degree;left;right;child;parent;marked;constructor(e,t=0){this.element=e,this.degree=t,this.marked=!1}},Oe=class{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.")}_root;get root(){return this._root}_size=0;get size(){return this._size}_min;get min(){return this._min}_comparator;get comparator(){return this._comparator}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 te(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 Be=class extends K{constructor(e={comparator:(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 Ce=class extends K{constructor(e={comparator:(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 M=class extends K{constructor(e){super(e)}};var ke=class extends M{constructor(e={comparator:(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 M{constructor(e={comparator:(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 T=class{key;value;constructor(e,t){this.key=e,this.value=t}},R=class{value;weight;constructor(e,t){this.weight=e!==void 0?e:1,this.value=t,this._hashCode=Ve()}_hashCode;get hashCode(){return this._hashCode}},S=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 T)return this._addVertexOnly(e);{let r=this.createVertex(e,t);return this._addVertexOnly(r)}}deleteVertex(e){let t=this._getVertexKey(e);return this._vertices.delete(t)}removeManyVertices(e){let t=[];for(let r of e)t.push(this.deleteVertex(r));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,r,n){if(e instanceof R)return this._addEdgeOnly(e);if(t instanceof T||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof T&&(e=e.key),t instanceof T&&(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,a,f)=>{a.set(o,!0),o===l&&r.push([n,...f]);let c=this.getNeighbors(o);for(let g of c)a.get(g)||(f.push(g),s(g,l,a,f),B(f,E=>E===g));a.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 v([i]);s.set(i,!0);let l=0;for(;o.size>0;){for(let a=0;a<o.size;a++){let f=o.shift();if(f===n)return l;if(f!==void 0){let c=this.getNeighbors(f);for(let g of c)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 a=this.getPathSumWeight(l);a<i&&(i=a,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,a,f,c)=>{if(f.set(l,!0),l===a){n=[i,...c];return}let g=this.getNeighbors(l);for(let E of g)f.get(E)||(c.push(E),o(E,a,f,c),B(c,V=>V===E));f.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=[],a=this._vertices,f=new Map,c=new Set,g=new Map,E=this._getVertex(e),V=t?this._getVertex(t):null;if(!E)return null;for(let u of a){let d=u[1];d instanceof T&&f.set(d,1/0)}f.set(E,0),g.set(E,null);let y=()=>{let u=1/0,d=null;for(let[m,b]of f)c.has(m)||b<u&&(u=b,d=m);return d},N=u=>{for(let d of a){let m=d[1];if(m instanceof T){let b=[m],p=g.get(m);for(;p;)b.push(p),p=g.get(p);let _=b.reverse();d[1]===u&&(o=_),l.push(_)}}};for(let u=1;u<a.size;u++){let d=y();if(d){if(c.add(d),V&&V===d)return r&&(i=f.get(V)||1/0),n&&N(V),{distMap:f,preMap:g,seen:c,paths:l,minDist:i,minPath:o};let m=this.getNeighbors(d);for(let b of m)if(!c.has(b)){let p=this.getEdge(d,b);if(p){let _=f.get(d),O=f.get(b);_!==void 0&&O!==void 0&&p.weight+_<O&&(f.set(b,p.weight+_),g.set(b,d))}}}}return r&&f.forEach((u,d)=>{d!==E&&u<i&&(i=u,n&&(s=d))}),n&&N(s),{distMap:f,preMap:g,seen:c,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=[],a=this._vertices,f=new Map,c=new Set,g=new Map,E=this._getVertex(e),V=t?this._getVertex(t):null;if(!E)return null;for(let u of a){let d=u[1];d instanceof T&&f.set(d,1/0)}let y=new M({comparator:(u,d)=>u.key-d.key});y.add({key:0,value:E}),f.set(E,0),g.set(E,null);let N=u=>{for(let d of a){let m=d[1];if(m instanceof T){let b=[m],p=g.get(m);for(;p;)b.push(p),p=g.get(p);let _=b.reverse();d[1]===u&&(o=_),l.push(_)}}};for(;y.size>0;){let u=y.poll(),d=u?.key,m=u?.value;if(d!==void 0&&m){if(c.add(m),V&&V===m)return r&&(i=f.get(V)||1/0),n&&N(V),{distMap:f,preMap:g,seen:c,paths:l,minDist:i,minPath:o};let b=this.getNeighbors(m);for(let p of b)if(!c.has(p)){let _=this.getEdge(m,p)?.weight;if(typeof _=="number"){let O=f.get(p);O&&d+_<O&&(y.add({key:d+_,value:p}),g.set(p,m),f.set(p,d+_))}}}}return r&&f.forEach((u,d)=>{d!==E&&u<i&&(i=u,n&&(s=d))}),n&&N(s),{distMap:f,preMap:g,seen:c,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,a=1/0,f=[],c;if(t&&(c=!1),!i)return{hasNegativeCycle:c,distMap:o,preMap:l,paths:s,min:a,minPath:f};let g=this._vertices,E=g.size,V=this.edgeSet(),y=V.length;this._vertices.forEach(u=>{o.set(u,1/0)}),o.set(i,0);for(let u=1;u<E;++u)for(let d=0;d<y;++d){let m=this.getEndsOfEdge(V[d]);if(m){let[b,p]=m,_=V[d].weight,O=o.get(b),F=o.get(p);O!==void 0&&F!==void 0&&o.get(b)!==1/0&&O+_<F&&(o.set(p,O+_),n&&l.set(p,b))}}let N=null;if(r&&o.forEach((u,d)=>{d!==i&&u<a&&(a=u,n&&(N=d))}),n)for(let u of g){let d=u[1];if(d instanceof T){let m=[d],b=l.get(d);for(;b!==void 0;)m.push(b),b=l.get(b);let p=m.reverse();u[1]===N&&(f=p),s.push(p)}}for(let u=0;u<y;++u){let d=this.getEndsOfEdge(V[u]);if(d){let[m]=d,b=V[u].weight,p=o.get(m);p&&p!==1/0&&p+b<p&&(c=!0)}}return{hasNegativeCycle:c,distMap:o,preMap:l,paths:s,min:a,minPath:f}}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[a]=l.values(),f=[],c=[],g=0,E=(u,d)=>{g++,s.set(u,g),o.set(u,g);let m=this.getNeighbors(u),b=0;for(let p of m)if(p!==d){s.get(p)===-1&&(b++,E(p,u));let _=o.get(p),O=o.get(u);O!==void 0&&_!==void 0&&o.set(u,Math.min(O,_));let F=s.get(u);if(_!==void 0&&F!==void 0&&(e&&(u===a&&b>=2||u!==a&&_>=F)&&f.push(u),t&&_>F)){let qe=this.getEdge(u,p);qe&&c.push(qe)}}};E(a,null);let V=new Map,y=()=>{let u=new Map;return o.forEach((d,m)=>{u.has(d)?u.get(d)?.push(m):u.set(d,[m])}),u};r&&(V=y());let N=new Map;if(n){let u=new Map;u.size<1&&(u=y()),u.forEach((d,m)=>{d.length>1&&N.set(m,d)})}return{dfnMap:s,lowMap:o,bridges:c,articulationPoints:f,SCCs:V,cycles:N}}_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 T?e.key:e}};var D=class extends T{constructor(e,t){super(e,t)}},z=class extends R{src;dest;constructor(e,t,r,n){super(r,n),this.src=e,this.dest=t}},W=class extends S{constructor(){super()}_outEdgeMap=new Map;get outEdgeMap(){return this._outEdgeMap}_inEdgeMap=new Map;get inEdgeMap(){return this._inEdgeMap}createVertex(e,t){return new D(e,t??e)}createEdge(e,t,r,n){return new z(e,t,r??1,n)}getEdge(e,t){let r=[];if(e!==null&&t!==null){let n=this._getVertex(e),i=this._getVertex(t);if(n&&i){let s=this._outEdgeMap.get(n);s&&(r=s.filter(o=>o.dest===i.key))}}return r[0]||null}deleteEdgeSrcToDest(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&&B(s,l=>l.dest===n.key);let o=this._inEdgeMap.get(n);return o&&(i=B(o,l=>l.src===r.key)[0]||null),i}deleteEdge(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&&B(i,o=>o.src===r.key);let s=this._inEdgeMap.get(n);s&&s.length>0&&(t=B(s,o=>o.dest===n.key)[0])}return t}deleteEdgesBetween(e,t){let r=[];if(e&&t){let n=this.deleteEdgeSrcToDest(e,t),i=this.deleteEdgeSrcToDest(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 a=t.get(l);a===0?i(l):a===1&&(n=!0)}t.set(s,2),r.push(s)};for(let s of this.vertices)t.get(s[1])===0&&i(s[1]);return n?null:(e==="key"&&(r=r.map(s=>s instanceof D?s.key:s)),r.reverse())}edgeSet(){let e=[];return this._outEdgeMap.forEach(t=>{e=[...e,...t]}),e}getNeighbors(e){let t=[],r=this._getVertex(e);if(r){let n=this.outgoingEdgesOf(r);for(let i of n){let s=this._getVertex(i.dest);s&&t.push(s)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.src,e.dest))return null;let t=this._getVertex(e.src),r=this._getVertex(e.dest);return t&&r?[t,r]:null}_addEdgeOnly(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let t=this._getVertex(e.src),r=this._getVertex(e.dest);if(t&&r){let n=this._outEdgeMap.get(t);n?n.push(e):this._outEdgeMap.set(t,[e]);let i=this._inEdgeMap.get(r);return i?i.push(e):this._inEdgeMap.set(r,[e]),!0}else return!1}};var re=class extends T{constructor(e,t){super(e,t)}},ne=class extends R{vertices;constructor(e,t,r,n){super(r,n),this.vertices=[e,t]}},Me=class extends S{constructor(){super(),this._edges=new Map}_edges;get edges(){return this._edges}createVertex(e,t){return new re(e,t??e)}createEdge(e,t,r,n){return new ne(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}deleteEdgeBetween(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=B(i,l=>l.vertices.includes(n.key))[0]||null);let o=this._edges.get(n);return o&&B(o,l=>l.vertices.includes(r.key)),s}deleteEdge(e){return this.deleteEdgeBetween(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}};var ie=class extends D{lat;long;constructor(e,t,r,n){super(e,t),this.lat=r,this.long=n}},se=class extends z{constructor(e,t,r,n){super(e,t,r,n)}},Re=class extends W{constructor(e,t){super(),this._origin=e,this._bottomRight=t}_origin=[0,0];get origin(){return this._origin}_bottomRight;get bottomRight(){return this._bottomRight}createVertex(e,t,r=this.origin[0],n=this.origin[1]){return new ie(e,t,r,n)}createEdge(e,t,r,n){return new se(e,t,r,n)}};var X=(t=>(t.ITERATIVE="ITERATIVE",t.RECURSIVE="RECURSIVE",t))(X||{}),oe=(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))(oe||{});var Le=(t=>(t[t.RED=1]="RED",t[t.BLACK=0]="BLACK",t))(Le||{});var je=(r=>(r.VAL="VAL",r.NODE="NODE",r.ID="ID",r))(je||{});var le=(r=>(r.lt="lt",r.eq="eq",r.gt="gt",r))(le||{});var w=class{key;value;parent;constructor(e,t){this.key=e,this.value=t}_left;get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}_right;get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}get familyPosition(){let e=this;return this.parent?this.parent.left===e?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===e?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},Y=class{iterationType="ITERATIVE";constructor(e){if(e!==void 0){let{iterationType:t="ITERATIVE"}=e;this.iterationType=t}}_root=null;get root(){return this._root}_size=0;get size(){return this._size}createNode(e,t){return new w(e,t)}clear(){this._setRoot(null),this._size=0}isEmpty(){return this.size===0}add(e,t){let r=(l,a)=>{let f=new v([l]);for(;f.size>0;){let c=f.shift();if(c){if(a&&c.key===a.key)return;let g=this._addTo(a,c);if(g!==void 0)return g;c.left&&f.push(c.left),c.right&&f.push(c.right)}else return}},n,i;if(e===null)i=null;else if(typeof e=="number")i=this.createNode(e,t);else if(e instanceof w)i=e;else return;let s=typeof e=="number"?e:e?e.key:void 0,o=s!==void 0?this.getNode(s,l=>l.key):void 0;return this.root?o?(o.value=t,n=o):n=r(this.root,i):(this._setRoot(i),i!==null?this._size=1:this._size=0,n=this.root),n}addMany(e,t){return e.map((r,n)=>{if(r instanceof w)return this.add(r.key,r.value);if(r===null)return this.add(null);let i=t?.[n];return this.add(r,i)})}refill(e,t){return this.clear(),e.length===this.addMany(e,t).length}delete(e,t=r=>r.key){let r=[];if(!this.root)return r;e instanceof w&&(t=l=>l);let n=this.getNode(e,t);if(!n)return r;let i=n?.parent?n.parent:null,s=null,o=n;if(n.left){let l=n.left?this.getRightMost(n.left):null;if(l){let a=l.parent;o=this._swap(n,l),a&&(a.right===l?a.right=l.left:a.left=l.left,s=a)}}else if(!i)this._setRoot(null);else{let{familyPosition:l}=n;l==="LEFT"||l==="ROOT_LEFT"?i.left=n.right:(l==="RIGHT"||l==="ROOT_RIGHT")&&(i.right=n.right),s=i}return this._size=this.size-1,r.push({deleted:o,needBalanced:s}),r}getDepth(e,t=this.root){typeof e=="number"&&(e=this.getNode(e)),typeof t=="number"&&(t=this.getNode(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.getNode(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=s=>s.key,r=!1,n=this.root,i=this.iterationType){if(!n)return[];e instanceof w&&(t=o=>o);let s=[];if(i==="RECURSIVE"){let o=l=>{t(l)===e&&(s.push(l),r)||!l.left&&!l.right||(l.left&&o(l.left),l.right&&o(l.right))};o(n)}else{let o=new v([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=i=>i.key,r=this.root,n=this.iterationType){return e instanceof w&&(t=i=>i),this.getNodes(e,t,!0,r,n).length>0}getNode(e,t=i=>i.key,r=this.root,n=this.iterationType){return e instanceof w&&(t=i=>i),this.getNodes(e,t,!0,r,n)[0]??null}get(e,t=i=>i.key,r=this.root,n=this.iterationType){return e instanceof w&&(t=i=>i),this.getNodes(e,t,!0,r,n)[0].value??void 0}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.getNode(e)),!e)return e;if(t==="RECURSIVE"){let r=n=>n.left?r(n.left):n;return r(e)}else{let r=ee(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=ee(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=n=>n.key,t=this.root,r=this.iterationType){typeof t=="number"&&(t=this.getNode(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=i=>i.key,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=n=>n.key,t=this.root,r=this.iterationType){if(!t)return[];let n=[];if(r==="RECURSIVE"){let i=new v([t]),s=o=>{if(i.size===0)return;let l=i.shift();n.push(e(l)),l.left&&i.push(l.left),l.right&&i.push(l.right),s(o+1)};s(0)}else{let i=new v([t]);for(;i.size>0;){let s=i.size;for(let o=0;o<s;o++){let l=i.shift();n.push(e(l)),l.left&&i.push(l.left),l.right&&i.push(l.right)}}}return n}listLevels(e=n=>n.key,t=this.root,r=this.iterationType){if(!t)return[];let n=[];if(r==="RECURSIVE"){let i=(s,o)=>{n[o]||(n[o]=[]),n[o].push(e(s)),s.left&&i(s.left,o+1),s.right&&i(s.right,o+1)};i(t,0)}else{let i=[[t,0]];for(;i.length>0;){let s=i.pop(),[o,l]=s;n[l]||(n[l]=[]),n[l].push(e(o)),o.right&&i.push([o.right,l+1]),o.left&&i.push([o.left,l+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}getSuccessor(e){if(e.right)return this.getLeftMost(e.right);let t=e.parent;for(;t&&t&&e===t.right;)e=t,t=t.parent;return t}morris(e=n=>n.key,t="in",r=this.root){if(r===null)return[];let n=[],i=r,s=l=>{let a=null,f=null;for(;l;)f=l.right,l.right=a,a=l,l=f;return a},o=l=>{let a=s(l),f=a;for(;f;)n.push(e(f)),f=f.right;s(a)};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}*[Symbol.iterator](e=this.root){if(e)if(this.iterationType==="ITERATIVE"){let t=[],r=e;for(;r||t.length>0;){for(;r;)t.push(r),r=r.left;r=t.pop(),r&&(yield r.key),r&&(r=r.right)}}else e.left&&(yield*this[Symbol.iterator](e.left)),yield e.key,e.right&&(yield*this[Symbol.iterator](e.right))}_swap(e,t){let{key:r,value:n}=t,i=this.createNode(r,n);return i&&(t.key=e.key,t.value=e.value,e.key=i.key,e.value=i.value),t}_addTo(e,t){if(t)return t.left===void 0?(t.left=e,e&&(this._size=this.size+1),t.left):t.right===void 0?(t.right=e,e&&(this._size=this.size+1),t.right):void 0}_setRoot(e){e&&(e.parent=void 0),this._root=e}};var L=class extends w{constructor(e,t){super(e,t)}},Q=class extends Y{constructor(e){if(super(e),e!==void 0){let{comparator:t}=e;t!==void 0&&(this._comparator=t)}}createNode(e,t){return new L(e,t)}add(e,t){let r=null,n=null;if(e instanceof L?n=e:typeof e=="number"?n=this.createNode(e,t):e===null&&(n=null),this.root===null)this._setRoot(n),this._size=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.value=n.value),s=!1,r=i):this._compare(i.key,n.key)==="gt"?i.left===void 0?(n&&(n.parent=i),i.left=n,this._size=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._size=this.size+1,s=!1,r=i.right):i.right&&(i=i.right)):s=!1}return r}addMany(e,t,r=!0,n=this.iterationType){function i(y){return y.indexOf(null)===-1}if(!r||!i(e))return super.addMany(e,t);let s=[],o=e.map((y,N)=>[y,t?.[N]]),l=[];function a(y){for(let[N]of y)if(N instanceof L)return!0;return!1}function f(y){for(let[N]of y)if(typeof N=="number")return!0;return!1}let c=[],g=[];if(a(o))l=o.sort((y,N)=>y[0].key-N[0].key);else if(f(o))l=o.sort((y,N)=>y[0]-N[0]);else throw new Error("Invalid input keysOrNodes");c=l.map(([y])=>y),g=l.map(([,y])=>y);let E=(y,N)=>{if(y.length===0)return;let u=Math.floor((y.length-1)/2),d=this.add(y[u],N?.[u]);s.push(d),E(y.slice(0,u),N?.slice(0,u)),E(y.slice(u+1),N?.slice(u+1))},V=()=>{let N=[[0,l.length-1]];for(;N.length>0;){let u=N.pop();if(u){let[d,m]=u;if(d<=m){let b=d+Math.floor((m-d)/2),p=this.add(c[b],g?.[b]);s.push(p),N.push([b+1,m]),N.push([d,b-1])}}}};return n==="RECURSIVE"?E(c,g):V(),s}getNode(e,t=i=>i.key,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=s=>s.key,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===(f=>f.key)?(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 v([n]);for(;o.size>0;){let l=o.shift();if(l){if(t(l)===e&&(s.push(l),r))return s;t===(f=>f.key)?(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=i=>i.key,t="lt",r=this.root,n=this.iterationType){typeof r=="number"&&(r=this.getNode(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 v([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.value),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),a=t[l];this.add(a.key,a.value),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 Se=class{_freq;_max;constructor({frequency:e=0,max:t}){this._freq=e,this._max=t,this._freqMap={0:0},this._msb=we(t),this._negativeCount=e<0?t:0}_freqMap;get freqMap(){return this._freqMap}_msb;get msb(){return this._msb}_negativeCount;get negativeCount(){return this._negativeCount}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)}getPrefixSum(e){this._checkIndex(e),e++;let t=0;for(;e>0;)t+=this._getFrequency(e),e-=e&-e;return t}_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 A=class{start=0;end=0;value=null;sum=0;left=null;right=null;constructor(e,t,r,n){this.start=e,this.end=t,this.sum=r,this.value=n||null}},De=class{constructor(e,t,r){t=t||0,r=r||e.length-1,this._values=e,this._start=t,this._end=r,e.length>0?this._root=this.build(t,r):(this._root=null,this._values=[])}_values=[];get values(){return this._values}_start=0;get start(){return this._start}_end;get end(){return this._end}_root;get root(){return this._root}build(e,t){if(e>t)return new A(e,t,0);if(e===t)return new A(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 A(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,a)=>{if(s.start===s.end&&s.start===o){s.sum=l,a!==void 0&&(s.value=a);return}let f=s.start+Math.floor((s.end-s.start)/2);o<=f?s.left&&i(s.left,o,l,a):s.right&&i(s.right,o,l,a),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 a=0,f=0;return i.left&&(a=n(i.left,s,l)),i.right&&(f=n(i.right,l+1,o)),a+f}};return n(r,e,t)}};var I=class extends L{height;constructor(e,t){super(e,t),this.height=0}},J=class extends Q{constructor(e){super(e)}createNode(e,t){return new I(e,t)}add(e,t){let r=super.add(e,t);return r&&this._balancePath(r),r}delete(e,t=r=>r.key){e instanceof I&&(t=n=>n);let r=super.delete(e,t);for(let{needBalanced:n}of r)n&&this._balancePath(n);return r}_swap(e,t){let{key:r,value:n,height:i}=t,s=this.createNode(r,n);return s&&(s.height=i,t.key=e.key,t.value=e.value,t.height=e.height,e.key=s.key,e.value=s.value,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 Z=class{key;parent;left;right;color=0;constructor(e,t=0){this.key=e,this.color=t,this.parent=null,this.left=null,this.right=null}},x=new Z(0),Ie=class{constructor(){this._root=x}_root;get root(){return this._root}insert(e){let t=new Z(e,1);t.left=x,t.right=x;let r=null,n=this.root;for(;n!==x;)r=n,t.key<n.key?n=n.left:n=n.right;if(t.parent=r,r===null?this._root=t:t.key<r.key?r.left=t:r.right=t,t.parent===null){t.color=0;return}t.parent.parent!==null&&this._fixInsert(t)}delete(e){(r=>{let n=x,i,s;for(;r!==x;)r.key===e&&(n=r),r.key<=e?r=r.right:r=r.left;if(n===x)return;s=n;let o=s.color;n.left===x?(i=n.right,this._rbTransplant(n,n.right)):n.right===x?(i=n.left,this._rbTransplant(n,n.left)):(s=this.getLeftMost(n.right),o=s.color,i=s.right,s.parent===n?i.parent=s:(this._rbTransplant(s,s.right),s.right=n.right,s.right.parent=s),this._rbTransplant(n,s),s.left=n.left,s.left.parent=s,s.color=n.color),o===0&&this._fixDelete(i)})(this.root)}isRealNode(e){return e!==x&&e!==null}getNode(e,t=this.root){let r=n=>this.isRealNode(n)?e===n.key?n:e<n.key?r(n.left):r(n.right):null;return r(t)}getLeftMost(e=this.root){for(;e.left!==null&&e.left!==x;)e=e.left;return e}getRightMost(e){for(;e.right!==null&&e.right!==x;)e=e.right;return e}getSuccessor(e){if(e.right!==x)return this.getLeftMost(e.right);let t=e.parent;for(;t!==x&&t!==null&&e===t.right;)e=t,t=t.parent;return t}getPredecessor(e){if(e.left!==x)return this.getRightMost(e.left);let t=e.parent;for(;t!==x&&e===t.left;)e=t,t=t.parent;return t}_leftRotate(e){let t=e.right;e.right=t.left,t.left!==x&&(t.left.parent=e),t.parent=e.parent,e.parent===null?this._root=t:e===e.parent.left?e.parent.left=t:e.parent.right=t,t.left=e,e.parent=t}_rightRotate(e){let t=e.left;e.left=t.right,t.right!==x&&(t.right.parent=e),t.parent=e.parent,e.parent===null?this._root=t:e===e.parent.right?e.parent.right=t:e.parent.left=t,t.right=e,e.parent=t}_fixDelete(e){let t;for(;e!==this.root&&e.color===0;)e===e.parent.left?(t=e.parent.right,t.color===1&&(t.color=0,e.parent.color=1,this._leftRotate(e.parent),t=e.parent.right),t.left!==null&&t.left.color===0&&t.right.color===0?(t.color=1,e=e.parent):(t.right.color===0&&(t.left.color=0,t.color=1,this._rightRotate(t),t=e.parent.right),t.color=e.parent.color,e.parent.color=0,t.right.color=0,this._leftRotate(e.parent),e=this.root)):(t=e.parent.left,t.color===1&&(t.color=0,e.parent.color=1,this._rightRotate(e.parent),t=e.parent.left),t.right.color===0&&t.right.color===0?(t.color=1,e=e.parent):(t.left.color===0&&(t.right.color=0,t.color=1,this._leftRotate(t),t=e.parent.left),t.color=e.parent.color,e.parent.color=0,t.left.color=0,this._rightRotate(e.parent),e=this.root));e.color=0}_rbTransplant(e,t){e.parent===null?this._root=t:e===e.parent.left?e.parent.left=t:e.parent.right=t,t.parent=e.parent}_fixInsert(e){let t;for(;e.parent.color===1&&(e.parent===e.parent.parent.right?(t=e.parent.parent.left,t.color===1?(t.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.left&&(e=e.parent,this._rightRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._leftRotate(e.parent.parent))):(t=e.parent.parent.right,t.color===1?(t.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.right&&(e=e.parent,this._leftRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._rightRotate(e.parent.parent))),e!==this.root););this.root.color=0}};var H=class extends I{count;constructor(e,t,r=1){super(e,t),this.count=r}},Fe=class extends J{constructor(e){super(e)}_count=0;get count(){return this._count}createNode(e,t,r){return new H(e,t,r)}add(e,t,r=1){let n,i;if(e instanceof H?i=this.createNode(e.key,e.value,e.count):e===null?i=null:i=this.createNode(e,t,r),!this.root)this._setRoot(i),this._size=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.value=i.value,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._size=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._size=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._size=this.size+1,this._setCount(this.count+e.count)),t.left):t.right===void 0?(t.right=e,e!==null&&(this._size=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 H){r.push(this.add(i.key,i.value,i.count));continue}if(i===null){r.push(this.add(NaN,void 0,0));continue}r.push(this.add(i,t?.[n],1))}return r}perfectlyBalance(e=this.iterationType){let t=this.dfs(n=>n,"in"),r=t.length;if(t.length<1)return!1;if(this.clear(),e==="RECURSIVE"){let n=(i,s)=>{if(i>s)return;let o=i+Math.floor((s-i)/2),l=t[o];this.add(l.key,l.value,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),a=t[l];this.add(a.key,a.value,a.count),n.push([l+1,o]),n.push([s,l-1])}}}return!0}}delete(e,t=n=>n.key,r=!1){let n=[];if(!this.root)return n;let i=this.getNode(e,t);if(!i)return n;let s=i?.parent?i.parent:null,o=null,l=i;if(i.count>1&&!r)i.count--,this._setCount(this.count-1);else{if(i.left){let a=i.left?this.getRightMost(i.left):null;if(a){let f=a.parent;l=this._swap(i,a),f&&(f.right===a?f.right=a.left:f.left=a.left,o=f)}}else if(!s)i.right!==void 0&&this._setRoot(i.right);else{let{familyPosition:a}=i;a==="LEFT"||a==="ROOT_LEFT"?s.left=i.right:(a==="RIGHT"||a==="ROOT_RIGHT")&&(s.right=i.right),o=s}this._size=this.size-1,this._setCount(this.count-l.count)}return n.push({deleted:l,needBalanced:o}),o&&this._balancePath(o),n}clear(){super.clear(),this._setCount(0)}_swap(e,t){let{key:r,value:n,count:i,height:s}=t,o=this.createNode(r,n,i);return o&&(o.height=s,t.key=e.key,t.value=e.value,t.count=e.count,t.height=e.height,e.key=o.key,e.value=o.value,e.count=o.count,e.height=o.height),t}_setCount(e){this._count=e}};var ze=class h{key;value;children;constructor(e,t,r){this.key=e,this.value=t||void 0,this.children=r||[]}addChildren(e){this.children||(this.children=[]),e instanceof h?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 Ae=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 P=class h{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 h(Math.round(this.x),Math.round(this.y))}static add(e,t){return new h(e.x+t.x,e.y+t.y)}static subtract(e,t){return new h(e.x-t.x,e.y-t.y)}static subtractValue(e,t){return new h(e.x-t,e.y-t)}static multiply(e,t){return new h(e.x*t,e.y*t)}static divide(e,t){return new h(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=h.abs(h.subtract(e,t));return n.x<r&&n.y<r}static normalize(e){let t=e.length;return t>2220446049250313e-31?h.divide(e,t):e}static truncate(e,t){return e.length>t?h.multiply(h.normalize(e),t):e}static perp(e){return new h(-e.y,e.x)}static reverse(e){return new h(-e.x,-e.y)}static abs(e){return new h(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 h(0,-1),r=Math.acos(h.dot(e,t)/(e.length*t.length));return h.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 h(r,n)}zero(){this.x=0,this.y=0}};var He=class h{_matrix;constructor(e){typeof e>"u"?this._matrix=h.identity:e instanceof P?(this._matrix=h.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=h.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 h(r)}static subtract(e,t){let r=h.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 h(r)}static multiply(e,t){let r=h.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 h(r)}static multiplyByValue(e,t){let r=h.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 h(r)}static multiplyByVector(e,t){return h.multiply(e,new h(t)).toVector()}static view(e,t){let n=e/2,i=t/2,s=Math.cos(Math.PI);return new h([[1,0,n],[0,s*1,i],[0,0,1]])}static scale(e){return h.multiplyByValue(new h,e)}static rotate(e){let t=Math.cos(e),r=Math.sin(e);return new h([[t,-r,0],[r,t,0],[0,0,1]])}static translate(e){return new h([[1,0,e.x],[0,1,e.y],[0,0,e.w]])}toVector(){return new P(this._matrix[0][0],this._matrix[1][0])}};var he=class h{direction;turn;constructor(e,t){this.direction=e,this.turn=()=>new h(t[e],t)}},Pe=class{onMove;_matrix;_cur;_character;_VISITED;constructor({matrix:e,turning:t,onMove:r,init:{cur:n,charDir:i,VISITED:s}}){this._matrix=e,this._cur=n,this._character=new he(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 $=class{key;children;isEnd;constructor(e){this.key=e,this.isEnd=!1,this.children=new Map}},Ue=class{constructor(e,t=!0){if(this._root=new $(""),this._caseSensitive=t,e)for(let r of e)this.add(r)}_caseSensitive;get caseSensitive(){return this._caseSensitive}_root;get root(){return this._root}add(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);n||(n=new $(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,r=!1){e=this._caseProcess(e);let n=[],i=0;function s(l,a){for(let f of l.children.keys()){let c=l.children.get(f);c!==void 0&&s(c,a.concat(f))}if(l.isEnd){if(i>t-1)return;n.push(a),i++}}let o=this.root;if(e)for(let l of e){let a=o.children.get(l);a&&(o=a)}return(r||o!==this.root)&&s(o,e),n}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};return Je($e);})();
1
+ "use strict";var dataStructureTyped=(()=>{var de=Object.defineProperty;var Xe=Object.getOwnPropertyDescriptor;var Ye=Object.getOwnPropertyNames;var Qe=Object.prototype.hasOwnProperty;var $e=(h,e)=>{for(var t in e)de(h,t,{get:e[t],enumerable:!0})},Je=(h,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ye(e))!Qe.call(h,n)&&n!==t&&de(h,n,{get:()=>e[n],enumerable:!(r=Xe(e,n))||r.enumerable});return h};var Ze=h=>Je(de({},"__esModule",{value:!0}),h);var tt={};$e(tt,{AVLTree:()=>J,AVLTreeNode:()=>F,AbstractEdge:()=>L,AbstractGraph:()=>D,AbstractVertex:()=>v,ArrayDeque:()=>Te,BST:()=>$,BSTNode:()=>S,BinaryIndexedTree:()=>Fe,BinaryTree:()=>Q,BinaryTreeNode:()=>O,CP:()=>he,Character:()=>ae,CoordinateMap:()=>pe,CoordinateSet:()=>ge,Deque:()=>xe,DirectedEdge:()=>z,DirectedGraph:()=>X,DirectedVertex:()=>I,DoublyLinkedList:()=>G,DoublyLinkedListNode:()=>k,FamilyPosition:()=>le,FibonacciHeap:()=>ke,FibonacciHeapNode:()=>re,HashMap:()=>be,HashTable:()=>ce,HashTableNode:()=>q,Heap:()=>M,IterationType:()=>Y,LinkedListQueue:()=>Ee,MapEdge:()=>oe,MapGraph:()=>De,MapVertex:()=>se,Matrix2D:()=>qe,MatrixNTI2D:()=>Ue,MaxHeap:()=>Ke,MaxPriorityQueue:()=>Le,MinHeap:()=>Me,MinPriorityQueue:()=>Re,NIL:()=>T,Navigator:()=>je,ObjectDeque:()=>Ve,PriorityQueue:()=>R,Queue:()=>w,RBTNColor:()=>Ie,RBTreeNode:()=>Z,RedBlackTree:()=>ze,SegmentTree:()=>Ae,SegmentTreeNode:()=>H,SinglyLinkedList:()=>j,SinglyLinkedListNode:()=>C,SkipList:()=>Ne,SkipListNode:()=>W,Stack:()=>_e,THUNK_SYMBOL:()=>we,TopologicalProperty:()=>We,TreeMap:()=>me,TreeMultiset:()=>He,TreeMultisetNode:()=>P,TreeNode:()=>Pe,TreeSet:()=>ye,Trie:()=>Ge,TrieNode:()=>ee,UndirectedEdge:()=>ie,UndirectedGraph:()=>Se,UndirectedVertex:()=>ne,Vector2D:()=>U,arrayRemove:()=>B,getMSB:()=>Ce,isThunk:()=>Oe,toThunk:()=>Be,trampoline:()=>te,trampolineAsync:()=>et,uuidV4:()=>ve});var q=class{key;value;next;constructor(e,t){this.key=e,this.value=t,this.next=null}},ce=class h{static DEFAULT_CAPACITY=16;static LOAD_FACTOR=.75;constructor(e=h.DEFAULT_CAPACITY,t){this._hashFn=t||this._defaultHashFn,this._capacity=Math.max(e,h.DEFAULT_CAPACITY),this._size=0,this._buckets=new Array(this._capacity).fill(null)}_capacity;get capacity(){return this._capacity}_size;get size(){return this._size}_buckets;get buckets(){return this._buckets}_hashFn;get hashFn(){return this._hashFn}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.value=t;return}if(!i.next)break;i=i.next}i.next=n}this._size++,this._size/this._capacity>=h.LOAD_FACTOR&&this._expand()}get(e){let t=this._hash(e),r=this._buckets[t];for(;r;){if(r.key===e)return r.value;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.value);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 pe=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))}};var ge=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))}};var me=class{};var ye=class{};var be=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}_loadFactor;get loadFactor(){return this._loadFactor}_capacityMultiplier;get capacityMultiplier(){return this._capacityMultiplier}_size;get size(){return this._size}_table;get table(){return this._table}_hashFn;get hashFn(){return this._hashFn}set(e,t){this.size/this.table.length>=this.loadFactor&&this.resizeTable(this.table.length*this.capacityMultiplier);let n=this._hash(e);this.table[n]||(this.table[n]=[]);for(let i=0;i<this.table[n].length;i++)if(this.table[n][i][0]===e){this.table[n][i][1]=t;return}this.table[n].push([e,t]),this._size++}get(e){let t=this._hash(e);if(this.table[t]){for(let[r,n]of this.table[t])if(r===e)return n}}delete(e){let t=this._hash(e);if(this.table[t]){for(let r=0;r<this.table[t].length;r++)if(this.table[t][r][0]===e){this.table[t].splice(r,1),this._size--,this.size/this.table.length<this.loadFactor/this.capacityMultiplier&&this.resizeTable(this.table.length/this.capacityMultiplier);return}}}*entries(){for(let e of this.table)if(e)for(let[t,r]of e)yield[t,r]}[Symbol.iterator](){return this.entries()}clear(){this._size=0,this._table=new Array(this.initialCapacity)}isEmpty(){return this.size===0}_hash(e){return this._hashFn(e)}resizeTable(e){let t=new Array(e);for(let r of this._table)if(r)for(let[n,i]of r){let s=this._hash(n)%e;t[s]||(t[s]=[]),t[s].push([n,i])}this._table=t}};var C=class{value;next;constructor(e){this.value=e,this.next=null}},j=class h{constructor(){this._head=null,this._tail=null,this._length=0}_head;get head(){return this._head}_tail;get tail(){return this._tail}_length;get length(){return this._length}static fromArray(e){let t=new h;for(let r of e)t.push(r);return t}push(e){let t=new C(e);this.head?(this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._length++}addLast(e){this.push(e)}pop(){if(!this.head)return;if(this.head===this.tail){let r=this.head.value;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.value;return e.next=null,this._tail=e,this._length--,t}popLast(){return this.pop()}shift(){if(!this.head)return;let e=this.head;return this._head=this.head.next,this._length--,e.value}popFirst(){return this.shift()}unshift(e){let t=new C(e);this.head?(t.next=this.head,this._head=t):(this._head=t,this._tail=t),this._length++}addFirst(e){this.unshift(e)}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.value}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.value}delete(e){if(!e)return!1;let t;e instanceof C?t=e.value:t=e;let r=this.head,n=null;for(;r;){if(r.value===t)return n===null?(this._head=r.next,r===this.tail&&(this._tail=null)):(n.next=r.next,r===this.tail&&(this._tail=n)),this._length--,!0;n=r,r=r.next}return!1}insertAt(e,t){if(e<0||e>this.length)return!1;if(e===0)return this.unshift(t),!0;if(e===this.length)return this.push(t),!0;let r=new C(t),n=this.getNodeAt(e-1);return r.next=n.next,n.next=r,this._length++,!0}isEmpty(){return this.length===0}clear(){this._head=null,this._tail=null,this._length=0}toArray(){let e=[],t=this.head;for(;t;)e.push(t.value),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.value))return t.value;t=t.next}return null}indexOf(e){let t=0,r=this.head;for(;r;){if(r.value===e)return t;t++,r=r.next}return-1}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}return null}insertBefore(e,t){if(!this.head)return!1;let r;if(e instanceof C?r=e.value:r=e,this.head.value===r)return this.unshift(t),!0;let n=this.head;for(;n.next;){if(n.next.value===r){let i=new C(t);return i.next=n.next,n.next=i,this._length++,!0}n=n.next}return!1}insertAfter(e,t){let r;if(e instanceof C?r=e:r=this.getNode(e),r){let n=new C(t);return n.next=r.next,r.next=n,r===this.tail&&(this._tail=n),this._length++,!0}return!1}countOccurrences(e){let t=0,r=this.head;for(;r;)r.value===e&&t++,r=r.next;return t}forEach(e){let t=this.head,r=0;for(;t;)e(t.value,r),t=t.next,r++}map(e){let t=new h,r=this.head;for(;r;)t.push(e(r.value)),r=r.next;return t}filter(e){let t=new h,r=this.head;for(;r;)e(r.value)&&t.push(r.value),r=r.next;return t}reduce(e,t){let r=t,n=this.head;for(;n;)r=e(r,n.value),n=n.next;return r}*[Symbol.iterator](){let e=this.head;for(;e;)yield e.value,e=e.next}};var k=class{value;next;prev;constructor(e){this.value=e,this.next=null,this.prev=null}},G=class h{constructor(){this._head=null,this._tail=null,this._length=0}_head;get head(){return this._head}_tail;get tail(){return this._tail}_length;get length(){return this._length}get size(){return this.length}static fromArray(e){let t=new h;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.value}popLast(){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.value}popFirst(){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)}getFirst(){return this.head?.value}getLast(){return this.tail?.value}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.value}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}getNode(e){let t=this.head;for(;t;){if(t.value===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}insertBefore(e,t){let r;if(e instanceof k?r=e:r=this.getNode(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}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.value}delete(e){let t;if(e instanceof k?t=e:t=this.getNode(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.value),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.value))return t.value;t=t.next}return null}indexOf(e){let t=0,r=this.head;for(;r;){if(r.value===e)return t;t++,r=r.next}return-1}findBackward(e){let t=this.tail;for(;t;){if(e(t.value))return t.value;t=t.prev}return null}toArrayBackward(){let e=[],t=this.tail;for(;t;)e.push(t.value),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.value,r),t=t.next,r++}map(e){let t=new h,r=this.head;for(;r;)t.push(e(r.value)),r=r.next;return t}filter(e){let t=new h,r=this.head;for(;r;)e(r.value)&&t.push(r.value),r=r.next;return t}reduce(e,t){let r=t,n=this.head;for(;n;)r=e(r,n.value),n=n.next;return r}insertAfter(e,t){let r;if(e instanceof k?r=e:r=this.getNode(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}*[Symbol.iterator](){let e=this.head;for(;e;)yield e.value,e=e.next}};var W=class{key;value;forward;constructor(e,t,r){this.key=e,this.value=t,this.forward=new Array(r)}},Ne=class{constructor(e=16,t=.5){this._head=new W(null,null,e),this._level=0,this._maxLevel=e,this._probability=t}_head;get head(){return this._head}_level;get level(){return this._level}_maxLevel;get maxLevel(){return this._maxLevel}_probability;get probability(){return this._probability}add(e,t){let r=new W(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}has(e){return this.get(e)!==void 0}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}getFirst(){let e=this.head.forward[0];return e?e.value:void 0}getLast(){let e=this.head;for(let t=this.level-1;t>=0;t--)for(;e.forward[t];)e=e.forward[t];return e.value}higher(e){let t=this.head;for(let n=this.level-1;n>=0;n--)for(;t.forward[n]&&t.forward[n].key<=e;)t=t.forward[n];let r=t.forward[0];return r?r.value:void 0}lower(e){let t=this.head,r=null;for(let n=this.level-1;n>=0;n--){for(;t.forward[n]&&t.forward[n].key<e;)t=t.forward[n];t.key<e&&(r=t)}return r?r.value:void 0}_randomLevel(){let e=1;for(;Math.random()<this.probability&&e<this.maxLevel;)e++;return e}};var _e=class h{constructor(e){this._elements=Array.isArray(e)?e:[]}_elements;get elements(){return this._elements}static fromArray(e){return new h(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 h(this.elements.slice())}};var Ee=class extends j{enqueue(e){this.push(e)}dequeue(){return this.shift()}getFirst(){return this.head?.value}peek(){return this.getFirst()}},w=class h{constructor(e){this._nodes=e||[],this._offset=0}_nodes;get nodes(){return this._nodes}_offset;get offset(){return this._offset}get size(){return this.nodes.length-this.offset}static fromArray(e){return new h(e)}push(e){return this.nodes.push(e),this}shift(){if(this.size===0)return;let e=this.getFirst();return this._offset+=1,this.offset*2<this.nodes.length||(this._nodes=this.nodes.slice(this.offset),this._offset=0),e}getFirst(){return this.size>0?this.nodes[this.offset]:void 0}peek(){return this.getFirst()}getLast(){return this.size>0?this.nodes[this.nodes.length-1]:void 0}peekLast(){return this.getLast()}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 h(this.nodes.slice(this.offset))}*[Symbol.iterator](){for(let e of this.nodes)yield e}};var xe=class extends G{},Ve=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}_first=-1;get first(){return this._first}_last=-1;get last(){return this._last}_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++}popFirst(){if(!this.size)return;let e=this.getFirst();return delete this.nodes[this.first],this._first++,this._size--,e}getFirst(){if(this.size)return this.nodes[this.first]}popLast(){if(!this.size)return;let e=this.getLast();return delete this.nodes[this.last],this._last--,this._size--,e}getLast(){if(this.size)return this.nodes[this.last]}get(e){return this.nodes[this.first+e]||null}isEmpty(){return this.size<=0}},Te=class{_nodes=[];get nodes(){return this._nodes}get size(){return this.nodes.length}addLast(e){return this.nodes.push(e)}popLast(){return this.nodes.pop()??null}popFirst(){return this.nodes.shift()??null}addFirst(e){return this.nodes.unshift(e)}getFirst(){return this.nodes[0]??null}getLast(){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 ve=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(h){let e=Math.random()*16|0;return(h=="x"?e:e&3|8).toString(16)})},B=function(h,e){let t=-1,r=h?h.length:0,n=[];for(;++t<r;){let i=h[t];e(i,t,h)&&(n.push(i),Array.prototype.splice.call(h,t--,1),r--)}return n},we=Symbol("thunk"),Oe=h=>typeof h=="function"&&h.__THUNK__===we,Be=h=>{let e=()=>h();return e.__THUNK__=we,e},te=h=>Object.assign((...t)=>{let r=h(...t);for(;Oe(r)&&typeof r=="function";)r=r();return r},{cont:(...t)=>Be(()=>h(...t))}),et=h=>Object.assign(async(...t)=>{let r=await h(...t);for(;Oe(r)&&typeof r=="function";)r=await r();return r},{cont:(...t)=>Be(()=>h(...t))}),Ce=h=>h<=0?0:1<<31-Math.clz32(h);var M=class h{constructor(e){this._comparator=e.comparator,e.nodes&&e.nodes.length>0&&(this._nodes=e.nodes,this.fix())}_nodes=[];get nodes(){return this._nodes}_comparator;get comparator(){return this._comparator}get size(){return this.nodes.length}get leaf(){return this.nodes[this.size-1]??void 0}static heapify(e){return new h(e)}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 h({comparator: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)}},re=class{element;degree;left;right;child;parent;marked;constructor(e,t=0){this.element=e,this.degree=t,this.marked=!1}},ke=class{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.")}_root;get root(){return this._root}_size=0;get size(){return this._size}_min;get min(){return this._min}_comparator;get comparator(){return this._comparator}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 re(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 M{constructor(e={comparator:(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 Me=class extends M{constructor(e={comparator:(t,r)=>{if(typeof t=="number"&&typeof r=="number")return t-r;throw new Error("The a, b params of compare function must be number")}}){super(e)}};var R=class extends M{constructor(e){super(e)}};var Re=class extends R{constructor(e={comparator:(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 Le=class extends R{constructor(e={comparator:(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{key;value;constructor(e,t){this.key=e,this.value=t}},L=class{value;weight;constructor(e,t){this.weight=e!==void 0?e:1,this.value=t,this._hashCode=ve()}_hashCode;get hashCode(){return this._hashCode}},D=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)}}deleteVertex(e){let t=this._getVertexKey(e);return this._vertices.delete(t)}removeManyVertices(e){let t=[];for(let r of e)t.push(this.deleteVertex(r));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,r,n){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 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,a,u)=>{a.set(o,!0),o===l&&r.push([n,...u]);let g=this.getNeighbors(o);for(let m of g)a.get(m)||(u.push(m),s(m,l,a,u),B(u,_=>_===m));a.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 w([i]);s.set(i,!0);let l=0;for(;o.size>0;){for(let a=0;a<o.size;a++){let u=o.shift();if(u===n)return l;if(u!==void 0){let g=this.getNeighbors(u);for(let m of g)s.has(m)||(s.set(m,!0),o.push(m))}}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 a=this.getPathSumWeight(l);a<i&&(i=a,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,a,u,g)=>{if(u.set(l,!0),l===a){n=[i,...g];return}let m=this.getNeighbors(l);for(let _ of m)u.get(_)||(g.push(_),o(_,a,u,g),B(g,x=>x===_));u.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=[],a=this._vertices,u=new Map,g=new Set,m=new Map,_=this._getVertex(e),x=t?this._getVertex(t):null;if(!_)return null;for(let f of a){let d=f[1];d instanceof v&&u.set(d,1/0)}u.set(_,0),m.set(_,null);let b=()=>{let f=1/0,d=null;for(let[c,y]of u)g.has(c)||y<f&&(f=y,d=c);return d},N=f=>{for(let d of a){let c=d[1];if(c instanceof v){let y=[c],p=m.get(c);for(;p;)y.push(p),p=m.get(p);let E=y.reverse();d[1]===f&&(o=E),l.push(E)}}};for(let f=1;f<a.size;f++){let d=b();if(d){if(g.add(d),x&&x===d)return r&&(i=u.get(x)||1/0),n&&N(x),{distMap:u,preMap:m,seen:g,paths:l,minDist:i,minPath:o};let c=this.getNeighbors(d);for(let y of c)if(!g.has(y)){let p=this.getEdge(d,y);if(p){let E=u.get(d),V=u.get(y);E!==void 0&&V!==void 0&&p.weight+E<V&&(u.set(y,p.weight+E),m.set(y,d))}}}}return r&&u.forEach((f,d)=>{d!==_&&f<i&&(i=f,n&&(s=d))}),n&&N(s),{distMap:u,preMap:m,seen:g,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=[],a=this._vertices,u=new Map,g=new Set,m=new Map,_=this._getVertex(e),x=t?this._getVertex(t):null;if(!_)return null;for(let f of a){let d=f[1];d instanceof v&&u.set(d,1/0)}let b=new R({comparator:(f,d)=>f.key-d.key});b.add({key:0,value:_}),u.set(_,0),m.set(_,null);let N=f=>{for(let d of a){let c=d[1];if(c instanceof v){let y=[c],p=m.get(c);for(;p;)y.push(p),p=m.get(p);let E=y.reverse();d[1]===f&&(o=E),l.push(E)}}};for(;b.size>0;){let f=b.poll(),d=f?.key,c=f?.value;if(d!==void 0&&c){if(g.add(c),x&&x===c)return r&&(i=u.get(x)||1/0),n&&N(x),{distMap:u,preMap:m,seen:g,paths:l,minDist:i,minPath:o};let y=this.getNeighbors(c);for(let p of y)if(!g.has(p)){let E=this.getEdge(c,p)?.weight;if(typeof E=="number"){let V=u.get(p);V&&d+E<V&&(b.add({key:d+E,value:p}),m.set(p,c),u.set(p,d+E))}}}}return r&&u.forEach((f,d)=>{d!==_&&f<i&&(i=f,n&&(s=d))}),n&&N(s),{distMap:u,preMap:m,seen:g,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,a=1/0,u=[],g;if(t&&(g=!1),!i)return{hasNegativeCycle:g,distMap:o,preMap:l,paths:s,min:a,minPath:u};let m=this._vertices,_=m.size,x=this.edgeSet(),b=x.length;this._vertices.forEach(f=>{o.set(f,1/0)}),o.set(i,0);for(let f=1;f<_;++f)for(let d=0;d<b;++d){let c=this.getEndsOfEdge(x[d]);if(c){let[y,p]=c,E=x[d].weight,V=o.get(y),K=o.get(p);V!==void 0&&K!==void 0&&o.get(y)!==1/0&&V+E<K&&(o.set(p,V+E),n&&l.set(p,y))}}let N=null;if(r&&o.forEach((f,d)=>{d!==i&&f<a&&(a=f,n&&(N=d))}),n)for(let f of m){let d=f[1];if(d instanceof v){let c=[d],y=l.get(d);for(;y!==void 0;)c.push(y),y=l.get(y);let p=c.reverse();f[1]===N&&(u=p),s.push(p)}}for(let f=0;f<b;++f){let d=this.getEndsOfEdge(x[f]);if(d){let[c]=d,y=x[f].weight,p=o.get(c);p&&p!==1/0&&p+y<p&&(g=!0)}}return{hasNegativeCycle:g,distMap:o,preMap:l,paths:s,min:a,minPath:u}}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(f=>{s.set(f,-1),o.set(f,1/0)});let[a]=l.values(),u=[],g=[],m=0,_=(f,d)=>{m++,s.set(f,m),o.set(f,m);let c=this.getNeighbors(f),y=0;for(let p of c)if(p!==d){s.get(p)===-1&&(y++,_(p,f));let E=o.get(p),V=o.get(f);V!==void 0&&E!==void 0&&o.set(f,Math.min(V,E));let K=s.get(f);if(E!==void 0&&K!==void 0&&(e&&(f===a&&y>=2||f!==a&&E>=K)&&u.push(f),t&&E>K)){let A=this.getEdge(f,p);A&&g.push(A)}}};_(a,null);let x=new Map,b=()=>{let f=new Map;return o.forEach((d,c)=>{f.has(d)?f.get(d)?.push(c):f.set(d,[c])}),f};r&&(x=b());let N=new Map;if(n){let f=new Map;f.size<1&&(f=b()),f.forEach((d,c)=>{d.length>1&&N.set(c,d)})}return{dfnMap:s,lowMap:o,bridges:g,articulationPoints:u,SCCs:x,cycles:N}}_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}};var I=class extends v{constructor(e,t){super(e,t)}},z=class extends L{src;dest;constructor(e,t,r,n){super(r,n),this.src=e,this.dest=t}},X=class extends D{constructor(){super()}_outEdgeMap=new Map;get outEdgeMap(){return this._outEdgeMap}_inEdgeMap=new Map;get inEdgeMap(){return this._inEdgeMap}createVertex(e,t){return new I(e,t??e)}createEdge(e,t,r,n){return new z(e,t,r??1,n)}getEdge(e,t){let r=[];if(e!==null&&t!==null){let n=this._getVertex(e),i=this._getVertex(t);if(n&&i){let s=this._outEdgeMap.get(n);s&&(r=s.filter(o=>o.dest===i.key))}}return r[0]||null}deleteEdgeSrcToDest(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&&B(s,l=>l.dest===n.key);let o=this._inEdgeMap.get(n);return o&&(i=B(o,l=>l.src===r.key)[0]||null),i}deleteEdge(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&&B(i,o=>o.src===r.key);let s=this._inEdgeMap.get(n);s&&s.length>0&&(t=B(s,o=>o.dest===n.key)[0])}return t}deleteEdgesBetween(e,t){let r=[];if(e&&t){let n=this.deleteEdgeSrcToDest(e,t),i=this.deleteEdgeSrcToDest(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 a=t.get(l);a===0?i(l):a===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 I?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}};var ne=class extends v{constructor(e,t){super(e,t)}},ie=class extends L{vertices;constructor(e,t,r,n){super(r,n),this.vertices=[e,t]}},Se=class extends D{constructor(){super(),this._edges=new Map}_edges;get edges(){return this._edges}createVertex(e,t){return new ne(e,t??e)}createEdge(e,t,r,n){return new ie(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}deleteEdgeBetween(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=B(i,l=>l.vertices.includes(n.key))[0]||null);let o=this._edges.get(n);return o&&B(o,l=>l.vertices.includes(r.key)),s}deleteEdge(e){return this.deleteEdgeBetween(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}};var se=class extends I{lat;long;constructor(e,t,r,n){super(e,t),this.lat=r,this.long=n}},oe=class extends z{constructor(e,t,r,n){super(e,t,r,n)}},De=class extends X{constructor(e,t){super(),this._origin=e,this._bottomRight=t}_origin=[0,0];get origin(){return this._origin}_bottomRight;get bottomRight(){return this._bottomRight}createVertex(e,t,r=this.origin[0],n=this.origin[1]){return new se(e,t,r,n)}createEdge(e,t,r,n){return new oe(e,t,r,n)}};var Y=(t=>(t.ITERATIVE="ITERATIVE",t.RECURSIVE="RECURSIVE",t))(Y||{}),le=(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))(le||{});var Ie=(t=>(t[t.RED=1]="RED",t[t.BLACK=0]="BLACK",t))(Ie||{});var We=(r=>(r.VAL="VAL",r.NODE="NODE",r.ID="ID",r))(We||{});var he=(r=>(r.lt="lt",r.eq="eq",r.gt="gt",r))(he||{});var O=class{key;value;parent;constructor(e,t){this.key=e,this.value=t}_left;get left(){return this._left}set left(e){e&&(e.parent=this),this._left=e}_right;get right(){return this._right}set right(e){e&&(e.parent=this),this._right=e}get familyPosition(){let e=this;return this.parent?this.parent.left===e?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===e?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},Q=class{iterationType="ITERATIVE";constructor(e){if(e!==void 0){let{iterationType:t="ITERATIVE"}=e;this.iterationType=t}}_root=null;get root(){return this._root}_size=0;get size(){return this._size}createNode(e,t){return new O(e,t)}clear(){this._setRoot(null),this._size=0}isEmpty(){return this.size===0}add(e,t){let r=(l,a)=>{let u=new w([l]);for(;u.size>0;){let g=u.shift();if(g){if(a&&g.key===a.key)return;let m=this._addTo(a,g);if(m!==void 0)return m;g.left&&u.push(g.left),g.right&&u.push(g.right)}else return}},n,i;if(e===null)i=null;else if(typeof e=="number")i=this.createNode(e,t);else if(e instanceof O)i=e;else return;let s=typeof e=="number"?e:e?e.key:void 0,o=s!==void 0?this.getNode(s,l=>l.key):void 0;return this.root?o?(o.value=t,n=o):n=r(this.root,i):(this._setRoot(i),i!==null?this._size=1:this._size=0,n=this.root),n}addMany(e,t){return e.map((r,n)=>{if(r instanceof O)return this.add(r.key,r.value);if(r===null)return this.add(null);let i=t?.[n];return this.add(r,i)})}refill(e,t){return this.clear(),e.length===this.addMany(e,t).length}delete(e,t=r=>r.key){let r=[];if(!this.root)return r;e instanceof O&&(t=l=>l);let n=this.getNode(e,t);if(!n)return r;let i=n?.parent?n.parent:null,s=null,o=n;if(n.left){let l=n.left?this.getRightMost(n.left):null;if(l){let a=l.parent;o=this._swap(n,l),a&&(a.right===l?a.right=l.left:a.left=l.left,s=a)}}else if(!i)this._setRoot(null);else{let{familyPosition:l}=n;l==="LEFT"||l==="ROOT_LEFT"?i.left=n.right:(l==="RIGHT"||l==="ROOT_RIGHT")&&(i.right=n.right),s=i}return this._size=this.size-1,r.push({deleted:o,needBalanced:s}),r}getDepth(e,t=this.root){typeof e=="number"&&(e=this.getNode(e)),typeof t=="number"&&(t=this.getNode(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.getNode(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=s=>s.key,r=!1,n=this.root,i=this.iterationType){if(!n)return[];e instanceof O&&(t=o=>o);let s=[];if(i==="RECURSIVE"){let o=l=>{t(l)===e&&(s.push(l),r)||!l.left&&!l.right||(l.left&&o(l.left),l.right&&o(l.right))};o(n)}else{let o=new w([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=i=>i.key,r=this.root,n=this.iterationType){return e instanceof O&&(t=i=>i),this.getNodes(e,t,!0,r,n).length>0}getNode(e,t=i=>i.key,r=this.root,n=this.iterationType){return e instanceof O&&(t=i=>i),this.getNodes(e,t,!0,r,n)[0]??null}get(e,t=i=>i.key,r=this.root,n=this.iterationType){return e instanceof O&&(t=i=>i),this.getNode(e,t,r,n)?.value??void 0}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.getNode(e)),!e)return e;if(t==="RECURSIVE"){let r=n=>n.left?r(n.left):n;return r(e)}else{let r=te(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=te(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=n=>n.key,t=this.root,r=this.iterationType){typeof t=="number"&&(t=this.getNode(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=i=>i.key,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=n=>n.key,t=this.root,r=this.iterationType){if(!t)return[];let n=[];if(r==="RECURSIVE"){let i=new w([t]),s=o=>{if(i.size===0)return;let l=i.shift();n.push(e(l)),l.left&&i.push(l.left),l.right&&i.push(l.right),s(o+1)};s(0)}else{let i=new w([t]);for(;i.size>0;){let s=i.size;for(let o=0;o<s;o++){let l=i.shift();n.push(e(l)),l.left&&i.push(l.left),l.right&&i.push(l.right)}}}return n}listLevels(e=n=>n.key,t=this.root,r=this.iterationType){if(!t)return[];let n=[];if(r==="RECURSIVE"){let i=(s,o)=>{n[o]||(n[o]=[]),n[o].push(e(s)),s.left&&i(s.left,o+1),s.right&&i(s.right,o+1)};i(t,0)}else{let i=[[t,0]];for(;i.length>0;){let s=i.pop(),[o,l]=s;n[l]||(n[l]=[]),n[l].push(e(o)),o.right&&i.push([o.right,l+1]),o.left&&i.push([o.left,l+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}getSuccessor(e){if(e.right)return this.getLeftMost(e.right);let t=e.parent;for(;t&&t&&e===t.right;)e=t,t=t.parent;return t}morris(e=n=>n.key,t="in",r=this.root){if(r===null)return[];let n=[],i=r,s=l=>{let a=null,u=null;for(;l;)u=l.right,l.right=a,a=l,l=u;return a},o=l=>{let a=s(l),u=a;for(;u;)n.push(e(u)),u=u.right;s(a)};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}*[Symbol.iterator](e=this.root){if(e)if(this.iterationType==="ITERATIVE"){let t=[],r=e;for(;r||t.length>0;){for(;r;)t.push(r),r=r.left;r=t.pop(),r&&(yield r.key),r&&(r=r.right)}}else e.left&&(yield*this[Symbol.iterator](e.left)),yield e.key,e.right&&(yield*this[Symbol.iterator](e.right))}_swap(e,t){let{key:r,value:n}=t,i=this.createNode(r,n);return i&&(t.key=e.key,t.value=e.value,e.key=i.key,e.value=i.value),t}_addTo(e,t){if(t)return t.left===void 0?(t.left=e,e&&(this._size=this.size+1),t.left):t.right===void 0?(t.right=e,e&&(this._size=this.size+1),t.right):void 0}_setRoot(e){e&&(e.parent=void 0),this._root=e}};var S=class extends O{constructor(e,t){super(e,t)}},$=class extends Q{constructor(e){if(super(e),e!==void 0){let{comparator:t}=e;t!==void 0&&(this._comparator=t)}}createNode(e,t){return new S(e,t)}add(e,t){let r=null,n=null;if(e instanceof S?n=e:typeof e=="number"?n=this.createNode(e,t):e===null&&(n=null),this.root===null)this._setRoot(n),this._size=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.value=n.value),s=!1,r=i):this._compare(i.key,n.key)==="gt"?i.left===void 0?(n&&(n.parent=i),i.left=n,this._size=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._size=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(b){return b.indexOf(null)===-1}if(!r||!i(e))return super.addMany(e,t);let s=[],o=e.map((b,N)=>[b,t?.[N]]),l=[];function a(b){for(let[N]of b)if(N instanceof S)return!0;return!1}function u(b){for(let[N]of b)if(typeof N=="number")return!0;return!1}let g=[],m=[];if(a(o))l=o.sort((b,N)=>b[0].key-N[0].key);else if(u(o))l=o.sort((b,N)=>b[0]-N[0]);else throw new Error("Invalid input keysOrNodes");g=l.map(([b])=>b),m=l.map(([,b])=>b);let _=(b,N)=>{if(b.length===0)return;let f=Math.floor((b.length-1)/2),d=this.add(b[f],N?.[f]);s.push(d),_(b.slice(0,f),N?.slice(0,f)),_(b.slice(f+1),N?.slice(f+1))},x=()=>{let N=[[0,l.length-1]];for(;N.length>0;){let f=N.pop();if(f){let[d,c]=f;if(d<=c){let y=d+Math.floor((c-d)/2),p=this.add(g[y],m?.[y]);s.push(p),N.push([y+1,c]),N.push([d,y-1])}}}};return n==="RECURSIVE"?_(g,m):x(),s}getNode(e,t=i=>i.key,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=s=>s.key,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===(u=>u.key)?(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 w([n]);for(;o.size>0;){let l=o.shift();if(l){if(t(l)===e&&(s.push(l),r))return s;t===(u=>u.key)?(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=i=>i.key,t="lt",r=this.root,n=this.iterationType){typeof r=="number"&&(r=this.getNode(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 w([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.value),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),a=t[l];this.add(a.key,a.value),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 Fe=class{_freq;_max;constructor({frequency:e=0,max:t}){this._freq=e,this._max=t,this._freqMap={0:0},this._msb=Ce(t),this._negativeCount=e<0?t:0}_freqMap;get freqMap(){return this._freqMap}_msb;get msb(){return this._msb}_negativeCount;get negativeCount(){return this._negativeCount}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)}getPrefixSum(e){this._checkIndex(e),e++;let t=0;for(;e>0;)t+=this._getFrequency(e),e-=e&-e;return t}_getFrequency(e){return e in this.freqMap?this.freqMap[e]:this.freq*(e&-e)}_updateFrequency(e,t){this.freqMap[e]=this._getFrequency(e)+t}_checkIndex(e){if(!Number.isInteger(e))throw new Error("Invalid index: Index must be an integer.");if(e<0||e>=this.max)throw new Error("Index out of range: Index must be within the range [0, this.max).")}_readSingle(e){e=e+1;let t=this._getFrequency(e),r=e-(e&-e);for(e--;e!==r;)t-=this._getFrequency(e),e-=e&-e;return t}_updateNegativeCount(e,t){e<0&&t>=0?this._negativeCount--:e>=0&&t<0&&this._negativeCount++}_update(e,t){for(e=e+1;e<=this.max;)this._updateFrequency(e,t),e+=e&-e}_writeSingle(e,t){let r=this._readSingle(e);this._update(e,t-r),this._updateNegativeCount(r,t)}_read(e){let t=e,r=0;for(;t;)r+=this._getFrequency(t),t-=t&-t;return r}_binarySearch(e,t){let r=0,n=this.msb<<1,i=e;for(;n>r+1;){let s=r+n>>1,o=this._getFrequency(s);s<=this.max&&t(o,i)?(i-=o,r=s):n=s}return r}};var H=class{start=0;end=0;value=null;sum=0;left=null;right=null;constructor(e,t,r,n){this.start=e,this.end=t,this.sum=r,this.value=n||null}},Ae=class{constructor(e,t,r){t=t||0,r=r||e.length-1,this._values=e,this._start=t,this._end=r,e.length>0?this._root=this.build(t,r):(this._root=null,this._values=[])}_values=[];get values(){return this._values}_start=0;get start(){return this._start}_end;get end(){return this._end}_root;get root(){return this._root}build(e,t){if(e>t)return new H(e,t,0);if(e===t)return new H(e,t,this._values[e]);let r=e+Math.floor((t-e)/2),n=this.build(e,r),i=this.build(r+1,t),s=new H(e,t,n.sum+i.sum);return s.left=n,s.right=i,s}updateNode(e,t,r){let n=this.root||null;if(!n)return;let i=(s,o,l,a)=>{if(s.start===s.end&&s.start===o){s.sum=l,a!==void 0&&(s.value=a);return}let u=s.start+Math.floor((s.end-s.start)/2);o<=u?s.left&&i(s.left,o,l,a):s.right&&i(s.right,o,l,a),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 a=0,u=0;return i.left&&(a=n(i.left,s,l)),i.right&&(u=n(i.right,l+1,o)),a+u}};return n(r,e,t)}};var F=class extends S{height;constructor(e,t){super(e,t),this.height=0}},J=class extends ${constructor(e){super(e)}createNode(e,t){return new F(e,t)}add(e,t){let r=super.add(e,t);return r&&this._balancePath(r),r}delete(e,t=r=>r.key){e instanceof F&&(t=n=>n);let r=super.delete(e,t);for(let{needBalanced:n}of r)n&&this._balancePath(n);return r}_swap(e,t){let{key:r,value:n,height:i}=t,s=this.createNode(r,n);return s&&(s.height=i,t.key=e.key,t.value=e.value,t.height=e.height,e.key=s.key,e.value=s.value,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 Z=class{key;parent;left;right;color=0;constructor(e,t=0){this.key=e,this.color=t,this.parent=null,this.left=null,this.right=null}},T=new Z(0),ze=class{constructor(){this._root=T}_root;get root(){return this._root}insert(e){let t=new Z(e,1);t.left=T,t.right=T;let r=null,n=this.root;for(;n!==T;)r=n,t.key<n.key?n=n.left:n=n.right;if(t.parent=r,r===null?this._root=t:t.key<r.key?r.left=t:r.right=t,t.parent===null){t.color=0;return}t.parent.parent!==null&&this._fixInsert(t)}delete(e){(r=>{let n=T,i,s;for(;r!==T;)r.key===e&&(n=r),r.key<=e?r=r.right:r=r.left;if(n===T)return;s=n;let o=s.color;n.left===T?(i=n.right,this._rbTransplant(n,n.right)):n.right===T?(i=n.left,this._rbTransplant(n,n.left)):(s=this.getLeftMost(n.right),o=s.color,i=s.right,s.parent===n?i.parent=s:(this._rbTransplant(s,s.right),s.right=n.right,s.right.parent=s),this._rbTransplant(n,s),s.left=n.left,s.left.parent=s,s.color=n.color),o===0&&this._fixDelete(i)})(this.root)}isRealNode(e){return e!==T&&e!==null}getNode(e,t=this.root){let r=n=>this.isRealNode(n)?e===n.key?n:e<n.key?r(n.left):r(n.right):null;return r(t)}getLeftMost(e=this.root){for(;e.left!==null&&e.left!==T;)e=e.left;return e}getRightMost(e){for(;e.right!==null&&e.right!==T;)e=e.right;return e}getSuccessor(e){if(e.right!==T)return this.getLeftMost(e.right);let t=e.parent;for(;t!==T&&t!==null&&e===t.right;)e=t,t=t.parent;return t}getPredecessor(e){if(e.left!==T)return this.getRightMost(e.left);let t=e.parent;for(;t!==T&&e===t.left;)e=t,t=t.parent;return t}print(e=this.root){let t=n=>{let[i,,,]=r(n);for(let s of i)console.log(s)},r=n=>{if(n===null)return[[],0,0,0];if(n.right===null&&n.left===null){let d=`${n.key}`,c=d.length,y=1,p=Math.floor(c/2);return[[d],c,y,p]}if(n.right===null){let[d,c,y,p]=r(n.left),E=`${n.key}`,V=E.length,K=" ".repeat(p+1)+"_".repeat(c-p-1)+E,A=" ".repeat(p)+"/"+" ".repeat(c-p-1+V),ue=d.map(fe=>fe+" ".repeat(V));return[[K,A,...ue],c+V,y+2,c+Math.floor(V/2)]}if(n.left===null){let[d,c,y,p]=r(n.right),E=`${n.key}`,V=E.length,K=E+"_".repeat(V)+" ".repeat(c-V),A=" ".repeat(p+V)+"\\"+" ".repeat(c-V-1),ue=d.map(fe=>" ".repeat(p)+fe);return[[K,A,...ue],c+V,y+2,Math.floor(p/2)]}let[i,s,o,l]=r(n.left),[a,u,g,m]=r(n.right),_=`${n.key}`,x=_.length,b=" ".repeat(l+1)+"_".repeat(s-l-1)+_+"_".repeat(m)+" ".repeat(u-m),N=" ".repeat(l)+"/"+" ".repeat(s-l-1+x+m)+"\\"+" ".repeat(u-m-1);o<g?i.push(...new Array(g-o).fill(" ".repeat(s))):g<o&&a.push(...new Array(o-g).fill(" ".repeat(u)));let f=i.map((d,c)=>d+" ".repeat(x)+a[c]);return[[b,N,...f],s+u+x,Math.max(o,g)+2,s+Math.floor(x/2)]};t(e)}_leftRotate(e){let t=e.right;e.right=t.left,t.left!==T&&(t.left.parent=e),t.parent=e.parent,e.parent===null?this._root=t:e===e.parent.left?e.parent.left=t:e.parent.right=t,t.left=e,e.parent=t}_rightRotate(e){let t=e.left;e.left=t.right,t.right!==T&&(t.right.parent=e),t.parent=e.parent,e.parent===null?this._root=t:e===e.parent.right?e.parent.right=t:e.parent.left=t,t.right=e,e.parent=t}_fixDelete(e){let t;for(;e!==this.root&&e.color===0;)e===e.parent.left?(t=e.parent.right,t.color===1&&(t.color=0,e.parent.color=1,this._leftRotate(e.parent),t=e.parent.right),t.left!==null&&t.left.color===0&&t.right.color===0?(t.color=1,e=e.parent):(t.right.color===0&&(t.left.color=0,t.color=1,this._rightRotate(t),t=e.parent.right),t.color=e.parent.color,e.parent.color=0,t.right.color=0,this._leftRotate(e.parent),e=this.root)):(t=e.parent.left,t.color===1&&(t.color=0,e.parent.color=1,this._rightRotate(e.parent),t=e.parent.left),t.right.color===0&&t.right.color===0?(t.color=1,e=e.parent):(t.left.color===0&&(t.right.color=0,t.color=1,this._leftRotate(t),t=e.parent.left),t.color=e.parent.color,e.parent.color=0,t.left.color=0,this._rightRotate(e.parent),e=this.root));e.color=0}_rbTransplant(e,t){e.parent===null?this._root=t:e===e.parent.left?e.parent.left=t:e.parent.right=t,t.parent=e.parent}_fixInsert(e){let t;for(;e.parent.color===1&&(e.parent===e.parent.parent.right?(t=e.parent.parent.left,t.color===1?(t.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.left&&(e=e.parent,this._rightRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._leftRotate(e.parent.parent))):(t=e.parent.parent.right,t.color===1?(t.color=0,e.parent.color=0,e.parent.parent.color=1,e=e.parent.parent):(e===e.parent.right&&(e=e.parent,this._leftRotate(e)),e.parent.color=0,e.parent.parent.color=1,this._rightRotate(e.parent.parent))),e!==this.root););this.root.color=0}};var P=class extends F{count;constructor(e,t,r=1){super(e,t),this.count=r}},He=class extends J{constructor(e){super(e)}_count=0;get count(){return this._count}createNode(e,t,r){return new P(e,t,r)}add(e,t,r=1){let n,i;if(e instanceof P?i=this.createNode(e.key,e.value,e.count):e===null?i=null:i=this.createNode(e,t,r),!this.root)this._setRoot(i),this._size=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.value=i.value,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._size=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._size=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._size=this.size+1,this._setCount(this.count+e.count)),t.left):t.right===void 0?(t.right=e,e!==null&&(this._size=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 P){r.push(this.add(i.key,i.value,i.count));continue}if(i===null){r.push(this.add(NaN,void 0,0));continue}r.push(this.add(i,t?.[n],1))}return r}perfectlyBalance(e=this.iterationType){let t=this.dfs(n=>n,"in"),r=t.length;if(t.length<1)return!1;if(this.clear(),e==="RECURSIVE"){let n=(i,s)=>{if(i>s)return;let o=i+Math.floor((s-i)/2),l=t[o];this.add(l.key,l.value,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),a=t[l];this.add(a.key,a.value,a.count),n.push([l+1,o]),n.push([s,l-1])}}}return!0}}delete(e,t=n=>n.key,r=!1){let n=[];if(!this.root)return n;let i=this.getNode(e,t);if(!i)return n;let s=i?.parent?i.parent:null,o=null,l=i;if(i.count>1&&!r)i.count--,this._setCount(this.count-1);else{if(i.left){let a=i.left?this.getRightMost(i.left):null;if(a){let u=a.parent;l=this._swap(i,a),u&&(u.right===a?u.right=a.left:u.left=a.left,o=u)}}else if(!s)i.right!==void 0&&this._setRoot(i.right);else{let{familyPosition:a}=i;a==="LEFT"||a==="ROOT_LEFT"?s.left=i.right:(a==="RIGHT"||a==="ROOT_RIGHT")&&(s.right=i.right),o=s}this._size=this.size-1,this._setCount(this.count-l.count)}return n.push({deleted:l,needBalanced:o}),o&&this._balancePath(o),n}clear(){super.clear(),this._setCount(0)}_swap(e,t){let{key:r,value:n,count:i,height:s}=t,o=this.createNode(r,n,i);return o&&(o.height=s,t.key=e.key,t.value=e.value,t.count=e.count,t.height=e.height,e.key=o.key,e.value=o.value,e.count=o.count,e.height=o.height),t}_setCount(e){this._count=e}};var Pe=class h{key;value;children;constructor(e,t,r){this.key=e,this.value=t||void 0,this.children=r||[]}addChildren(e){this.children||(this.children=[]),e instanceof h?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 Ue=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 U=class h{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 h(Math.round(this.x),Math.round(this.y))}static add(e,t){return new h(e.x+t.x,e.y+t.y)}static subtract(e,t){return new h(e.x-t.x,e.y-t.y)}static subtractValue(e,t){return new h(e.x-t,e.y-t)}static multiply(e,t){return new h(e.x*t,e.y*t)}static divide(e,t){return new h(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=h.abs(h.subtract(e,t));return n.x<r&&n.y<r}static normalize(e){let t=e.length;return t>2220446049250313e-31?h.divide(e,t):e}static truncate(e,t){return e.length>t?h.multiply(h.normalize(e),t):e}static perp(e){return new h(-e.y,e.x)}static reverse(e){return new h(-e.x,-e.y)}static abs(e){return new h(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 h(0,-1),r=Math.acos(h.dot(e,t)/(e.length*t.length));return h.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 h(r,n)}zero(){this.x=0,this.y=0}};var qe=class h{_matrix;constructor(e){typeof e>"u"?this._matrix=h.identity:e instanceof U?(this._matrix=h.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=h.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 h(r)}static subtract(e,t){let r=h.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 h(r)}static multiply(e,t){let r=h.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 h(r)}static multiplyByValue(e,t){let r=h.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 h(r)}static multiplyByVector(e,t){return h.multiply(e,new h(t)).toVector()}static view(e,t){let n=e/2,i=t/2,s=Math.cos(Math.PI);return new h([[1,0,n],[0,s*1,i],[0,0,1]])}static scale(e){return h.multiplyByValue(new h,e)}static rotate(e){let t=Math.cos(e),r=Math.sin(e);return new h([[t,-r,0],[r,t,0],[0,0,1]])}static translate(e){return new h([[1,0,e.x],[0,1,e.y],[0,0,e.w]])}toVector(){return new U(this._matrix[0][0],this._matrix[1][0])}};var ae=class h{direction;turn;constructor(e,t){this.direction=e,this.turn=()=>new h(t[e],t)}},je=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 ae(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 ee=class{key;children;isEnd;constructor(e){this.key=e,this.isEnd=!1,this.children=new Map}},Ge=class{constructor(e,t=!0){if(this._root=new ee(""),this._caseSensitive=t,e)for(let r of e)this.add(r)}_caseSensitive;get caseSensitive(){return this._caseSensitive}_root;get root(){return this._root}add(e){e=this._caseProcess(e);let t=this.root;for(let r of e){let n=t.children.get(r);n||(n=new ee(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,r=!1){e=this._caseProcess(e);let n=[],i=0;function s(l,a){for(let u of l.children.keys()){let g=l.children.get(u);g!==void 0&&s(g,a.concat(u))}if(l.isEnd){if(i>t-1)return;n.push(a),i++}}let o=this.root;if(e)for(let l of e){let a=o.children.get(l);a&&(o=a)}return(r||o!==this.root)&&s(o,e),n}_caseProcess(e){return this._caseSensitive||(e=e.toLowerCase()),e}};return Ze(tt);})();
2
2
  /**
3
3
  * data-structure-typed
4
4
  *