data-structure-typed 1.53.1 → 1.53.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +6 -0
  3. package/dist/cjs/data-structures/heap/heap.d.ts +165 -0
  4. package/dist/cjs/data-structures/heap/heap.js +165 -0
  5. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  6. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +426 -0
  7. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +430 -2
  8. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  9. package/dist/mjs/constants/index.js +1 -0
  10. package/dist/mjs/constants/index.js.map +1 -0
  11. package/dist/mjs/data-structures/base/index.js +1 -0
  12. package/dist/mjs/data-structures/base/index.js.map +1 -0
  13. package/dist/mjs/data-structures/base/iterable-element-base.js +1 -0
  14. package/dist/mjs/data-structures/base/iterable-element-base.js.map +1 -0
  15. package/dist/mjs/data-structures/base/iterable-entry-base.js +1 -0
  16. package/dist/mjs/data-structures/base/iterable-entry-base.js.map +1 -0
  17. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +1 -0
  18. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -0
  19. package/dist/mjs/data-structures/binary-tree/avl-tree.js +1 -0
  20. package/dist/mjs/data-structures/binary-tree/avl-tree.js.map +1 -0
  21. package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js +1 -0
  22. package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js.map +1 -0
  23. package/dist/mjs/data-structures/binary-tree/binary-tree.js +1 -0
  24. package/dist/mjs/data-structures/binary-tree/binary-tree.js.map +1 -0
  25. package/dist/mjs/data-structures/binary-tree/bst.js +1 -0
  26. package/dist/mjs/data-structures/binary-tree/bst.js.map +1 -0
  27. package/dist/mjs/data-structures/binary-tree/index.js +1 -0
  28. package/dist/mjs/data-structures/binary-tree/index.js.map +1 -0
  29. package/dist/mjs/data-structures/binary-tree/rb-tree.js +1 -0
  30. package/dist/mjs/data-structures/binary-tree/rb-tree.js.map +1 -0
  31. package/dist/mjs/data-structures/binary-tree/segment-tree.js +1 -0
  32. package/dist/mjs/data-structures/binary-tree/segment-tree.js.map +1 -0
  33. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +1 -0
  34. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js.map +1 -0
  35. package/dist/mjs/data-structures/graph/abstract-graph.js +1 -0
  36. package/dist/mjs/data-structures/graph/abstract-graph.js.map +1 -0
  37. package/dist/mjs/data-structures/graph/directed-graph.js +1 -0
  38. package/dist/mjs/data-structures/graph/directed-graph.js.map +1 -0
  39. package/dist/mjs/data-structures/graph/index.js +1 -0
  40. package/dist/mjs/data-structures/graph/index.js.map +1 -0
  41. package/dist/mjs/data-structures/graph/map-graph.js +1 -0
  42. package/dist/mjs/data-structures/graph/map-graph.js.map +1 -0
  43. package/dist/mjs/data-structures/graph/undirected-graph.js +1 -0
  44. package/dist/mjs/data-structures/graph/undirected-graph.js.map +1 -0
  45. package/dist/mjs/data-structures/hash/hash-map.js +1 -0
  46. package/dist/mjs/data-structures/hash/hash-map.js.map +1 -0
  47. package/dist/mjs/data-structures/hash/index.js +1 -0
  48. package/dist/mjs/data-structures/hash/index.js.map +1 -0
  49. package/dist/mjs/data-structures/heap/heap.d.ts +165 -0
  50. package/dist/mjs/data-structures/heap/heap.js +166 -0
  51. package/dist/mjs/data-structures/heap/heap.js.map +1 -0
  52. package/dist/mjs/data-structures/heap/index.js +1 -0
  53. package/dist/mjs/data-structures/heap/index.js.map +1 -0
  54. package/dist/mjs/data-structures/heap/max-heap.js +1 -0
  55. package/dist/mjs/data-structures/heap/max-heap.js.map +1 -0
  56. package/dist/mjs/data-structures/heap/min-heap.js +1 -0
  57. package/dist/mjs/data-structures/heap/min-heap.js.map +1 -0
  58. package/dist/mjs/data-structures/index.js +1 -0
  59. package/dist/mjs/data-structures/index.js.map +1 -0
  60. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +426 -0
  61. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +431 -2
  62. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js.map +1 -0
  63. package/dist/mjs/data-structures/linked-list/index.js +1 -0
  64. package/dist/mjs/data-structures/linked-list/index.js.map +1 -0
  65. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +1 -0
  66. package/dist/mjs/data-structures/linked-list/singly-linked-list.js.map +1 -0
  67. package/dist/mjs/data-structures/linked-list/skip-linked-list.js +1 -0
  68. package/dist/mjs/data-structures/linked-list/skip-linked-list.js.map +1 -0
  69. package/dist/mjs/data-structures/matrix/index.js +1 -0
  70. package/dist/mjs/data-structures/matrix/index.js.map +1 -0
  71. package/dist/mjs/data-structures/matrix/matrix.js +1 -0
  72. package/dist/mjs/data-structures/matrix/matrix.js.map +1 -0
  73. package/dist/mjs/data-structures/matrix/navigator.js +1 -0
  74. package/dist/mjs/data-structures/matrix/navigator.js.map +1 -0
  75. package/dist/mjs/data-structures/priority-queue/index.js +1 -0
  76. package/dist/mjs/data-structures/priority-queue/index.js.map +1 -0
  77. package/dist/mjs/data-structures/priority-queue/max-priority-queue.js +1 -0
  78. package/dist/mjs/data-structures/priority-queue/max-priority-queue.js.map +1 -0
  79. package/dist/mjs/data-structures/priority-queue/min-priority-queue.js +1 -0
  80. package/dist/mjs/data-structures/priority-queue/min-priority-queue.js.map +1 -0
  81. package/dist/mjs/data-structures/priority-queue/priority-queue.js +1 -0
  82. package/dist/mjs/data-structures/priority-queue/priority-queue.js.map +1 -0
  83. package/dist/mjs/data-structures/queue/deque.js +1 -0
  84. package/dist/mjs/data-structures/queue/deque.js.map +1 -0
  85. package/dist/mjs/data-structures/queue/index.js +1 -0
  86. package/dist/mjs/data-structures/queue/index.js.map +1 -0
  87. package/dist/mjs/data-structures/queue/queue.js +1 -0
  88. package/dist/mjs/data-structures/queue/queue.js.map +1 -0
  89. package/dist/mjs/data-structures/stack/index.js +1 -0
  90. package/dist/mjs/data-structures/stack/index.js.map +1 -0
  91. package/dist/mjs/data-structures/stack/stack.js +1 -0
  92. package/dist/mjs/data-structures/stack/stack.js.map +1 -0
  93. package/dist/mjs/data-structures/tree/index.js +1 -0
  94. package/dist/mjs/data-structures/tree/index.js.map +1 -0
  95. package/dist/mjs/data-structures/tree/tree.js +1 -0
  96. package/dist/mjs/data-structures/tree/tree.js.map +1 -0
  97. package/dist/mjs/data-structures/trie/index.js +1 -0
  98. package/dist/mjs/data-structures/trie/index.js.map +1 -0
  99. package/dist/mjs/data-structures/trie/trie.js +1 -0
  100. package/dist/mjs/data-structures/trie/trie.js.map +1 -0
  101. package/dist/mjs/index.js +1 -0
  102. package/dist/mjs/index.js.map +1 -0
  103. package/dist/mjs/interfaces/binary-tree.js +1 -0
  104. package/dist/mjs/interfaces/binary-tree.js.map +1 -0
  105. package/dist/mjs/interfaces/doubly-linked-list.js +1 -0
  106. package/dist/mjs/interfaces/doubly-linked-list.js.map +1 -0
  107. package/dist/mjs/interfaces/graph.js +1 -0
  108. package/dist/mjs/interfaces/graph.js.map +1 -0
  109. package/dist/mjs/interfaces/heap.js +1 -0
  110. package/dist/mjs/interfaces/heap.js.map +1 -0
  111. package/dist/mjs/interfaces/index.js +1 -0
  112. package/dist/mjs/interfaces/index.js.map +1 -0
  113. package/dist/mjs/interfaces/navigator.js +1 -0
  114. package/dist/mjs/interfaces/navigator.js.map +1 -0
  115. package/dist/mjs/interfaces/priority-queue.js +1 -0
  116. package/dist/mjs/interfaces/priority-queue.js.map +1 -0
  117. package/dist/mjs/interfaces/segment-tree.js +1 -0
  118. package/dist/mjs/interfaces/segment-tree.js.map +1 -0
  119. package/dist/mjs/interfaces/singly-linked-list.js +1 -0
  120. package/dist/mjs/interfaces/singly-linked-list.js.map +1 -0
  121. package/dist/mjs/types/common.js +1 -0
  122. package/dist/mjs/types/common.js.map +1 -0
  123. package/dist/mjs/types/data-structures/base/base.js +1 -0
  124. package/dist/mjs/types/data-structures/base/base.js.map +1 -0
  125. package/dist/mjs/types/data-structures/base/index.js +1 -0
  126. package/dist/mjs/types/data-structures/base/index.js.map +1 -0
  127. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.js +1 -0
  128. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -0
  129. package/dist/mjs/types/data-structures/binary-tree/avl-tree.js +1 -0
  130. package/dist/mjs/types/data-structures/binary-tree/avl-tree.js.map +1 -0
  131. package/dist/mjs/types/data-structures/binary-tree/binary-indexed-tree.js +1 -0
  132. package/dist/mjs/types/data-structures/binary-tree/binary-indexed-tree.js.map +1 -0
  133. package/dist/mjs/types/data-structures/binary-tree/binary-tree.js +1 -0
  134. package/dist/mjs/types/data-structures/binary-tree/binary-tree.js.map +1 -0
  135. package/dist/mjs/types/data-structures/binary-tree/bst.js +1 -0
  136. package/dist/mjs/types/data-structures/binary-tree/bst.js.map +1 -0
  137. package/dist/mjs/types/data-structures/binary-tree/index.js +1 -0
  138. package/dist/mjs/types/data-structures/binary-tree/index.js.map +1 -0
  139. package/dist/mjs/types/data-structures/binary-tree/rb-tree.js +1 -0
  140. package/dist/mjs/types/data-structures/binary-tree/rb-tree.js.map +1 -0
  141. package/dist/mjs/types/data-structures/binary-tree/segment-tree.js +1 -0
  142. package/dist/mjs/types/data-structures/binary-tree/segment-tree.js.map +1 -0
  143. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.js +1 -0
  144. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.js.map +1 -0
  145. package/dist/mjs/types/data-structures/graph/abstract-graph.js +1 -0
  146. package/dist/mjs/types/data-structures/graph/abstract-graph.js.map +1 -0
  147. package/dist/mjs/types/data-structures/graph/directed-graph.js +1 -0
  148. package/dist/mjs/types/data-structures/graph/directed-graph.js.map +1 -0
  149. package/dist/mjs/types/data-structures/graph/index.js +1 -0
  150. package/dist/mjs/types/data-structures/graph/index.js.map +1 -0
  151. package/dist/mjs/types/data-structures/graph/map-graph.js +1 -0
  152. package/dist/mjs/types/data-structures/graph/map-graph.js.map +1 -0
  153. package/dist/mjs/types/data-structures/graph/undirected-graph.js +1 -0
  154. package/dist/mjs/types/data-structures/graph/undirected-graph.js.map +1 -0
  155. package/dist/mjs/types/data-structures/hash/hash-map.js +1 -0
  156. package/dist/mjs/types/data-structures/hash/hash-map.js.map +1 -0
  157. package/dist/mjs/types/data-structures/hash/index.js +1 -0
  158. package/dist/mjs/types/data-structures/hash/index.js.map +1 -0
  159. package/dist/mjs/types/data-structures/heap/heap.js +1 -0
  160. package/dist/mjs/types/data-structures/heap/heap.js.map +1 -0
  161. package/dist/mjs/types/data-structures/heap/index.js +1 -0
  162. package/dist/mjs/types/data-structures/heap/index.js.map +1 -0
  163. package/dist/mjs/types/data-structures/heap/max-heap.js +1 -0
  164. package/dist/mjs/types/data-structures/heap/max-heap.js.map +1 -0
  165. package/dist/mjs/types/data-structures/heap/min-heap.js +1 -0
  166. package/dist/mjs/types/data-structures/heap/min-heap.js.map +1 -0
  167. package/dist/mjs/types/data-structures/index.js +1 -0
  168. package/dist/mjs/types/data-structures/index.js.map +1 -0
  169. package/dist/mjs/types/data-structures/linked-list/doubly-linked-list.js +1 -0
  170. package/dist/mjs/types/data-structures/linked-list/doubly-linked-list.js.map +1 -0
  171. package/dist/mjs/types/data-structures/linked-list/index.js +1 -0
  172. package/dist/mjs/types/data-structures/linked-list/index.js.map +1 -0
  173. package/dist/mjs/types/data-structures/linked-list/singly-linked-list.js +1 -0
  174. package/dist/mjs/types/data-structures/linked-list/singly-linked-list.js.map +1 -0
  175. package/dist/mjs/types/data-structures/linked-list/skip-linked-list.js +1 -0
  176. package/dist/mjs/types/data-structures/linked-list/skip-linked-list.js.map +1 -0
  177. package/dist/mjs/types/data-structures/matrix/index.js +1 -0
  178. package/dist/mjs/types/data-structures/matrix/index.js.map +1 -0
  179. package/dist/mjs/types/data-structures/matrix/matrix.js +1 -0
  180. package/dist/mjs/types/data-structures/matrix/matrix.js.map +1 -0
  181. package/dist/mjs/types/data-structures/matrix/navigator.js +1 -0
  182. package/dist/mjs/types/data-structures/matrix/navigator.js.map +1 -0
  183. package/dist/mjs/types/data-structures/priority-queue/index.js +1 -0
  184. package/dist/mjs/types/data-structures/priority-queue/index.js.map +1 -0
  185. package/dist/mjs/types/data-structures/priority-queue/max-priority-queue.js +1 -0
  186. package/dist/mjs/types/data-structures/priority-queue/max-priority-queue.js.map +1 -0
  187. package/dist/mjs/types/data-structures/priority-queue/min-priority-queue.js +1 -0
  188. package/dist/mjs/types/data-structures/priority-queue/min-priority-queue.js.map +1 -0
  189. package/dist/mjs/types/data-structures/priority-queue/priority-queue.js +1 -0
  190. package/dist/mjs/types/data-structures/priority-queue/priority-queue.js.map +1 -0
  191. package/dist/mjs/types/data-structures/queue/deque.js +1 -0
  192. package/dist/mjs/types/data-structures/queue/deque.js.map +1 -0
  193. package/dist/mjs/types/data-structures/queue/index.js +1 -0
  194. package/dist/mjs/types/data-structures/queue/index.js.map +1 -0
  195. package/dist/mjs/types/data-structures/queue/queue.js +1 -0
  196. package/dist/mjs/types/data-structures/queue/queue.js.map +1 -0
  197. package/dist/mjs/types/data-structures/stack/index.js +1 -0
  198. package/dist/mjs/types/data-structures/stack/index.js.map +1 -0
  199. package/dist/mjs/types/data-structures/stack/stack.js +1 -0
  200. package/dist/mjs/types/data-structures/stack/stack.js.map +1 -0
  201. package/dist/mjs/types/data-structures/tree/index.js +1 -0
  202. package/dist/mjs/types/data-structures/tree/index.js.map +1 -0
  203. package/dist/mjs/types/data-structures/tree/tree.js +1 -0
  204. package/dist/mjs/types/data-structures/tree/tree.js.map +1 -0
  205. package/dist/mjs/types/data-structures/trie/index.js +1 -0
  206. package/dist/mjs/types/data-structures/trie/index.js.map +1 -0
  207. package/dist/mjs/types/data-structures/trie/trie.js +1 -0
  208. package/dist/mjs/types/data-structures/trie/trie.js.map +1 -0
  209. package/dist/mjs/types/index.js +1 -0
  210. package/dist/mjs/types/index.js.map +1 -0
  211. package/dist/mjs/types/utils/index.js +1 -0
  212. package/dist/mjs/types/utils/index.js.map +1 -0
  213. package/dist/mjs/types/utils/utils.js +1 -0
  214. package/dist/mjs/types/utils/utils.js.map +1 -0
  215. package/dist/mjs/types/utils/validate-type.js +1 -0
  216. package/dist/mjs/types/utils/validate-type.js.map +1 -0
  217. package/dist/mjs/utils/index.js +1 -0
  218. package/dist/mjs/utils/index.js.map +1 -0
  219. package/dist/mjs/utils/number.js +1 -0
  220. package/dist/mjs/utils/number.js.map +1 -0
  221. package/dist/mjs/utils/utils.js +1 -0
  222. package/dist/mjs/utils/utils.js.map +1 -0
  223. package/dist/umd/data-structure-typed.js +2 -2
  224. package/dist/umd/data-structure-typed.min.js +1 -1
  225. package/dist/umd/data-structure-typed.min.js.map +1 -1
  226. package/package.json +13 -11
  227. package/src/data-structures/heap/heap.ts +165 -0
  228. package/src/data-structures/linked-list/doubly-linked-list.ts +428 -2
  229. package/test/unit/data-structures/graph/directed-graph.test.ts +14 -0
  230. package/test/unit/data-structures/heap/heap.test.ts +173 -0
  231. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +434 -0
  232. package/test/utils/array.ts +1 -1
  233. package/test/utils/string.ts +49 -1
  234. package/testToExample.ts +215 -0
  235. package/tsconfig-mjs.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/types/data-structures/tree/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../../../src/types/data-structures/tree/tree.ts"],"names":[],"mappings":""}
@@ -1 +1,2 @@
1
1
  export * from './trie';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/types/data-structures/trie/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=trie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trie.js","sourceRoot":"","sources":["../../../../../src/types/data-structures/trie/trie.ts"],"names":[],"mappings":""}
@@ -1,3 +1,4 @@
1
1
  export * from './data-structures';
2
2
  export * from './common';
3
3
  export * from './utils';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './utils';
2
2
  export * from './validate-type';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/types/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/types/utils/utils.ts"],"names":[],"mappings":""}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=validate-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-type.js","sourceRoot":"","sources":["../../../../src/types/utils/validate-type.ts"],"names":[],"mappings":""}
@@ -1,2 +1,3 @@
1
1
  export * from './utils';
2
2
  export * from './number';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
@@ -18,3 +18,4 @@ export function toBinaryString(num, digit = 32) {
18
18
  binaryString = binaryString.padStart(digit, '0');
19
19
  return binaryString;
20
20
  }
21
+ //# sourceMappingURL=number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../../src/utils/number.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,KAAK,GAAG,EAAE;IACpD,kCAAkC;IAClC,IAAI,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,+GAA+G;IAE3J,uDAAuD;IACvD,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEjD,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -249,3 +249,4 @@ export function isComparable(value, isForceObjectComparable = false) {
249
249
  return false;
250
250
  return isPrimitiveComparable(comparableValue);
251
251
  }
252
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,sCAAsC,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;QACvE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAChC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACrC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,UAAa,KAAU,EAAE,SAA0D;IAC5G,IAAI,CAAC,GAAG,CAAC,CAAC,EACR,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3C,GAAG,EAAE,CAAC;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,SAAc,EAAE,EAAE;IACxC,OAAO,OAAO,SAAS,KAAK,UAAU,IAAI,SAAS,CAAC,SAAS,KAAK,YAAY,CAAC;AACjF,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAa,EAAS,EAAE;IAC9C,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IACzB,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;IAC/B,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAE;IACtC,MAAM,IAAI,GAAG,CAAC,GAAG,IAA4B,EAAqB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAEhG,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,IAA4B,EAAE,EAAE;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAEzB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACvD,MAAM,GAAG,MAAM,EAAE,CAAC;QACpB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,EAAE,IAAI,EAAE,CACT,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAc,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAiC,EAA0B,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAE1G,OAAO,MAAM,CAAC,MAAM,CAClB,KAAK,EAAE,GAAG,IAAiC,EAAE,EAAE;QAC7C,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAE/B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACvD,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,EAAE,IAAI,EAAE,CACT,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAU,EAAE;IAC9C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,OAAO,GAAG,sBAAsB,EAAQ,EAAE;IAC5G,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG;QAAE,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,GAAG,0BAA0B,EAAQ,EAAE;IAC5E,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAmB,EAAE;IAC3D,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;IAC/B,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,SAAS,KAAK,UAAU,CAAC;AAChF,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,aAAqB,EAAE,QAAgB,EAAE,EAAE,CAC9E,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAAgB,EAAE,EAAE,EAAE;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;AACnD,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAS,qBAAqB,CAAC,KAAc;IAC3C,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;IAC/B,IAAI,SAAS,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,CAAC;AACrF,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,GAAW;IACvC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,aAAa,KAAK,GAAG,EAAE,CAAC;YAC1B,IAAI,qBAAqB,CAAC,aAAa,CAAC;gBAAE,OAAO,aAAa,CAAC;YAC/D,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,IAAI;gBAAE,OAAO,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,YAAY,KAAK,iBAAiB;YAAE,OAAO,YAAY,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,uBAAuB,GAAG,KAAK;IAC1E,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,qBAAqB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,IAAI,uBAAuB;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5E,OAAO,qBAAqB,CAAC,eAAe,CAAC,CAAC;AAChD,CAAC"}
@@ -2485,8 +2485,8 @@ var dataStructureTyped = (() => {
2485
2485
  } else {
2486
2486
  const prevNode = node.prev;
2487
2487
  const nextNode = node.next;
2488
- prevNode.next = nextNode;
2489
- nextNode.prev = prevNode;
2488
+ if (prevNode) prevNode.next = nextNode;
2489
+ if (nextNode) nextNode.prev = prevNode;
2490
2490
  this._size--;
2491
2491
  }
2492
2492
  return true;
@@ -1,4 +1,4 @@
1
- "use strict";var dataStructureTyped=(()=>{var oe=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames,Qe=Object.getOwnPropertySymbols;var Ge=Object.prototype.hasOwnProperty,$e=Object.prototype.propertyIsEnumerable;var Ee=(l,n)=>(n=Symbol[l])?n:Symbol.for("Symbol."+l),et=l=>{throw TypeError(l)};var me=(l,n,e)=>n in l?oe(l,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):l[n]=e,M=(l,n)=>{for(var e in n||(n={}))Ge.call(n,e)&&me(l,e,n[e]);if(Qe)for(var e of Qe(n))$e.call(n,e)&&me(l,e,n[e]);return l};var tt=(l,n)=>{for(var e in n)oe(l,e,{get:n[e],enumerable:!0})},it=(l,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of Ze(n))!Ge.call(l,i)&&i!==e&&oe(l,i,{get:()=>n[i],enumerable:!(t=Je(n,i))||t.enumerable});return l};var rt=l=>it(oe({},"__esModule",{value:!0}),l);var d=(l,n,e)=>me(l,typeof n!="symbol"?n+"":n,e);var We=(l,n,e)=>new Promise((t,i)=>{var r=a=>{try{o(e.next(a))}catch(h){i(h)}},s=a=>{try{o(e.throw(a))}catch(h){i(h)}},o=a=>a.done?t(a.value):Promise.resolve(a.value).then(r,s);o((e=e.apply(l,n)).next())}),nt=function(l,n){this[0]=l,this[1]=n};var C=l=>{var n=l[Ee("asyncIterator")],e=!1,t,i={};return n==null?(n=l[Ee("iterator")](),t=r=>i[r]=s=>n[r](s)):(n=n.call(l),t=r=>i[r]=s=>{if(e){if(e=!1,r==="throw")throw s;return s}return e=!0,{done:!1,value:new nt(new Promise(o=>{var a=n[r](s);a instanceof Object||et("Object expected"),o(a)}),1)}}),i[Ee("iterator")]=()=>i,t("next"),"throw"in n?t("throw"):i.throw=r=>{throw r},"return"in n&&t("return"),i};var lt={};tt(lt,{AVLTree:()=>ie,AVLTreeMultiMap:()=>Se,AVLTreeMultiMapNode:()=>ne,AVLTreeNode:()=>U,AbstractEdge:()=>S,AbstractGraph:()=>H,AbstractVertex:()=>k,BST:()=>j,BSTNode:()=>L,BinaryIndexedTree:()=>Be,BinaryTree:()=>te,BinaryTreeNode:()=>A,Character:()=>pe,DFSOperation:()=>Ie,Deque:()=>Ke,DirectedEdge:()=>W,DirectedGraph:()=>ee,DirectedVertex:()=>P,DoublyLinkedList:()=>xe,DoublyLinkedListNode:()=>v,FibonacciHeap:()=>De,FibonacciHeapNode:()=>le,HashMap:()=>Oe,Heap:()=>w,IterableElementBase:()=>T,IterableEntryBase:()=>F,LinkedHashMap:()=>Re,LinkedListQueue:()=>ke,MapEdge:()=>ce,MapGraph:()=>Fe,MapVertex:()=>fe,Matrix:()=>Pe,MaxHeap:()=>ve,MaxPriorityQueue:()=>He,MinHeap:()=>we,MinPriorityQueue:()=>ze,Navigator:()=>je,PriorityQueue:()=>Q,Queue:()=>K,RedBlackTree:()=>re,RedBlackTreeNode:()=>q,SegmentTree:()=>Le,SegmentTreeNode:()=>X,SinglyLinkedList:()=>Z,SinglyLinkedListNode:()=>D,SkipList:()=>Me,SkipListNode:()=>$,Stack:()=>Te,THUNK_SYMBOL:()=>be,TreeMultiMap:()=>Ae,TreeMultiMapNode:()=>se,TreeNode:()=>qe,Trie:()=>Ue,TrieNode:()=>Y,UndirectedEdge:()=>de,UndirectedGraph:()=>Ce,UndirectedVertex:()=>ue,arrayRemove:()=>I,calcMinUnitsRequired:()=>he,getMSB:()=>Ve,isComparable:()=>J,isThunk:()=>Ne,isWeakKey:()=>G,rangeCheck:()=>B,roundFixed:()=>at,throwRangeError:()=>ot,toBinaryString:()=>ht,toThunk:()=>ye,trampoline:()=>ae,trampolineAsync:()=>st,uuidV4:()=>_e});var F=class{*[Symbol.iterator](...n){yield*C(this._getIterator(...n))}*entries(){for(let n of this)yield n}*keys(){for(let n of this)yield n[0]}*values(){for(let n of this)yield n[1]}every(n,e){let t=0;for(let i of this)if(!n.call(e,i[1],i[0],t++,this))return!1;return!0}some(n,e){let t=0;for(let i of this)if(n.call(e,i[1],i[0],t++,this))return!0;return!1}forEach(n,e){let t=0;for(let i of this){let[r,s]=i;n.call(e,s,r,t++,this)}}find(n,e){let t=0;for(let i of this){let[r,s]=i;if(n.call(e,s,r,t++,this))return i}}has(n){for(let e of this){let[t]=e;if(t===n)return!0}return!1}hasValue(n){for(let[,e]of this)if(e===n)return!0;return!1}get(n){for(let e of this){let[t,i]=e;if(t===n)return i}}reduce(n,e){let t=e,i=0;for(let r of this){let[s,o]=r;t=n(t,o,s,i++,this)}return t}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var T=class{constructor(n){d(this,"_toElementFn");if(n){let{toElementFn:e}=n;if(typeof e=="function")this._toElementFn=e;else if(e)throw new TypeError("toElementFn must be a function type")}}get toElementFn(){return this._toElementFn}*[Symbol.iterator](...n){yield*C(this._getIterator(...n))}*values(){for(let n of this)yield n}every(n,e){let t=0;for(let i of this)if(!n.call(e,i,t++,this))return!1;return!0}some(n,e){let t=0;for(let i of this)if(n.call(e,i,t++,this))return!0;return!1}forEach(n,e){let t=0;for(let i of this)n.call(e,i,t++,this)}find(n,e){let t=0;for(let i of this)if(n.call(e,i,t++,this))return i}has(n){for(let e of this)if(e===n)return!0;return!1}reduce(n,e){let t=e,i=0;for(let r of this)t=n(t,r,i++,this);return t}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var _e=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(l){let n=Math.random()*16|0;return(l=="x"?n:n&3|8).toString(16)})},I=function(l,n){let e=-1,t=l?l.length:0,i=[];for(;++e<t;){let r=l[e];n(r,e,l)&&(i.push(r),Array.prototype.splice.call(l,e--,1),t--)}return i},be=Symbol("thunk"),Ne=l=>typeof l=="function"&&l.__THUNK__===be,ye=l=>{let n=()=>l();return n.__THUNK__=be,n},ae=l=>Object.assign((...e)=>{let t=l(...e);for(;Ne(t)&&typeof t=="function";)t=t();return t},{cont:(...e)=>ye(()=>l(...e))}),st=l=>Object.assign((...e)=>We(void 0,null,function*(){let t=yield l(...e);for(;Ne(t)&&typeof t=="function";)t=yield t();return t}),{cont:(...e)=>ye(()=>l(...e))}),Ve=l=>l<=0?0:1<<31-Math.clz32(l),B=(l,n,e,t="Index out of bounds.")=>{if(l<n||l>e)throw new RangeError(t)},ot=(l="The value is off-limits.")=>{throw new RangeError(l)},G=l=>{let n=typeof l;return n==="object"&&l!==null||n==="function"},he=(l,n)=>Math.floor((l+n-1)/n),at=(l,n=10)=>{let e=Math.pow(10,n);return Math.round(l*e)/e};function ge(l){let n=typeof l;return n==="number"?!Number.isNaN(l):n==="bigint"||n==="string"||n==="boolean"}function Xe(l){if(typeof l.valueOf=="function"){let n=l.valueOf();if(n!==l){if(ge(n))return n;if(typeof n=="object"&&n!==null)return Xe(n)}}if(typeof l.toString=="function"){let n=l.toString();if(n!=="[object Object]")return n}return null}function J(l,n=!1){if(l==null)return!1;if(ge(l))return!0;if(typeof l!="object")return!1;if(l instanceof Date)return!Number.isNaN(l.getTime());if(n)return!0;let e=Xe(l);return e==null?!1:ge(e)}function ht(l,n=32){let e=(l>>>0).toString(2);return e=e.padStart(n,"0"),e}var Oe=class l extends F{constructor(e=[],t){super();d(this,"_store",{});d(this,"_objMap",new Map);d(this,"_toEntryFn");d(this,"_size",0);d(this,"_hashFn",e=>String(e));if(t){let{hashFn:i,toEntryFn:r}=t;i&&(this._hashFn=i),r&&(this._toEntryFn=r)}e&&this.setMany(e)}get store(){return this._store}get objMap(){return this._objMap}get toEntryFn(){return this._toEntryFn}get size(){return this._size}get hashFn(){return this._hashFn}isEntry(e){return Array.isArray(e)&&e.length===2}isEmpty(){return this._size===0}clear(){this._store={},this._objMap.clear(),this._size=0}set(e,t){if(this._isObjKey(e))this.objMap.has(e)||this._size++,this.objMap.set(e,t);else{let i=this._getNoObjKey(e);this.store[i]===void 0&&this._size++,this._store[i]={key:e,value:t}}return!0}setMany(e){let t=[];for(let i of e){let r,s;if(this.isEntry(i))r=i[0],s=i[1];else if(this._toEntryFn){let o=this._toEntryFn(i);r=o[0],s=o[1]}r!==void 0&&s!==void 0&&t.push(this.set(r,s))}return t}get(e){var t;if(this._isObjKey(e))return this.objMap.get(e);{let i=this._getNoObjKey(e);return(t=this._store[i])==null?void 0:t.value}}has(e){return this._isObjKey(e)?this.objMap.has(e):this._getNoObjKey(e)in this.store}delete(e){if(this._isObjKey(e))return this.objMap.has(e)&&this._size--,this.objMap.delete(e);{let t=this._getNoObjKey(e);return t in this.store?(delete this.store[t],this._size--,!0):!1}}clone(){return new l(this,{hashFn:this._hashFn,toEntryFn:this._toEntryFn})}map(e,t){let i=new l,r=0;for(let[s,o]of this)i.set(s,e.call(t,o,s,r++,this));return i}filter(e,t){let i=new l,r=0;for(let[s,o]of this)e.call(t,o,s,r++,this)&&i.set(s,o);return i}*_getIterator(){for(let e of Object.values(this.store))yield[e.key,e.value];for(let e of this.objMap)yield e}_isObjKey(e){let t=typeof e;return(t==="object"||t==="function")&&e!==null}_getNoObjKey(e){let t=typeof e,i;return t!=="string"&&t!=="number"&&t!=="symbol"?i=this._hashFn(e):i=e,i}},Re=class l extends F{constructor(e=[],t){super();d(this,"_sentinel");d(this,"_hashFn",e=>String(e));d(this,"_objHashFn",e=>e);d(this,"_noObjMap",{});d(this,"_objMap",new WeakMap);d(this,"_head");d(this,"_tail");d(this,"_toEntryFn",e=>{if(this.isEntry(e))return e;throw new Error("If the provided entryOrRawElements does not adhere to the [key, value] type format, the toEntryFn in the constructor's options parameter needs to specified.")});d(this,"_size",0);if(this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel,t){let{hashFn:i,objHashFn:r,toEntryFn:s}=t;i&&(this._hashFn=i),r&&(this._objHashFn=r),s&&(this._toEntryFn=s)}e&&this.setMany(e)}get hashFn(){return this._hashFn}get objHashFn(){return this._objHashFn}get noObjMap(){return this._noObjMap}get objMap(){return this._objMap}get head(){return this._head}get tail(){return this._tail}get toEntryFn(){return this._toEntryFn}get size(){return this._size}get first(){if(this._size!==0)return[this.head.key,this.head.value]}get last(){if(this._size!==0)return[this.tail.key,this.tail.value]}*begin(){let e=this.head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}*reverseBegin(){let e=this.tail;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.prev}set(e,t){let i,r=!this.has(e);if(G(e)){let s=this._objHashFn(e);i=this.objMap.get(s),!i&&r?(i={key:s,value:t,prev:this.tail,next:this._sentinel},this.objMap.set(s,i)):i&&(i.value=t)}else{let s=this._hashFn(e);i=this.noObjMap[s],!i&&r?this.noObjMap[s]=i={key:e,value:t,prev:this.tail,next:this._sentinel}:i&&(i.value=t)}return i&&r&&(this._size===0?(this._head=i,this._sentinel.next=i):(this.tail.next=i,i.prev=this.tail),this._tail=i,this._sentinel.prev=i,this._size++),!0}setMany(e){let t=[];for(let i of e){let r,s;if(this.isEntry(i))r=i[0],s=i[1];else if(this._toEntryFn){let o=this._toEntryFn(i);r=o[0],s=o[1]}r!==void 0&&s!==void 0&&t.push(this.set(r,s))}return t}has(e){if(G(e)){let t=this._objHashFn(e);return this.objMap.has(t)}else return this._hashFn(e)in this.noObjMap}get(e){if(G(e)){let t=this._objHashFn(e),i=this.objMap.get(t);return i?i.value:void 0}else{let t=this._hashFn(e),i=this.noObjMap[t];return i?i.value:void 0}}at(e){B(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return t.value}delete(e){let t;if(G(e)){let i=this._objHashFn(e);if(t=this.objMap.get(i),!t)return!1;this.objMap.delete(i)}else{let i=this._hashFn(e);if(t=this.noObjMap[i],!t)return!1;delete this.noObjMap[i]}return this._deleteNode(t),!0}deleteAt(e){B(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return this._deleteNode(t)}isEmpty(){return this._size===0}isEntry(e){return Array.isArray(e)&&e.length===2}clear(){this._noObjMap={},this._size=0,this._head=this._tail=this._sentinel.prev=this._sentinel.next=this._sentinel}clone(){let e=new l([],{hashFn:this._hashFn,objHashFn:this._objHashFn});for(let t of this){let[i,r]=t;e.set(i,r)}return e}filter(e,t){let i=new l,r=0;for(let[s,o]of this)e.call(t,o,s,r,this)&&i.set(s,o),r++;return i}map(e,t){let i=new l,r=0;for(let[s,o]of this){let a=e.call(t,o,s,r,this);i.set(s,a),r++}return i}*_getIterator(){let e=this.head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}_deleteNode(e){let{prev:t,next:i}=e;return t.next=i,i.prev=t,e===this.head&&(this._head=i),e===this.tail&&(this._tail=t),this._size-=1,!0}};var D=class{constructor(n){d(this,"_value");d(this,"_next");this._value=n,this._next=void 0}get value(){return this._value}set value(n){this._value=n}get next(){return this._next}set next(n){this._next=n}},Z=class l extends T{constructor(e=[],t){super(t);d(this,"_head");d(this,"_tail");d(this,"_size",0);if(e)for(let i of e)this.toElementFn?this.push(this.toElementFn(i)):this.push(i)}get head(){return this._head}get tail(){return this._tail}get first(){var e;return(e=this.head)==null?void 0:e.value}get last(){var e;return(e=this.tail)==null?void 0:e.value}get size(){return this._size}static fromArray(e){let t=new l;for(let i of e)t.push(i);return t}push(e){let t=new D(e);return this.head?(this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._size++,!0}pop(){if(!this.head)return;if(this.head===this.tail){let i=this.head.value;return this._head=void 0,this._tail=void 0,this._size--,i}let e=this.head;for(;e.next!==this.tail;)e=e.next;let t=this.tail.value;return e.next=void 0,this._tail=e,this._size--,t}shift(){if(!this.head)return;let e=this.head;return this._head=this.head.next,this._size--,e.value}unshift(e){let t=new D(e);return this.head?(t.next=this.head,this._head=t):(this._head=t,this._tail=t),this._size++,!0}at(e){if(e<0||e>=this._size)return;let t=this.head;for(let i=0;i<e;i++)t=t.next;return t.value}getNodeAt(e){let t=this.head;for(let i=0;i<e;i++)t=t.next;return t}deleteAt(e){if(e<0||e>=this._size)return!1;if(e===0)return this.shift(),!0;if(e===this._size-1)return this.pop(),!0;let t=this.getNodeAt(e-1),i=t.next;return t.next=i.next,this._size--,!0}delete(e){if(e===void 0)return!1;let t;e instanceof D?t=e.value:t=e;let i=this.head,r;for(;i;){if(i.value===t)return r===void 0?(this._head=i.next,i===this.tail&&(this._tail=void 0)):(r.next=i.next,i===this.tail&&(this._tail=r)),this._size--,!0;r=i,i=i.next}return!1}addAt(e,t){if(e<0||e>this._size)return!1;if(e===0)return this.unshift(t),!0;if(e===this._size)return this.push(t),!0;let i=new D(t),r=this.getNodeAt(e-1);return i.next=r.next,r.next=i,this._size++,!0}isEmpty(){return this._size===0}clear(){this._head=void 0,this._tail=void 0,this._size=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 this;let e,t=this.head,i;for(;t;)i=t.next,t.next=e,e=t,t=i;return[this._head,this._tail]=[this.tail,this.head],this}indexOf(e){let t=0,i=this.head;for(;i;){if(i.value===e)return t;t++,i=i.next}return-1}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}}addBefore(e,t){if(!this.head)return!1;let i;if(e instanceof D?i=e.value:i=e,this.head.value===i)return this.unshift(t),!0;let r=this.head;for(;r.next;){if(r.next.value===i){let s=new D(t);return s.next=r.next,r.next=s,this._size++,!0}r=r.next}return!1}addAfter(e,t){let i;if(e instanceof D?i=e:i=this.getNode(e),i){let r=new D(t);return r.next=i.next,i.next=r,i===this.tail&&(this._tail=r),this._size++,!0}return!1}countOccurrences(e){let t=0,i=this.head;for(;i;)i.value===e&&t++,i=i.next;return t}clone(){return new l(this,{toElementFn:this.toElementFn})}filter(e,t){let i=new l([],{toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}};var v=class{constructor(n){d(this,"_value");d(this,"_next");d(this,"_prev");this._value=n,this._next=void 0,this._prev=void 0}get value(){return this._value}set value(n){this._value=n}get next(){return this._next}set next(n){this._next=n}get prev(){return this._prev}set prev(n){this._prev=n}},xe=class l extends T{constructor(e=[],t){super(t);d(this,"_head");d(this,"_tail");d(this,"_size");if(this._head=void 0,this._tail=void 0,this._size=0,e)for(let i of e)this.toElementFn?this.push(this.toElementFn(i)):this.push(i)}get head(){return this._head}get tail(){return this._tail}get size(){return this._size}get first(){var e;return(e=this.head)==null?void 0:e.value}get last(){var e;return(e=this.tail)==null?void 0:e.value}static fromArray(e){return new l(e)}push(e){let t=new v(e);return this.head?(t.prev=this.tail,this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._size++,!0}pop(){if(!this.tail)return;let e=this.tail;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._tail=e.prev,this.tail.next=void 0),this._size--,e.value}shift(){if(!this.head)return;let e=this.head;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._head=e.next,this.head.prev=void 0),this._size--,e.value}unshift(e){let t=new v(e);return this.head?(t.next=this.head,this.head.prev=t,this._head=t):(this._head=t,this._tail=t),this._size++,!0}at(e){if(e<0||e>=this._size)return;let t=this.head;for(let i=0;i<e;i++)t=t.next;return t.value}getNodeAt(e){if(e<0||e>=this._size)return;let t=this.head;for(let i=0;i<e;i++)t=t.next;return t}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}}addAt(e,t){if(e<0||e>this._size)return!1;if(e===0)return this.unshift(t),!0;if(e===this._size)return this.push(t),!0;let i=new v(t),r=this.getNodeAt(e-1),s=r.next;return i.prev=r,i.next=s,r.next=i,s.prev=i,this._size++,!0}addBefore(e,t){let i;if(e instanceof v?i=e:i=this.getNode(e),i){let r=new v(t);return r.prev=i.prev,i.prev&&(i.prev.next=r),r.next=i,i.prev=r,i===this.head&&(this._head=r),this._size++,!0}return!1}addAfter(e,t){let i;if(e instanceof v?i=e:i=this.getNode(e),i){let r=new v(t);return r.next=i.next,i.next&&(i.next.prev=r),r.prev=i,i.next=r,i===this.tail&&(this._tail=r),this._size++,!0}return!1}deleteAt(e){if(e<0||e>=this._size)return!1;if(e===0)return this.shift(),!0;if(e===this._size-1)return this.pop(),!0;let t=this.getNodeAt(e),i=t.prev,r=t.next;return i.next=r,r.prev=i,this._size--,!0}delete(e){let t;if(e instanceof v?t=e:t=this.getNode(e),t){if(t===this.head)this.shift();else if(t===this.tail)this.pop();else{let i=t.prev,r=t.next;i.next=r,r.prev=i,this._size--}return!0}return!1}isEmpty(){return this._size===0}clear(){this._head=void 0,this._tail=void 0,this._size=0}indexOf(e){let t=0,i=this.head;for(;i;){if(i.value===e)return t;t++,i=i.next}return-1}findBackward(e){let t=this.tail;for(;t;){if(e(t.value))return t.value;t=t.prev}}reverse(){let e=this.head;for([this._head,this._tail]=[this.tail,this.head];e;){let t=e.next;[e.prev,e.next]=[e.next,e.prev],e=t}return this}toArray(){let e=[],t=this.head;for(;t;)e.push(t.value),t=t.next;return e}toReversedArray(){let e=[],t=this.tail;for(;t;)e.push(t.value),t=t.prev;return e}clone(){return new l(this)}filter(e,t){let i=new l([],{toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}};var $=class{constructor(n,e,t){d(this,"key");d(this,"value");d(this,"forward");this.key=n,this.value=e,this.forward=new Array(t)}},Me=class{constructor(n=[],e){d(this,"_head",new $(void 0,void 0,this.maxLevel));d(this,"_level",0);d(this,"_maxLevel",16);d(this,"_probability",.5);if(e){let{maxLevel:t,probability:i}=e;typeof t=="number"&&(this._maxLevel=t),typeof i=="number"&&(this._probability=i)}if(n)for(let[t,i]of n)this.add(t,i)}get head(){return this._head}get level(){return this._level}get maxLevel(){return this._maxLevel}get probability(){return this._probability}get first(){let n=this.head.forward[0];return n?n.value:void 0}get last(){let n=this.head;for(let e=this.level-1;e>=0;e--)for(;n.forward[e];)n=n.forward[e];return n.value}add(n,e){let t=new $(n,e,this._randomLevel()),i=new Array(this.maxLevel).fill(this.head),r=this.head;for(let s=this.level-1;s>=0;s--){for(;r.forward[s]&&r.forward[s].key<n;)r=r.forward[s];i[s]=r}for(let s=0;s<t.forward.length;s++)t.forward[s]=i[s].forward[s],i[s].forward[s]=t;t.forward[0]||(this._level=Math.max(this.level,t.forward.length))}get(n){let e=this.head;for(let t=this.level-1;t>=0;t--)for(;e.forward[t]&&e.forward[t].key<n;)e=e.forward[t];if(e=e.forward[0],e&&e.key===n)return e.value}has(n){return this.get(n)!==void 0}delete(n){let e=new Array(this.maxLevel).fill(this.head),t=this.head;for(let i=this.level-1;i>=0;i--){for(;t.forward[i]&&t.forward[i].key<n;)t=t.forward[i];e[i]=t}if(t=t.forward[0],t&&t.key===n){for(let i=0;i<this.level&&e[i].forward[i]===t;i++)e[i].forward[i]=t.forward[i];for(;this.level>0&&!this.head.forward[this.level-1];)this._level--;return!0}return!1}higher(n){let e=this.head;for(let i=this.level-1;i>=0;i--)for(;e.forward[i]&&e.forward[i].key<=n;)e=e.forward[i];let t=e.forward[0];return t?t.value:void 0}lower(n){let e=this.head,t;for(let i=this.level-1;i>=0;i--){for(;e.forward[i]&&e.forward[i].key<n;)e=e.forward[i];e.key<n&&(t=e)}return t?t.value:void 0}_randomLevel(){let n=1;for(;Math.random()<this.probability&&n<this.maxLevel;)n++;return n}};var Te=class l extends T{constructor(e=[],t){super(t);d(this,"_elements",[]);if(e)for(let i of e)this.toElementFn?this.push(this.toElementFn(i)):this.push(i)}get elements(){return this._elements}get size(){return this.elements.length}static fromArray(e){return new l(e)}isEmpty(){return this.elements.length===0}peek(){if(!this.isEmpty())return this.elements[this.elements.length-1]}push(e){return this.elements.push(e),!0}pop(){if(!this.isEmpty())return this.elements.pop()}delete(e){let t=this.elements.indexOf(e);return this.deleteAt(t)}deleteAt(e){return this.elements.splice(e,1).length===1}toArray(){return this.elements.slice()}clear(){this._elements=[]}clone(){return new l(this,{toElementFn:this.toElementFn})}filter(e,t){let i=new l([],{toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){for(let e=0;e<this.elements.length;e++)yield this.elements[e]}};var K=class l extends T{constructor(e=[],t){super(t);d(this,"_elements",[]);d(this,"_offset",0);d(this,"_autoCompactRatio",.5);if(t){let{autoCompactRatio:i=.5}=t;this._autoCompactRatio=i}if(e)for(let i of e)this.toElementFn?this.push(this.toElementFn(i)):this.push(i)}get elements(){return this._elements}get offset(){return this._offset}get size(){return this.elements.length-this.offset}get first(){return this.size>0?this.elements[this.offset]:void 0}get last(){return this.size>0?this.elements[this.elements.length-1]:void 0}get autoCompactRatio(){return this._autoCompactRatio}set autoCompactRatio(e){this._autoCompactRatio=e}static fromArray(e){return new l(e)}push(e){return this.elements.push(e),!0}shift(){if(this.size===0)return;let e=this.first;return this._offset+=1,this.offset/this.elements.length>this.autoCompactRatio&&this.compact(),e}delete(e){let t=this.elements.indexOf(e);return this.deleteAt(t)}deleteAt(e){return this.elements.splice(e,1).length===1}at(e){return this.elements[e+this._offset]}isEmpty(){return this.size===0}toArray(){return this.elements.slice(this.offset)}clear(){this._elements=[],this._offset=0}compact(){return this._elements=this.elements.slice(this.offset),this._offset=0,!0}clone(){return new l(this.elements.slice(this.offset),{toElementFn:this.toElementFn})}filter(e,t){let i=new l([],{toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){for(let e of this.elements.slice(this.offset))yield e}},ke=class l extends Z{clone(){return new l(this,{toElementFn:this.toElementFn})}};var Ke=class l extends T{constructor(e=[],t){super(t);d(this,"_bucketSize",4096);d(this,"_maxLen",-1);d(this,"_bucketFirst",0);d(this,"_firstInBucket",0);d(this,"_bucketLast",0);d(this,"_lastInBucket",0);d(this,"_bucketCount",0);d(this,"_buckets",[]);d(this,"_size",0);if(t){let{bucketSize:s,maxLen:o}=t;typeof s=="number"&&(this._bucketSize=s),typeof o=="number"&&o>0&&o%1===0&&(this._maxLen=o)}let i;"length"in e?e.length instanceof Function?i=e.length():i=e.length:e.size instanceof Function?i=e.size():i=e.size,this._bucketCount=he(i,this._bucketSize)||1;for(let s=0;s<this._bucketCount;++s)this._buckets.push(new Array(this._bucketSize));let r=he(i,this._bucketSize);this._bucketFirst=this._bucketLast=(this._bucketCount>>1)-(r>>1),this._firstInBucket=this._lastInBucket=this._bucketSize-i%this._bucketSize>>1;for(let s of e)this.toElementFn?this.push(this.toElementFn(s)):this.push(s)}get bucketSize(){return this._bucketSize}get maxLen(){return this._maxLen}get bucketFirst(){return this._bucketFirst}get firstInBucket(){return this._firstInBucket}get bucketLast(){return this._bucketLast}get lastInBucket(){return this._lastInBucket}get bucketCount(){return this._bucketCount}get buckets(){return this._buckets}get size(){return this._size}get first(){if(this._size!==0)return this._buckets[this._bucketFirst][this._firstInBucket]}get last(){if(this._size!==0)return this._buckets[this._bucketLast][this._lastInBucket]}push(e){return this._size&&(this._lastInBucket<this._bucketSize-1?this._lastInBucket+=1:this._bucketLast<this._bucketCount-1?(this._bucketLast+=1,this._lastInBucket=0):(this._bucketLast=0,this._lastInBucket=0),this._bucketLast===this._bucketFirst&&this._lastInBucket===this._firstInBucket&&this._reallocate()),this._size+=1,this._buckets[this._bucketLast][this._lastInBucket]=e,this._maxLen>0&&this._size>this._maxLen&&this.shift(),!0}pop(){if(this._size===0)return;let e=this._buckets[this._bucketLast][this._lastInBucket];return this._size!==1&&(this._lastInBucket>0?this._lastInBucket-=1:this._bucketLast>0?(this._bucketLast-=1,this._lastInBucket=this._bucketSize-1):(this._bucketLast=this._bucketCount-1,this._lastInBucket=this._bucketSize-1)),this._size-=1,e}unshift(e){return this._size&&(this._firstInBucket>0?this._firstInBucket-=1:this._bucketFirst>0?(this._bucketFirst-=1,this._firstInBucket=this._bucketSize-1):(this._bucketFirst=this._bucketCount-1,this._firstInBucket=this._bucketSize-1),this._bucketFirst===this._bucketLast&&this._firstInBucket===this._lastInBucket&&this._reallocate()),this._size+=1,this._buckets[this._bucketFirst][this._firstInBucket]=e,this._maxLen>0&&this._size>this._maxLen&&this.pop(),!0}shift(){if(this._size===0)return;let e=this._buckets[this._bucketFirst][this._firstInBucket];return this._size!==1&&(this._firstInBucket<this._bucketSize-1?this._firstInBucket+=1:this._bucketFirst<this._bucketCount-1?(this._bucketFirst+=1,this._firstInBucket=0):(this._bucketFirst=0,this._firstInBucket=0)),this._size-=1,e}isEmpty(){return this._size===0}clear(){this._buckets=[new Array(this._bucketSize)],this._bucketCount=1,this._bucketFirst=this._bucketLast=this._size=0,this._firstInBucket=this._lastInBucket=this._bucketSize>>1}*begin(){let e=0;for(;e<this._size;)yield this.at(e),e++}*reverseBegin(){let e=this._size-1;for(;e>=0;)yield this.at(e),e--}at(e){B(e,0,this._size-1);let{bucketIndex:t,indexInBucket:i}=this._getBucketAndPosition(e);return this._buckets[t][i]}setAt(e,t){B(e,0,this._size-1);let{bucketIndex:i,indexInBucket:r}=this._getBucketAndPosition(e);return this._buckets[i][r]=t,!0}addAt(e,t,i=1){let r=this._size;if(B(e,0,r),e===0)for(;i--;)this.unshift(t);else if(e===this._size)for(;i--;)this.push(t);else{let s=[];for(let o=e;o<this._size;++o)s.push(this.at(o));this.cut(e-1,!0);for(let o=0;o<i;++o)this.push(t);for(let o=0;o<s.length;++o)this.push(s[o])}return!0}cut(e,t=!1){if(t){if(e<0)return this.clear(),this;let{bucketIndex:i,indexInBucket:r}=this._getBucketAndPosition(e);return this._bucketLast=i,this._lastInBucket=r,this._size=e+1,this}else{let i=new l([],{bucketSize:this._bucketSize});for(let r=0;r<=e;r++)i.push(this.at(r));return i}}cutRest(e,t=!1){if(t){if(e<0)return this;let{bucketIndex:i,indexInBucket:r}=this._getBucketAndPosition(e);return this._bucketFirst=i,this._firstInBucket=r,this._size=this._size-e,this}else{let i=new l([],{bucketSize:this._bucketSize});e<0&&(e=0);for(let r=e;r<this._size;r++)i.push(this.at(r));return i}}deleteAt(e){if(B(e,0,this._size-1),e===0)this.shift();else if(e===this._size-1)this.pop();else{let t=this._size-1,{bucketIndex:i,indexInBucket:r}=this._getBucketAndPosition(e);for(let s=e;s<t;++s){let{bucketIndex:o,indexInBucket:a}=this._getBucketAndPosition(e+1);this._buckets[i][r]=this._buckets[o][a],i=o,r=a}this.pop()}return!0}delete(e){let t=this._size;if(t===0)return!1;let i=0,r=0;for(;i<t;){let s=this.at(i);s!==e&&(this.setAt(r,s),r+=1),i+=1}return this.cut(r-1,!0),!0}reverse(){this._buckets.reverse().forEach(function(s){s.reverse()});let{_bucketFirst:e,_bucketLast:t,_firstInBucket:i,_lastInBucket:r}=this;return this._bucketFirst=this._bucketCount-t-1,this._bucketLast=this._bucketCount-e-1,this._firstInBucket=this._bucketSize-r-1,this._lastInBucket=this._bucketSize-i-1,this}unique(){if(this._size<=1)return this;let e=1,t=this.at(0);for(let i=1;i<this._size;++i){let r=this.at(i);r!==t&&(t=r,this.setAt(e++,r))}return this.cut(e-1,!0),this}sort(e){let t=[];for(let i=0;i<this._size;++i)t.push(this.at(i));t.sort(e);for(let i=0;i<this._size;++i)this.setAt(i,t[i]);return this}shrinkToFit(){if(this._size===0)return;let e=[];if(this._bucketFirst!==this._bucketLast){if(this._bucketFirst<this._bucketLast)for(let t=this._bucketFirst;t<=this._bucketLast;++t)e.push(this._buckets[t]);else{for(let t=this._bucketFirst;t<this._bucketCount;++t)e.push(this._buckets[t]);for(let t=0;t<=this._bucketLast;++t)e.push(this._buckets[t])}this._bucketFirst=0,this._bucketLast=e.length-1,this._buckets=e}}indexOf(e){for(let t=0;t<this._size;++t)if(this.at(t)===e)return t;return-1}toArray(){return[...this]}clone(){return new l(this,{bucketSize:this.bucketSize,toElementFn:this.toElementFn})}filter(e,t){let i=new l([],{bucketSize:this._bucketSize,toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{bucketSize:this._bucketSize,toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){for(let e=0;e<this._size;++e)yield this.at(e)}_reallocate(e){let t=[],i=e||this._bucketCount>>1||1;for(let r=0;r<i;++r)t[r]=new Array(this._bucketSize);for(let r=this._bucketFirst;r<this._bucketCount;++r)t[t.length]=this._buckets[r];for(let r=0;r<this._bucketLast;++r)t[t.length]=this._buckets[r];t[t.length]=[...this._buckets[this._bucketLast]],this._bucketFirst=i,this._bucketLast=t.length-1;for(let r=0;r<i;++r)t[t.length]=new Array(this._bucketSize);this._buckets=t,this._bucketCount=t.length}_getBucketAndPosition(e){let t,i,r=this._firstInBucket+e;return t=this._bucketFirst+Math.floor(r/this._bucketSize),t>=this._bucketCount&&(t-=this._bucketCount),i=(r+1)%this._bucketSize-1,i<0&&(i=this._bucketSize-1),{bucketIndex:t,indexInBucket:i}}};var w=class l extends T{constructor(e=[],t){super(t);d(this,"_elements",[]);d(this,"_DEFAULT_COMPARATOR",(e,t)=>{if(typeof e=="object"||typeof t=="object")throw TypeError("When comparing object types, a custom comparator must be defined in the constructor's options parameter.");return e>t?1:e<t?-1:0});d(this,"_comparator",this._DEFAULT_COMPARATOR);if(t){let{comparator:i}=t;i&&(this._comparator=i)}if(e)for(let i of e)this.toElementFn?this.add(this.toElementFn(i)):this.add(i)}get elements(){return this._elements}get size(){return this.elements.length}get leaf(){var e;return(e=this.elements[this.size-1])!=null?e:void 0}static heapify(e,t){return new l(e,t)}add(e){return this._elements.push(e),this._bubbleUp(this.elements.length-1)}poll(){if(this.elements.length===0)return;let e=this.elements[0],t=this.elements.pop();return this.elements.length&&(this.elements[0]=t,this._sinkDown(0,this.elements.length>>1)),e}peek(){return this.elements[0]}isEmpty(){return this.size===0}clear(){this._elements=[]}refill(e){return this._elements=e,this.fix()}has(e){return this.elements.includes(e)}delete(e){let t=this.elements.indexOf(e);return t<0?!1:(t===0?this.poll():t===this.elements.length-1?this.elements.pop():(this.elements.splice(t,1,this.elements.pop()),this._bubbleUp(t),this._sinkDown(t,this.elements.length>>1)),!0)}dfs(e="PRE"){let t=[],i=r=>{let s=2*r+1,o=s+1;r<this.size&&(e==="IN"?(i(s),t.push(this.elements[r]),i(o)):e==="PRE"?(t.push(this.elements[r]),i(s),i(o)):e==="POST"&&(i(s),i(o),t.push(this.elements[r])))};return i(0),t}toArray(){return[...this.elements]}clone(){return new l(this,{comparator:this.comparator,toElementFn:this.toElementFn})}sort(){let e=[],t=new l(this,{comparator:this.comparator});for(;t.size!==0;){let i=t.poll();i!==void 0&&e.push(i)}return e}fix(){let e=[];for(let t=Math.floor(this.size/2);t>=0;t--)e.push(this._sinkDown(t,this.elements.length>>1));return e}filter(e,t){let i=new l([],{toElementFn:this.toElementFn,comparator:this.comparator}),r=0;for(let s of this)e.call(t,s,r,this)&&i.add(s),r++;return i}map(e,t,i,r){let s=new l([],{comparator:t,toElementFn:i}),o=0;for(let a of this)s.add(e.call(r,a,o,this)),o++;return s}get comparator(){return this._comparator}*_getIterator(){for(let e of this.elements)yield e}_bubbleUp(e){let t=this.elements[e];for(;e>0;){let i=e-1>>1,r=this.elements[i];if(this.comparator(r,t)<=0)break;this.elements[e]=r,e=i}return this.elements[e]=t,!0}_sinkDown(e,t){let i=this.elements[e];for(;e<t;){let r=e<<1|1,s=r+1,o=this.elements[r];if(s<this.elements.length&&this.comparator(o,this.elements[s])>0&&(r=s,o=this.elements[s]),this.comparator(o,i)>=0)break;this.elements[e]=o,e=r}return this.elements[e]=i,!0}},le=class{constructor(n,e=0){d(this,"element");d(this,"degree");d(this,"left");d(this,"right");d(this,"child");d(this,"parent");d(this,"marked");this.element=n,this.degree=e,this.marked=!1}},De=class{constructor(n){d(this,"_root");d(this,"_size",0);d(this,"_min");d(this,"_comparator");if(this.clear(),this._comparator=n||this._defaultComparator,typeof this.comparator!="function")throw new Error("FibonacciHeap constructor: given comparator should be a function.")}get root(){return this._root}get size(){return this._size}get min(){return this._min}get comparator(){return this._comparator}clear(){this._root=void 0,this._min=void 0,this._size=0}add(n){return this.push(n)}push(n){let e=this.createNode(n);return e.left=e,e.right=e,this.mergeWithRoot(e),(!this.min||this.comparator(e.element,this.min.element)<=0)&&(this._min=e),this._size++,this}peek(){return this.min?this.min.element:void 0}consumeLinkedList(n){let e=[];if(!n)return e;let t=n,i=!1;for(;!(t===n&&i);)t===n&&(i=!0),t&&(e.push(t),t=t.right);return e}mergeWithChild(n,e){n.child?(e.right=n.child.right,e.left=n.child,n.child.right.left=e,n.child.right=e):n.child=e}poll(){return this.pop()}pop(){if(this._size===0)return;let n=this.min;if(n.child){let e=this.consumeLinkedList(n.child);for(let t of e)this.mergeWithRoot(t),t.parent=void 0}return this.removeFromRoot(n),n===n.right?(this._min=void 0,this._root=void 0):(this._min=n.right,this._consolidate()),this._size--,n.element}merge(n){if(n.size!==0){if(this.root&&n.root){let e=this.root,t=n.root,i=e.right,r=t.left;e.right=t,t.left=e,i.left=r,r.right=i}(!this.min||n.min&&this.comparator(n.min.element,this.min.element)<0)&&(this._min=n.min),this._size+=n.size,n.clear()}}createNode(n){return new le(n)}_defaultComparator(n,e){return n<e?-1:n>e?1:0}mergeWithRoot(n){this.root?(n.right=this.root.right,n.left=this.root,this.root.right.left=n,this.root.right=n):this._root=n}removeFromRoot(n){this.root===n&&(this._root=n.right),n.left&&(n.left.right=n.right),n.right&&(n.right.left=n.left)}_link(n,e){this.removeFromRoot(n),n.left=n,n.right=n,this.mergeWithChild(e,n),e.degree++,n.parent=e}_consolidate(){let n=new Array(this._size),e=this.consumeLinkedList(this.root),t,i,r,s;for(let o of e){for(t=o,r=t.degree;n[r];)i=n[r],this.comparator(t.element,i.element)>0&&(s=t,t=i,i=s),this._link(i,t),n[r]=void 0,r++;n[r]=t}for(let o=0;o<this._size;o++)n[o]&&this.comparator(n[o].element,this.min.element)<=0&&(this._min=n[o])}};var ve=class l extends w{constructor(n=[],e){super(n,M({comparator:(t,i)=>{if(typeof t=="object"||typeof i=="object")throw TypeError("When comparing object types, a custom comparator must be defined in the constructor's options parameter.");return t<i?1:t>i?-1:0}},e))}clone(){return new l(this,{comparator:this.comparator,toElementFn:this.toElementFn})}filter(n,e){let t=new l([],{toElementFn:this.toElementFn,comparator:this.comparator}),i=0;for(let r of this)n.call(e,r,i,this)&&t.add(r),i++;return t}map(n,e,t,i){let r=new l([],{comparator:e,toElementFn:t}),s=0;for(let o of this)r.add(n.call(i,o,s,this)),s++;return r}};var we=class l extends w{constructor(n=[],e){super(n,e)}clone(){return new l(this,{comparator:this.comparator,toElementFn:this.toElementFn})}filter(n,e){let t=new l([],{toElementFn:this.toElementFn,comparator:this.comparator}),i=0;for(let r of this)n.call(e,r,i,this)&&t.add(r),i++;return t}map(n,e,t,i){let r=new l([],{comparator:e,toElementFn:t}),s=0;for(let o of this)r.add(n.call(i,o,s,this)),s++;return r}};var k=class{constructor(n,e){d(this,"key");d(this,"value");this.key=n,this.value=e}},S=class{constructor(n,e){d(this,"value");d(this,"weight");d(this,"_hashCode");this.weight=n!==void 0?n:1,this.value=e,this._hashCode=_e()}get hashCode(){return this._hashCode}},H=class extends F{constructor(){super();d(this,"_vertexMap",new Map)}get vertexMap(){return this._vertexMap}set vertexMap(e){this._vertexMap=e}get size(){return this._vertexMap.size}getVertex(e){return this._vertexMap.get(e)||void 0}hasVertex(e){return this._vertexMap.has(this._getVertexKey(e))}addVertex(e,t){if(e instanceof k)return this._addVertex(e);{let i=this.createVertex(e,t);return this._addVertex(i)}}isVertexKey(e){let t=typeof e;return t==="string"||t==="number"}removeManyVertices(e){let t=[];for(let i of e)t.push(this.deleteVertex(i));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,i,r){if(e instanceof S)return this._addEdge(e);if(t instanceof k||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof k&&(e=e.key),t instanceof k&&(t=t.key);let s=this.createEdge(e,t,i,r);return this._addEdge(s)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(e,t,i){let r=this.getEdge(e,t);return r?(r.weight=i,!0):!1}getAllPathsBetween(e,t,i=1e3){let r=[],s=this._getVertex(e),o=this._getVertex(t);if(!(s&&o))return[];let a=[];for(a.push({vertex:s,path:[s]});a.length>0;){let{vertex:h,path:u}=a.pop();if(h===o&&(r.push(u),r.length>=i))return r;let f=this.getNeighbors(h);for(let p of f)if(!u.includes(p)){let c=[...u,p];a.push({vertex:p,path:c})}}return r}getPathSumWeight(e){var i;let t=0;for(let r=0;r<e.length;r++)t+=((i=this.getEdge(e[r],e[r+1]))==null?void 0:i.weight)||0;return t}getMinCostBetween(e,t,i){if(i===void 0&&(i=!1),i){let r=this.getAllPathsBetween(e,t),s=1/0;for(let o of r)s=Math.min(this.getPathSumWeight(o),s);return s}else{let r=this._getVertex(t),s=this._getVertex(e);if(!(s&&r))return;let o=new Map,a=new K([s]);o.set(s,!0);let h=0;for(;a.size>0;){for(let u=0;u<a.size;u++){let f=a.shift();if(f===r)return h;if(f!==void 0){let p=this.getNeighbors(f);for(let c of p)o.has(c)||(o.set(c,!0),a.push(c))}}h++}return}}getMinPathBetween(e,t,i,r=!1){var s,o;if(i===void 0&&(i=!1),i)if(r){let a=this.getAllPathsBetween(e,t,1e4),h=1/0,u=-1,f=0;for(let p of a){let c=this.getPathSumWeight(p);c<h&&(h=c,u=f),f++}return a[u]||void 0}else return(o=(s=this.dijkstra(e,t,!0,!0))==null?void 0:s.minPath)!=null?o:[];else{let a=[],h=this._getVertex(e),u=this._getVertex(t);if(!(h&&u))return[];let f=(p,c,g,_)=>{if(g.add(p),p===c){a=[h,..._];return}let m=this.getNeighbors(p);for(let O of m)g.has(O)||(_.push(O),f(O,c,g,_),_.pop());g.delete(p)};return f(h,u,new Set,[]),a}}dijkstraWithoutHeap(e,t=void 0,i=!1,r=!1){let s=1/0,o,a=[],h=[],u=this._vertexMap,f=new Map,p=new Set,c=new Map,g=this._getVertex(e),_=t?this._getVertex(t):void 0;if(!g)return;for(let b of u){let E=b[1];E instanceof k&&f.set(E,1/0)}f.set(g,0),c.set(g,void 0);let m=()=>{let b=1/0,E;for(let[N,y]of f)p.has(N)||y<b&&(b=y,E=N);return E},O=b=>{for(let E of u){let N=E[1];if(N instanceof k){let y=[N],V=c.get(N);for(;V;)y.push(V),V=c.get(V);let R=y.reverse();E[1]===b&&(a=R),h.push(R)}}};for(let b=1;b<u.size;b++){let E=m();if(E){if(p.add(E),_&&_===E)return i&&(s=f.get(_)||1/0),r&&O(_),{distMap:f,preMap:c,seen:p,paths:h,minDist:s,minPath:a};let N=this.getNeighbors(E);for(let y of N)if(!p.has(y)){let V=this.getEdge(E,y);if(V){let R=f.get(E),x=f.get(y);R!==void 0&&x!==void 0&&V.weight+R<x&&(f.set(y,V.weight+R),c.set(y,E))}}}}return i&&f.forEach((b,E)=>{E!==g&&b<s&&(s=b,r&&(o=E))}),r&&O(o),{distMap:f,preMap:c,seen:p,paths:h,minDist:s,minPath:a}}dijkstra(e,t=void 0,i=!1,r=!1){var b;let s=1/0,o,a=[],h=[],u=this._vertexMap,f=new Map,p=new Set,c=new Map,g=this._getVertex(e),_=t?this._getVertex(t):void 0;if(!g)return;for(let E of u){let N=E[1];N instanceof k&&f.set(N,1/0)}let m=new w([],{comparator:(E,N)=>E.key-N.key});m.add({key:0,value:g}),f.set(g,0),c.set(g,void 0);let O=E=>{for(let N of u){let y=N[1];if(y instanceof k){let V=[y],R=c.get(y);for(;R;)V.push(R),R=c.get(R);let x=V.reverse();N[1]===E&&(a=x),h.push(x)}}};for(;m.size>0;){let E=m.poll(),N=E==null?void 0:E.key,y=E==null?void 0:E.value;if(N!==void 0&&y){if(p.add(y),_&&_===y)return i&&(s=f.get(_)||1/0),r&&O(_),{distMap:f,preMap:c,seen:p,paths:h,minDist:s,minPath:a};let V=this.getNeighbors(y);for(let R of V)if(!p.has(R)){let x=(b=this.getEdge(y,R))==null?void 0:b.weight;if(typeof x=="number"){let z=f.get(R);z&&N+x<z&&(m.add({key:N+x,value:R}),c.set(R,y),f.set(R,N+x))}}}}return i&&f.forEach((E,N)=>{N!==g&&E<s&&(s=E,r&&(o=N))}),r&&O(o),{distMap:f,preMap:c,seen:p,paths:h,minDist:s,minPath:a}}bellmanFord(e,t,i,r){i===void 0&&(i=!1),r===void 0&&(r=!1);let s=this._getVertex(e),o=[],a=new Map,h=new Map,u=1/0,f=[],p;if(t&&(p=!1),!s)return{hasNegativeCycle:p,distMap:a,preMap:h,paths:o,min:u,minPath:f};let c=this._vertexMap,g=c.size,_=this.edgeSet(),m=_.length;this._vertexMap.forEach(b=>{a.set(b,1/0)}),a.set(s,0);for(let b=1;b<g;++b)for(let E=0;E<m;++E){let N=this.getEndsOfEdge(_[E]);if(N){let[y,V]=N,R=_[E].weight,x=a.get(y),z=a.get(V);x!==void 0&&z!==void 0&&a.get(y)!==1/0&&x+R<z&&(a.set(V,x+R),r&&h.set(V,y))}}let O;if(i&&a.forEach((b,E)=>{E!==s&&b<u&&(u=b,r&&(O=E))}),r)for(let b of c){let E=b[1];if(E instanceof k){let N=[E],y=h.get(E);for(;y!==void 0;)N.push(y),y=h.get(y);let V=N.reverse();b[1]===O&&(f=V),o.push(V)}}for(let b=0;b<m;++b){let E=this.getEndsOfEdge(_[b]);if(E){let[N]=E,y=_[b].weight,V=a.get(N);V&&V!==1/0&&V+y<V&&(p=!0)}}return{hasNegativeCycle:p,distMap:a,preMap:h,paths:o,min:u,minPath:f}}floydWarshall(){var s;let e=[...this._vertexMap],t=e.length,i=[],r=[];for(let o=0;o<t;o++){i[o]=[],r[o]=[];for(let a=0;a<t;a++)r[o][a]=void 0}for(let o=0;o<t;o++)for(let a=0;a<t;a++)i[o][a]=((s=this.getEdge(e[o][1],e[a][1]))==null?void 0:s.weight)||1/0;for(let o=0;o<t;o++)for(let a=0;a<t;a++)for(let h=0;h<t;h++)i[a][h]>i[a][o]+i[o][h]&&(i[a][h]=i[a][o]+i[o][h],r[a][h]=e[o][1]);return{costs:i,predecessor:r}}getCycles(e=!1){let t=[],i=new Set,r=(o,a,h)=>{if(h.has(o)){(!e&&a.length>2||e&&a.length>=2)&&a[0]===o.key&&t.push([...a]);return}h.add(o),a.push(o.key);for(let u of this.getNeighbors(o))u&&r(u,a,h);h.delete(o),a.pop()};for(let o of this.vertexMap.values())r(o,[],i);let s=new Map;for(let o of t){let a=[...o].sort().toString();s.has(a)||s.set(a,o)}return[...s].map(o=>o[1])}filter(e,t){let i=[],r=0;for(let[s,o]of this)e.call(t,o,s,r,this)&&i.push([s,o]),r++;return i}map(e,t){let i=[],r=0;for(let[s,o]of this)i.push(e.call(t,o,s,r,this)),r++;return i}*_getIterator(){for(let e of this._vertexMap.values())yield[e.key,e.value]}_addVertex(e){return this.hasVertex(e)?!1:(this._vertexMap.set(e.key,e),!0)}_getVertex(e){let t=this._getVertexKey(e);return this._vertexMap.get(t)||void 0}_getVertexKey(e){return e instanceof k?e.key:e}};var P=class extends k{constructor(n,e){super(n,e)}},W=class extends S{constructor(e,t,i,r){super(i,r);d(this,"src");d(this,"dest");this.src=e,this.dest=t}},ee=class l extends H{constructor(){super();d(this,"_outEdgeMap",new Map);d(this,"_inEdgeMap",new Map)}get outEdgeMap(){return this._outEdgeMap}set outEdgeMap(e){this._outEdgeMap=e}get inEdgeMap(){return this._inEdgeMap}set inEdgeMap(e){this._inEdgeMap=e}createVertex(e,t){return new P(e,t)}createEdge(e,t,i,r){return new W(e,t,i!=null?i:1,r)}getEdge(e,t){let i=[];if(e!==void 0&&t!==void 0){let r=this._getVertex(e),s=this._getVertex(t);if(r&&s){let o=this._outEdgeMap.get(r);o&&(i=o.filter(a=>a.dest===s.key))}}return i[0]||void 0}deleteEdgeSrcToDest(e,t){let i=this._getVertex(e),r=this._getVertex(t),s;if(!i||!r)return;let o=this._outEdgeMap.get(i);o&&I(o,h=>h.dest===r.key);let a=this._inEdgeMap.get(r);return a&&(s=I(a,h=>h.src===i.key)[0]||void 0),s}deleteEdge(e,t){let i,r,s;if(this.isVertexKey(e))if(this.isVertexKey(t))r=this._getVertex(e),s=this._getVertex(t);else return;else r=this._getVertex(e.src),s=this._getVertex(e.dest);if(r&&s){let o=this._outEdgeMap.get(r);o&&o.length>0&&I(o,h=>h.src===r.key&&h.dest===(s==null?void 0:s.key));let a=this._inEdgeMap.get(s);a&&a.length>0&&(i=I(a,h=>h.src===r.key&&h.dest===s.key)[0])}return i}deleteVertex(e){let t,i;if(this.isVertexKey(e)?(i=this.getVertex(e),t=e):(i=e,t=this._getVertexKey(e)),i){let r=this.getNeighbors(i);for(let s of r)this.deleteEdgeSrcToDest(i,s);this._outEdgeMap.delete(i),this._inEdgeMap.delete(i)}return this._vertexMap.delete(t)}deleteEdgesBetween(e,t){let i=[];if(e&&t){let r=this.deleteEdgeSrcToDest(e,t),s=this.deleteEdgeSrcToDest(t,e);r&&i.push(r),s&&i.push(s)}return i}incomingEdgesOf(e){let t=this._getVertex(e);return t?this.inEdgeMap.get(t)||[]:[]}outgoingEdgesOf(e){let t=this._getVertex(e);return t?this._outEdgeMap.get(t)||[]:[]}degreeOf(e){return this.outDegreeOf(e)+this.inDegreeOf(e)}inDegreeOf(e){return this.incomingEdgesOf(e).length}outDegreeOf(e){return this.outgoingEdgesOf(e).length}edgesOf(e){return[...this.outgoingEdgesOf(e),...this.incomingEdgesOf(e)]}getEdgeSrc(e){return this._getVertex(e.src)}getEdgeDest(e){return this._getVertex(e.dest)}getDestinations(e){if(e===void 0)return[];let t=[],i=this.outgoingEdgesOf(e);for(let r of i){let s=this.getEdgeDest(r);s&&t.push(s)}return t}topologicalSort(e){e=e!=null?e:"key";let t=new Map;for(let o of this.vertexMap)t.set(o[1],0);let i=[],r=!1,s=o=>{t.set(o,1);let a=this.getDestinations(o);for(let h of a){let u=t.get(h);u===0?s(h):u===1&&(r=!0)}t.set(o,2),i.push(o)};for(let o of this.vertexMap)t.get(o[1])===0&&s(o[1]);if(!r)return e==="key"&&(i=i.map(o=>o instanceof P?o.key:o)),i.reverse()}edgeSet(){let e=[];return this._outEdgeMap.forEach(t=>{e=[...e,...t]}),e}getNeighbors(e){let t=[],i=this._getVertex(e);if(i){let r=this.outgoingEdgesOf(i);for(let s of r){let o=this._getVertex(s.dest);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.src,e.dest))return;let t=this._getVertex(e.src),i=this._getVertex(e.dest);if(t&&i)return[t,i]}isEmpty(){return this.vertexMap.size===0&&this.inEdgeMap.size===0&&this.outEdgeMap.size===0}clear(){this._vertexMap=new Map,this._inEdgeMap=new Map,this._outEdgeMap=new Map}clone(){let e=new l;return e.vertexMap=new Map(this.vertexMap),e.inEdgeMap=new Map(this.inEdgeMap),e.outEdgeMap=new Map(this.outEdgeMap),e}tarjan(){let e=new Map,t=new Map,i=new Map,r=0,s=[],o=new Set,a=h=>{e.set(h,r),t.set(h,r),r++,s.push(h),o.add(h);let u=this.getNeighbors(h);for(let f of u)e.has(f)?o.has(f)&&t.set(h,Math.min(t.get(h),e.get(f))):(a(f),t.set(h,Math.min(t.get(h),t.get(f))));if(e.get(h)===t.get(h)){let f=[],p;do p=s.pop(),o.delete(p),f.push(p);while(p!==h);i.set(i.size,f)}};for(let h of this.vertexMap.values())e.has(h)||a(h);return{dfnMap:e,lowMap:t,SCCs:i}}getDFNMap(){return this.tarjan().dfnMap}getLowMap(){return this.tarjan().lowMap}getSCCs(){return this.tarjan().SCCs}_addEdge(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let t=this._getVertex(e.src),i=this._getVertex(e.dest);if(t&&i){let r=this._outEdgeMap.get(t);r?r.push(e):this._outEdgeMap.set(t,[e]);let s=this._inEdgeMap.get(i);return s?s.push(e):this._inEdgeMap.set(i,[e]),!0}else return!1}};var ue=class extends k{constructor(n,e){super(n,e)}},de=class extends S{constructor(e,t,i,r){super(i,r);d(this,"endpoints");this.endpoints=[e,t]}},Ce=class l extends H{constructor(){super();d(this,"_edgeMap");this._edgeMap=new Map}get edgeMap(){return this._edgeMap}set edgeMap(e){this._edgeMap=e}createVertex(e,t){return new ue(e,t!=null?t:e)}createEdge(e,t,i,r){return new de(e,t,i!=null?i:1,r)}getEdge(e,t){var r;let i=[];if(e!==void 0&&t!==void 0){let s=this._getVertex(e),o=this._getVertex(t);s&&o&&(i=(r=this._edgeMap.get(s))==null?void 0:r.filter(a=>a.endpoints.includes(o.key)))}return i&&i[0]||void 0}deleteEdgeBetween(e,t){let i=this._getVertex(e),r=this._getVertex(t);if(!i||!r)return;let s=this._edgeMap.get(i),o;s&&(o=I(s,h=>h.endpoints.includes(r.key))[0]||void 0);let a=this._edgeMap.get(r);return a&&I(a,h=>h.endpoints.includes(i.key)),o}deleteEdge(e,t){let i,r;if(this.isVertexKey(e))if(this.isVertexKey(t))i=this._getVertex(e),r=this._getVertex(t);else return;else i=this._getVertex(e.endpoints[0]),r=this._getVertex(e.endpoints[1]);if(i&&r)return this.deleteEdgeBetween(i,r)}deleteVertex(e){let t,i;this.isVertexKey(e)?(i=this.getVertex(e),t=e):(i=e,t=this._getVertexKey(e));let r=this.getNeighbors(e);return i&&(r.forEach(s=>{let o=this._edgeMap.get(s);if(o){let a=o.filter(h=>!h.endpoints.includes(t));this._edgeMap.set(s,a)}}),this._edgeMap.delete(i)),this._vertexMap.delete(t)}degreeOf(e){var i;let t=this._getVertex(e);return t&&((i=this._edgeMap.get(t))==null?void 0:i.length)||0}edgesOf(e){let t=this._getVertex(e);return t?this._edgeMap.get(t)||[]:[]}edgeSet(){let e=new Set;return this._edgeMap.forEach(t=>{t.forEach(i=>{e.add(i)})}),[...e]}getNeighbors(e){let t=[],i=this._getVertex(e);if(i){let r=this.edgesOf(i);for(let s of r){let o=this._getVertex(s.endpoints.filter(a=>a!==i.key)[0]);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.endpoints[0],e.endpoints[1]))return;let t=this._getVertex(e.endpoints[0]),i=this._getVertex(e.endpoints[1]);if(t&&i)return[t,i]}isEmpty(){return this.vertexMap.size===0&&this.edgeMap.size===0}clear(){this._vertexMap=new Map,this._edgeMap=new Map}clone(){let e=new l;return e.vertexMap=new Map(this.vertexMap),e.edgeMap=new Map(this.edgeMap),e}tarjan(){let e=new Map,t=new Map,i=[],r=[],s=0,o=(a,h)=>{e.set(a,s),t.set(a,s),s++;let u=this.getNeighbors(a),f=0;for(let p of u)if(e.has(p))p!==h&&t.set(a,Math.min(t.get(a),e.get(p)));else{if(f++,o(p,a),t.set(a,Math.min(t.get(a),t.get(p))),t.get(p)>e.get(a)){let c=this.getEdge(a,p);c&&i.push(c)}h!==void 0&&t.get(p)>=e.get(a)&&r.push(a)}h===void 0&&f>1&&r.push(a)};for(let a of this.vertexMap.values())e.has(a)||o(a,void 0);return{dfnMap:e,lowMap:t,bridges:i,cutVertices:r}}getBridges(){return this.tarjan().bridges}getCutVertices(){return this.tarjan().cutVertices}getDFNMap(){return this.tarjan().dfnMap}getLowMap(){return this.tarjan().lowMap}_addEdge(e){for(let t of e.endpoints){let i=this._getVertex(t);if(i===void 0)return!1;if(i){let r=this._edgeMap.get(i);r?r.push(e):this._edgeMap.set(i,[e])}}return!0}};var fe=class extends P{constructor(e,t,i,r){super(e,t);d(this,"lat");d(this,"long");this.lat=i,this.long=r}},ce=class extends W{constructor(n,e,t,i){super(n,e,t,i)}},Fe=class l extends ee{constructor(e,t){super();d(this,"_originCoord",[0,0]);d(this,"_bottomRight");this._originCoord=e,this._bottomRight=t}get originCoord(){return this._originCoord}get bottomRight(){return this._bottomRight}createVertex(e,t,i=this.originCoord[0],r=this.originCoord[1]){return new fe(e,t,i,r)}createEdge(e,t,i,r){return new ce(e,t,i,r)}clone(){let e=new l(this.originCoord,this.bottomRight);return e.vertexMap=new Map(this.vertexMap),e.inEdgeMap=new Map(this.inEdgeMap),e.outEdgeMap=new Map(this.outEdgeMap),e}};var Ie=(e=>(e[e.VISIT=0]="VISIT",e[e.PROCESS=1]="PROCESS",e))(Ie||{});var A=class{constructor(n,e){d(this,"key");d(this,"value");d(this,"parent");d(this,"_left");d(this,"_right");this.key=n,this.value=e}get left(){return this._left}set left(n){n&&(n.parent=this),this._left=n}get right(){return this._right}set right(n){n&&(n.parent=this),this._right=n}get familyPosition(){let n=this;return this.parent?this.parent.left===n?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===n?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},te=class l extends F{constructor(e=[],t){super();d(this,"iterationType","ITERATIVE");d(this,"_isMapMode",!0);d(this,"_store",new Map);d(this,"_root");d(this,"_size",0);d(this,"_NIL",new A(NaN));d(this,"_toEntryFn");d(this,"_DEFAULT_NODE_CALLBACK",e=>e?e.key:void 0);if(t){let{iterationType:i,toEntryFn:r,isMapMode:s}=t;if(i&&(this.iterationType=i),s!==void 0&&(this._isMapMode=s),typeof r=="function")this._toEntryFn=r;else if(r)throw TypeError("toEntryFn must be a function type")}e&&this.addMany(e)}get isMapMode(){return this._isMapMode}get store(){return this._store}get root(){return this._root}get size(){return this._size}get NIL(){return this._NIL}get toEntryFn(){return this._toEntryFn}createNode(e,t){return new A(e,this._isMapMode?void 0:t)}createTree(e){return new l([],M({iterationType:this.iterationType,isMapMode:this._isMapMode,toEntryFn:this._toEntryFn},e))}keyValueNodeEntryRawToNodeAndValue(e,t){if(e===void 0)return[void 0,void 0];if(e===null)return[null,void 0];if(this.isNode(e))return[e,t];if(this.isEntry(e)){let[i,r]=e;if(i===void 0)return[void 0,void 0];if(i===null)return[null,void 0];let s=t!=null?t:r;return[this.createNode(i,s),s]}if(this.isKey(e))return[this.createNode(e,t),t];if(this.isRaw(e)){if(this._toEntryFn){let[i,r]=this._toEntryFn(e),s=t!=null?t:r;if(this.isKey(i))return[this.createNode(i,s),s]}return[void 0,void 0]}return[void 0,void 0]}ensureNode(e,t=this.iterationType){if(e===null)return null;if(e!==void 0&&e!==this._NIL){if(this.isNode(e))return e;if(this.isEntry(e)){let i=e[0];return i===null?null:i===void 0?void 0:this.getNodeByKey(i,t)}if(this._toEntryFn){let[i]=this._toEntryFn(e);if(this.isKey(i))return this.getNodeByKey(i)}if(this.isKey(e))return this.getNodeByKey(e,t)}}isNode(e){return e instanceof A}isRaw(e){return typeof e=="object"}isRealNode(e){return e===this._NIL||e===null||e===void 0?!1:this.isNode(e)}isRealNodeOrNull(e){return e===null||this.isRealNode(e)}isNIL(e){return e===this._NIL}isLeaf(e){return e=this.ensureNode(e),e===void 0?!1:e===null?!0:!this.isRealNode(e.left)&&!this.isRealNode(e.right)}isEntry(e){return Array.isArray(e)&&e.length===2}isKey(e){return e===null?!0:J(e)}add(e,t){let[i,r]=this.keyValueNodeEntryRawToNodeAndValue(e,t);if(i===void 0)return!1;if(!this._root)return this._setRoot(i),this._isMapMode&&this._setValue(i==null?void 0:i.key,r),this._size=1,!0;let s=new K([this._root]),o;for(;s.size>0;){let a=s.shift();if(a){if(i!==null&&a.key===i.key)return this._replaceNode(a,i),this._isMapMode&&this._setValue(a.key,r),!0;o===void 0&&(a.left===void 0||a.right===void 0)&&(o=a),a.left!==null&&a.left&&s.push(a.left),a.right!==null&&a.right&&s.push(a.right)}}return o?(o.left===void 0?o.left=i:o.right===void 0&&(o.right=i),this._isMapMode&&this._setValue(i==null?void 0:i.key,r),this._size++,!0):!1}addMany(e,t){let i=[],r;t&&(r=t[Symbol.iterator]());for(let s of e){let o;if(r){let a=r.next();a.done||(o=a.value)}i.push(this.add(s,o))}return i}refill(e,t){this.clear(),this.addMany(e,t)}delete(e){let t=[];if(!this._root)return t;let i=this.getNode(e);if(!i)return t;let r=i==null?void 0:i.parent,s,o=i;if(!i.left&&!i.right&&!r)this._setRoot(void 0);else if(i.left){let a=this.getRightMost(h=>h,i.left);if(a){let h=a.parent;o=this._swapProperties(i,a),h&&(h.right===a?h.right=a.left:h.left=a.left,s=h)}}else if(r){let{familyPosition:a}=i;a==="LEFT"||a==="ROOT_LEFT"?r.left=i.right:(a==="RIGHT"||a==="ROOT_RIGHT")&&(r.right=i.right),s=r}else this._setRoot(i.right),i.right=void 0;return this._size=this._size-1,t.push({deleted:o,needBalanced:s}),this._isMapMode&&o&&this._store.delete(o.key),t}getNodes(e,t=!1,i=this._root,r=this.iterationType){if(e===void 0)return[];if(e===null)return[];if(i=this.ensureNode(i),!i)return[];let s=this._ensurePredicate(e),o=[];if(r==="RECURSIVE"){let a=h=>{s(h)&&(o.push(h),t)||!this.isRealNode(h.left)&&!this.isRealNode(h.right)||(this.isRealNode(h.left)&&a(h.left),this.isRealNode(h.right)&&a(h.right))};a(i)}else{let a=[i];for(;a.length>0;){let h=a.pop();if(this.isRealNode(h)){if(s(h)&&(o.push(h),t))return o;this.isRealNode(h.left)&&a.push(h.left),this.isRealNode(h.right)&&a.push(h.right)}}}return o}getNode(e,t=this._root,i=this.iterationType){var r;return(r=this.getNodes(e,!0,t,i)[0])!=null?r:null}getNodeByKey(e,t=this.iterationType){return this.getNode(e,this._root,t)}get(e,t=this._root,i=this.iterationType){var r;if(this._isMapMode){let s=this._getKey(e);return s==null?void 0:this._store.get(s)}return(r=this.getNode(e,t,i))==null?void 0:r.value}has(e,t=this._root,i=this.iterationType){return this.getNodes(e,!0,t,i).length>0}clear(){this._clearNodes(),this._isMapMode&&this._clearValues()}isEmpty(){return this._size===0}isPerfectlyBalanced(e=this._root){return this.getMinHeight(e)+1>=this.getHeight(e)}isBST(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!e)return!0;if(t==="RECURSIVE"){let i=(o,a,h)=>{if(!this.isRealNode(o))return!0;let u=Number(o.key);return u<=a||u>=h?!1:i(o.left,a,u)&&i(o.right,u,h)},r=i(e,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),s=i(e,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);return r||s}else{let i=(o=!1)=>{let a=[],h=o?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,u=e;for(;this.isRealNode(u)||a.length>0;){for(;this.isRealNode(u);)a.push(u),u=u.left;u=a.pop();let f=Number(u.key);if(!this.isRealNode(u)||!o&&h>=f||o&&h<=f)return!1;h=f,u=u.right}return!0},r=i(!1),s=i(!0);return r||s}}getDepth(e,t=this._root){let i=this.ensureNode(e),r=this.ensureNode(t),s=0;for(;i!=null&&i.parent;){if(i===r)return s;s++,i=i.parent}return s}getHeight(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!this.isRealNode(e))return-1;if(t==="RECURSIVE"){let i=r=>{if(!this.isRealNode(r))return-1;let s=i(r.left),o=i(r.right);return Math.max(s,o)+1};return i(e)}else{let i=[{node:e,depth:0}],r=0;for(;i.length>0;){let{node:s,depth:o}=i.pop();this.isRealNode(s.left)&&i.push({node:s.left,depth:o+1}),this.isRealNode(s.right)&&i.push({node:s.right,depth:o+1}),r=Math.max(r,o)}return r}}getMinHeight(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!e)return-1;if(t==="RECURSIVE"){let i=r=>{if(!this.isRealNode(r)||!this.isRealNode(r.left)&&!this.isRealNode(r.right))return 0;let s=i(r.left),o=i(r.right);return Math.min(s,o)+1};return i(e)}else{let i=[],r=e,s=null,o=new Map;for(;i.length>0||r;)if(this.isRealNode(r))i.push(r),r=r.left;else if(r=i[i.length-1],!this.isRealNode(r.right)||s===r.right){if(r=i.pop(),this.isRealNode(r)){let a=this.isRealNode(r.left)?o.get(r.left):-1,h=this.isRealNode(r.right)?o.get(r.right):-1;o.set(r,1+Math.min(a,h)),s=r,r=null}}else r=r.right;return o.get(e)}}getPathToRoot(e=this._DEFAULT_NODE_CALLBACK,t,i=!0){let r=[],s=this.ensureNode(t);if(!s)return r;for(;s.parent;)r.push(e(s)),s=s.parent;return r.push(e(s)),i?r.reverse():r}getLeftMost(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType){if(this.isNIL(t))return e(void 0);if(t=this.ensureNode(t),!this.isRealNode(t))return e(t);if(i==="RECURSIVE"){let r=s=>this.isRealNode(s.left)?r(s.left):s;return e(r(t))}else{let r=ae(s=>this.isRealNode(s.left)?r.cont(s.left):s);return e(r(t))}}getRightMost(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType){if(this.isNIL(t))return e(void 0);if(t=this.ensureNode(t),!t)return e(t);if(i==="RECURSIVE"){let r=s=>this.isRealNode(s.right)?r(s.right):s;return e(r(t))}else{let r=ae(s=>this.isRealNode(s.right)?r.cont(s.right):s);return e(r(t))}}getPredecessor(e){if(this.isRealNode(e.left)){let t=e.left;for(;!this.isRealNode(t)||this.isRealNode(t.right)&&t.right!==e;)this.isRealNode(t)&&(t=t.right);return t}else return e}getSuccessor(e){if(e=this.ensureNode(e),!this.isRealNode(e))return;if(this.isRealNode(e.right))return this.getLeftMost(i=>i,e.right);let t=e.parent;for(;this.isRealNode(t)&&e===t.right;)e=t,t=t.parent;return t}dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",i=this._root,r=this.iterationType,s=!1){return i=this.ensureNode(i),i?this._dfs(e,t,i,r,s):[]}bfs(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType,r=!1){if(t=this.ensureNode(t),!t)return[];let s=[];if(i==="RECURSIVE"){let o=new K([t]),a=h=>{if(o.size===0)return;let u=o.shift();s.push(e(u)),r?(u&&this.isRealNodeOrNull(u.left)&&o.push(u.left),u&&this.isRealNodeOrNull(u.right)&&o.push(u.right)):(this.isRealNode(u.left)&&o.push(u.left),this.isRealNode(u.right)&&o.push(u.right)),a(h+1)};a(0)}else{let o=new K([t]);for(;o.size>0;){let a=o.size;for(let h=0;h<a;h++){let u=o.shift();s.push(e(u)),r?(u&&this.isRealNodeOrNull(u.left)&&o.push(u.left),u&&this.isRealNodeOrNull(u.right)&&o.push(u.right)):(this.isRealNode(u.left)&&o.push(u.left),this.isRealNode(u.right)&&o.push(u.right))}}}return s}leaves(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType){t=this.ensureNode(t);let r=[];if(!this.isRealNode(t))return[];if(i==="RECURSIVE"){let s=o=>{this.isLeaf(o)&&r.push(e(o)),!(!this.isRealNode(o.left)&&!this.isRealNode(o.right))&&(this.isRealNode(o.left)&&s(o.left),this.isRealNode(o.right)&&s(o.right))};s(t)}else{let s=new K([t]);for(;s.size>0;){let o=s.shift();this.isRealNode(o)&&(this.isLeaf(o)&&r.push(e(o)),this.isRealNode(o.left)&&s.push(o.left),this.isRealNode(o.right)&&s.push(o.right))}}return r}listLevels(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType,r=!1){t=this.ensureNode(t);let s=[];if(!t)return s;if(i==="RECURSIVE"){let o=(a,h)=>{s[h]||(s[h]=[]),s[h].push(e(a)),r?(a&&this.isRealNodeOrNull(a.left)&&o(a.left,h+1),a&&this.isRealNodeOrNull(a.right)&&o(a.right,h+1)):(a&&a.left&&o(a.left,h+1),a&&a.right&&o(a.right,h+1))};o(t,0)}else{let o=[[t,0]];for(;o.length>0;){let a=o.pop(),[h,u]=a;s[u]||(s[u]=[]),s[u].push(e(h)),r?(h&&this.isRealNodeOrNull(h.right)&&o.push([h.right,u+1]),h&&this.isRealNodeOrNull(h.left)&&o.push([h.left,u+1])):(h&&h.right&&o.push([h.right,u+1]),h&&h.left&&o.push([h.left,u+1]))}}return s}morris(e=this._DEFAULT_NODE_CALLBACK,t="IN",i=this._root){if(i=this.ensureNode(i),!i)return[];let r=[],s=i,o=h=>{let u=null,f=null;for(;h;)f=h.right,h.right=u,u=h,h=f;return u},a=h=>{let u=o(h),f=u;for(;f;)r.push(e(f)),f=f.right;o(u)};switch(t){case"IN":for(;s;){if(s.left){let h=this.getPredecessor(s);if(h.right)h.right=null;else{h.right=s,s=s.left;continue}}r.push(e(s)),s=s.right}break;case"PRE":for(;s;){if(s.left){let h=this.getPredecessor(s);if(h.right)h.right=null;else{h.right=s,r.push(e(s)),s=s.left;continue}}else r.push(e(s));s=s.right}break;case"POST":for(;s;){if(s.left){let h=this.getPredecessor(s);if(h.right===null){h.right=s,s=s.left;continue}else h.right=null,a(s.left)}s=s.right}a(i);break}return r}clone(){let e=this.createTree();return this.bfs(t=>{t===null?e.add(null):this._isMapMode?e.add([t.key,this._store.get(t.key)]):e.add([t.key,t.value])},this._root,this.iterationType,!0),this._isMapMode&&(e._store=this._store),e}filter(e,t){let i=this.createTree(),r=0;for(let[s,o]of this)e.call(t,o,s,r++,this)&&i.add([s,o]);return i}map(e,t){let i=this.createTree(),r=0;for(let[s,o]of this)i.add([s,e.call(t,o,s,r++,this)]);return i}toVisual(e=this._root,t){let i=M({isShowUndefined:!1,isShowNull:!0,isShowRedBlackNIL:!1},t);e=this.ensureNode(e);let r="";return e&&(i.isShowUndefined&&(r+=`U for undefined
1
+ "use strict";var dataStructureTyped=(()=>{var oe=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames,Qe=Object.getOwnPropertySymbols;var Ge=Object.prototype.hasOwnProperty,$e=Object.prototype.propertyIsEnumerable;var Ee=(l,n)=>(n=Symbol[l])?n:Symbol.for("Symbol."+l),et=l=>{throw TypeError(l)};var me=(l,n,e)=>n in l?oe(l,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):l[n]=e,M=(l,n)=>{for(var e in n||(n={}))Ge.call(n,e)&&me(l,e,n[e]);if(Qe)for(var e of Qe(n))$e.call(n,e)&&me(l,e,n[e]);return l};var tt=(l,n)=>{for(var e in n)oe(l,e,{get:n[e],enumerable:!0})},it=(l,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of Ze(n))!Ge.call(l,i)&&i!==e&&oe(l,i,{get:()=>n[i],enumerable:!(t=Je(n,i))||t.enumerable});return l};var rt=l=>it(oe({},"__esModule",{value:!0}),l);var d=(l,n,e)=>me(l,typeof n!="symbol"?n+"":n,e);var We=(l,n,e)=>new Promise((t,i)=>{var r=a=>{try{o(e.next(a))}catch(h){i(h)}},s=a=>{try{o(e.throw(a))}catch(h){i(h)}},o=a=>a.done?t(a.value):Promise.resolve(a.value).then(r,s);o((e=e.apply(l,n)).next())}),nt=function(l,n){this[0]=l,this[1]=n};var C=l=>{var n=l[Ee("asyncIterator")],e=!1,t,i={};return n==null?(n=l[Ee("iterator")](),t=r=>i[r]=s=>n[r](s)):(n=n.call(l),t=r=>i[r]=s=>{if(e){if(e=!1,r==="throw")throw s;return s}return e=!0,{done:!1,value:new nt(new Promise(o=>{var a=n[r](s);a instanceof Object||et("Object expected"),o(a)}),1)}}),i[Ee("iterator")]=()=>i,t("next"),"throw"in n?t("throw"):i.throw=r=>{throw r},"return"in n&&t("return"),i};var lt={};tt(lt,{AVLTree:()=>ie,AVLTreeMultiMap:()=>Se,AVLTreeMultiMapNode:()=>ne,AVLTreeNode:()=>U,AbstractEdge:()=>S,AbstractGraph:()=>H,AbstractVertex:()=>k,BST:()=>j,BSTNode:()=>L,BinaryIndexedTree:()=>Be,BinaryTree:()=>te,BinaryTreeNode:()=>A,Character:()=>pe,DFSOperation:()=>Ie,Deque:()=>Ke,DirectedEdge:()=>W,DirectedGraph:()=>ee,DirectedVertex:()=>P,DoublyLinkedList:()=>xe,DoublyLinkedListNode:()=>v,FibonacciHeap:()=>De,FibonacciHeapNode:()=>le,HashMap:()=>Oe,Heap:()=>w,IterableElementBase:()=>T,IterableEntryBase:()=>F,LinkedHashMap:()=>Re,LinkedListQueue:()=>ke,MapEdge:()=>ce,MapGraph:()=>Fe,MapVertex:()=>fe,Matrix:()=>Pe,MaxHeap:()=>ve,MaxPriorityQueue:()=>He,MinHeap:()=>we,MinPriorityQueue:()=>ze,Navigator:()=>je,PriorityQueue:()=>Q,Queue:()=>K,RedBlackTree:()=>re,RedBlackTreeNode:()=>q,SegmentTree:()=>Le,SegmentTreeNode:()=>X,SinglyLinkedList:()=>Z,SinglyLinkedListNode:()=>D,SkipList:()=>Me,SkipListNode:()=>$,Stack:()=>Te,THUNK_SYMBOL:()=>be,TreeMultiMap:()=>Ae,TreeMultiMapNode:()=>se,TreeNode:()=>qe,Trie:()=>Ue,TrieNode:()=>Y,UndirectedEdge:()=>de,UndirectedGraph:()=>Ce,UndirectedVertex:()=>ue,arrayRemove:()=>I,calcMinUnitsRequired:()=>he,getMSB:()=>Ve,isComparable:()=>J,isThunk:()=>Ne,isWeakKey:()=>G,rangeCheck:()=>B,roundFixed:()=>at,throwRangeError:()=>ot,toBinaryString:()=>ht,toThunk:()=>ye,trampoline:()=>ae,trampolineAsync:()=>st,uuidV4:()=>_e});var F=class{*[Symbol.iterator](...n){yield*C(this._getIterator(...n))}*entries(){for(let n of this)yield n}*keys(){for(let n of this)yield n[0]}*values(){for(let n of this)yield n[1]}every(n,e){let t=0;for(let i of this)if(!n.call(e,i[1],i[0],t++,this))return!1;return!0}some(n,e){let t=0;for(let i of this)if(n.call(e,i[1],i[0],t++,this))return!0;return!1}forEach(n,e){let t=0;for(let i of this){let[r,s]=i;n.call(e,s,r,t++,this)}}find(n,e){let t=0;for(let i of this){let[r,s]=i;if(n.call(e,s,r,t++,this))return i}}has(n){for(let e of this){let[t]=e;if(t===n)return!0}return!1}hasValue(n){for(let[,e]of this)if(e===n)return!0;return!1}get(n){for(let e of this){let[t,i]=e;if(t===n)return i}}reduce(n,e){let t=e,i=0;for(let r of this){let[s,o]=r;t=n(t,o,s,i++,this)}return t}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var T=class{constructor(n){d(this,"_toElementFn");if(n){let{toElementFn:e}=n;if(typeof e=="function")this._toElementFn=e;else if(e)throw new TypeError("toElementFn must be a function type")}}get toElementFn(){return this._toElementFn}*[Symbol.iterator](...n){yield*C(this._getIterator(...n))}*values(){for(let n of this)yield n}every(n,e){let t=0;for(let i of this)if(!n.call(e,i,t++,this))return!1;return!0}some(n,e){let t=0;for(let i of this)if(n.call(e,i,t++,this))return!0;return!1}forEach(n,e){let t=0;for(let i of this)n.call(e,i,t++,this)}find(n,e){let t=0;for(let i of this)if(n.call(e,i,t++,this))return i}has(n){for(let e of this)if(e===n)return!0;return!1}reduce(n,e){let t=e,i=0;for(let r of this)t=n(t,r,i++,this);return t}toVisual(){return[...this]}print(){console.log(this.toVisual())}};var _e=function(){return"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".replace(/[x]/g,function(l){let n=Math.random()*16|0;return(l=="x"?n:n&3|8).toString(16)})},I=function(l,n){let e=-1,t=l?l.length:0,i=[];for(;++e<t;){let r=l[e];n(r,e,l)&&(i.push(r),Array.prototype.splice.call(l,e--,1),t--)}return i},be=Symbol("thunk"),Ne=l=>typeof l=="function"&&l.__THUNK__===be,ye=l=>{let n=()=>l();return n.__THUNK__=be,n},ae=l=>Object.assign((...e)=>{let t=l(...e);for(;Ne(t)&&typeof t=="function";)t=t();return t},{cont:(...e)=>ye(()=>l(...e))}),st=l=>Object.assign((...e)=>We(void 0,null,function*(){let t=yield l(...e);for(;Ne(t)&&typeof t=="function";)t=yield t();return t}),{cont:(...e)=>ye(()=>l(...e))}),Ve=l=>l<=0?0:1<<31-Math.clz32(l),B=(l,n,e,t="Index out of bounds.")=>{if(l<n||l>e)throw new RangeError(t)},ot=(l="The value is off-limits.")=>{throw new RangeError(l)},G=l=>{let n=typeof l;return n==="object"&&l!==null||n==="function"},he=(l,n)=>Math.floor((l+n-1)/n),at=(l,n=10)=>{let e=Math.pow(10,n);return Math.round(l*e)/e};function ge(l){let n=typeof l;return n==="number"?!Number.isNaN(l):n==="bigint"||n==="string"||n==="boolean"}function Xe(l){if(typeof l.valueOf=="function"){let n=l.valueOf();if(n!==l){if(ge(n))return n;if(typeof n=="object"&&n!==null)return Xe(n)}}if(typeof l.toString=="function"){let n=l.toString();if(n!=="[object Object]")return n}return null}function J(l,n=!1){if(l==null)return!1;if(ge(l))return!0;if(typeof l!="object")return!1;if(l instanceof Date)return!Number.isNaN(l.getTime());if(n)return!0;let e=Xe(l);return e==null?!1:ge(e)}function ht(l,n=32){let e=(l>>>0).toString(2);return e=e.padStart(n,"0"),e}var Oe=class l extends F{constructor(e=[],t){super();d(this,"_store",{});d(this,"_objMap",new Map);d(this,"_toEntryFn");d(this,"_size",0);d(this,"_hashFn",e=>String(e));if(t){let{hashFn:i,toEntryFn:r}=t;i&&(this._hashFn=i),r&&(this._toEntryFn=r)}e&&this.setMany(e)}get store(){return this._store}get objMap(){return this._objMap}get toEntryFn(){return this._toEntryFn}get size(){return this._size}get hashFn(){return this._hashFn}isEntry(e){return Array.isArray(e)&&e.length===2}isEmpty(){return this._size===0}clear(){this._store={},this._objMap.clear(),this._size=0}set(e,t){if(this._isObjKey(e))this.objMap.has(e)||this._size++,this.objMap.set(e,t);else{let i=this._getNoObjKey(e);this.store[i]===void 0&&this._size++,this._store[i]={key:e,value:t}}return!0}setMany(e){let t=[];for(let i of e){let r,s;if(this.isEntry(i))r=i[0],s=i[1];else if(this._toEntryFn){let o=this._toEntryFn(i);r=o[0],s=o[1]}r!==void 0&&s!==void 0&&t.push(this.set(r,s))}return t}get(e){var t;if(this._isObjKey(e))return this.objMap.get(e);{let i=this._getNoObjKey(e);return(t=this._store[i])==null?void 0:t.value}}has(e){return this._isObjKey(e)?this.objMap.has(e):this._getNoObjKey(e)in this.store}delete(e){if(this._isObjKey(e))return this.objMap.has(e)&&this._size--,this.objMap.delete(e);{let t=this._getNoObjKey(e);return t in this.store?(delete this.store[t],this._size--,!0):!1}}clone(){return new l(this,{hashFn:this._hashFn,toEntryFn:this._toEntryFn})}map(e,t){let i=new l,r=0;for(let[s,o]of this)i.set(s,e.call(t,o,s,r++,this));return i}filter(e,t){let i=new l,r=0;for(let[s,o]of this)e.call(t,o,s,r++,this)&&i.set(s,o);return i}*_getIterator(){for(let e of Object.values(this.store))yield[e.key,e.value];for(let e of this.objMap)yield e}_isObjKey(e){let t=typeof e;return(t==="object"||t==="function")&&e!==null}_getNoObjKey(e){let t=typeof e,i;return t!=="string"&&t!=="number"&&t!=="symbol"?i=this._hashFn(e):i=e,i}},Re=class l extends F{constructor(e=[],t){super();d(this,"_sentinel");d(this,"_hashFn",e=>String(e));d(this,"_objHashFn",e=>e);d(this,"_noObjMap",{});d(this,"_objMap",new WeakMap);d(this,"_head");d(this,"_tail");d(this,"_toEntryFn",e=>{if(this.isEntry(e))return e;throw new Error("If the provided entryOrRawElements does not adhere to the [key, value] type format, the toEntryFn in the constructor's options parameter needs to specified.")});d(this,"_size",0);if(this._sentinel={},this._sentinel.prev=this._sentinel.next=this._head=this._tail=this._sentinel,t){let{hashFn:i,objHashFn:r,toEntryFn:s}=t;i&&(this._hashFn=i),r&&(this._objHashFn=r),s&&(this._toEntryFn=s)}e&&this.setMany(e)}get hashFn(){return this._hashFn}get objHashFn(){return this._objHashFn}get noObjMap(){return this._noObjMap}get objMap(){return this._objMap}get head(){return this._head}get tail(){return this._tail}get toEntryFn(){return this._toEntryFn}get size(){return this._size}get first(){if(this._size!==0)return[this.head.key,this.head.value]}get last(){if(this._size!==0)return[this.tail.key,this.tail.value]}*begin(){let e=this.head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}*reverseBegin(){let e=this.tail;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.prev}set(e,t){let i,r=!this.has(e);if(G(e)){let s=this._objHashFn(e);i=this.objMap.get(s),!i&&r?(i={key:s,value:t,prev:this.tail,next:this._sentinel},this.objMap.set(s,i)):i&&(i.value=t)}else{let s=this._hashFn(e);i=this.noObjMap[s],!i&&r?this.noObjMap[s]=i={key:e,value:t,prev:this.tail,next:this._sentinel}:i&&(i.value=t)}return i&&r&&(this._size===0?(this._head=i,this._sentinel.next=i):(this.tail.next=i,i.prev=this.tail),this._tail=i,this._sentinel.prev=i,this._size++),!0}setMany(e){let t=[];for(let i of e){let r,s;if(this.isEntry(i))r=i[0],s=i[1];else if(this._toEntryFn){let o=this._toEntryFn(i);r=o[0],s=o[1]}r!==void 0&&s!==void 0&&t.push(this.set(r,s))}return t}has(e){if(G(e)){let t=this._objHashFn(e);return this.objMap.has(t)}else return this._hashFn(e)in this.noObjMap}get(e){if(G(e)){let t=this._objHashFn(e),i=this.objMap.get(t);return i?i.value:void 0}else{let t=this._hashFn(e),i=this.noObjMap[t];return i?i.value:void 0}}at(e){B(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return t.value}delete(e){let t;if(G(e)){let i=this._objHashFn(e);if(t=this.objMap.get(i),!t)return!1;this.objMap.delete(i)}else{let i=this._hashFn(e);if(t=this.noObjMap[i],!t)return!1;delete this.noObjMap[i]}return this._deleteNode(t),!0}deleteAt(e){B(e,0,this._size-1);let t=this.head;for(;e--;)t=t.next;return this._deleteNode(t)}isEmpty(){return this._size===0}isEntry(e){return Array.isArray(e)&&e.length===2}clear(){this._noObjMap={},this._size=0,this._head=this._tail=this._sentinel.prev=this._sentinel.next=this._sentinel}clone(){let e=new l([],{hashFn:this._hashFn,objHashFn:this._objHashFn});for(let t of this){let[i,r]=t;e.set(i,r)}return e}filter(e,t){let i=new l,r=0;for(let[s,o]of this)e.call(t,o,s,r,this)&&i.set(s,o),r++;return i}map(e,t){let i=new l,r=0;for(let[s,o]of this){let a=e.call(t,o,s,r,this);i.set(s,a),r++}return i}*_getIterator(){let e=this.head;for(;e!==this._sentinel;)yield[e.key,e.value],e=e.next}_deleteNode(e){let{prev:t,next:i}=e;return t.next=i,i.prev=t,e===this.head&&(this._head=i),e===this.tail&&(this._tail=t),this._size-=1,!0}};var D=class{constructor(n){d(this,"_value");d(this,"_next");this._value=n,this._next=void 0}get value(){return this._value}set value(n){this._value=n}get next(){return this._next}set next(n){this._next=n}},Z=class l extends T{constructor(e=[],t){super(t);d(this,"_head");d(this,"_tail");d(this,"_size",0);if(e)for(let i of e)this.toElementFn?this.push(this.toElementFn(i)):this.push(i)}get head(){return this._head}get tail(){return this._tail}get first(){var e;return(e=this.head)==null?void 0:e.value}get last(){var e;return(e=this.tail)==null?void 0:e.value}get size(){return this._size}static fromArray(e){let t=new l;for(let i of e)t.push(i);return t}push(e){let t=new D(e);return this.head?(this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._size++,!0}pop(){if(!this.head)return;if(this.head===this.tail){let i=this.head.value;return this._head=void 0,this._tail=void 0,this._size--,i}let e=this.head;for(;e.next!==this.tail;)e=e.next;let t=this.tail.value;return e.next=void 0,this._tail=e,this._size--,t}shift(){if(!this.head)return;let e=this.head;return this._head=this.head.next,this._size--,e.value}unshift(e){let t=new D(e);return this.head?(t.next=this.head,this._head=t):(this._head=t,this._tail=t),this._size++,!0}at(e){if(e<0||e>=this._size)return;let t=this.head;for(let i=0;i<e;i++)t=t.next;return t.value}getNodeAt(e){let t=this.head;for(let i=0;i<e;i++)t=t.next;return t}deleteAt(e){if(e<0||e>=this._size)return!1;if(e===0)return this.shift(),!0;if(e===this._size-1)return this.pop(),!0;let t=this.getNodeAt(e-1),i=t.next;return t.next=i.next,this._size--,!0}delete(e){if(e===void 0)return!1;let t;e instanceof D?t=e.value:t=e;let i=this.head,r;for(;i;){if(i.value===t)return r===void 0?(this._head=i.next,i===this.tail&&(this._tail=void 0)):(r.next=i.next,i===this.tail&&(this._tail=r)),this._size--,!0;r=i,i=i.next}return!1}addAt(e,t){if(e<0||e>this._size)return!1;if(e===0)return this.unshift(t),!0;if(e===this._size)return this.push(t),!0;let i=new D(t),r=this.getNodeAt(e-1);return i.next=r.next,r.next=i,this._size++,!0}isEmpty(){return this._size===0}clear(){this._head=void 0,this._tail=void 0,this._size=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 this;let e,t=this.head,i;for(;t;)i=t.next,t.next=e,e=t,t=i;return[this._head,this._tail]=[this.tail,this.head],this}indexOf(e){let t=0,i=this.head;for(;i;){if(i.value===e)return t;t++,i=i.next}return-1}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}}addBefore(e,t){if(!this.head)return!1;let i;if(e instanceof D?i=e.value:i=e,this.head.value===i)return this.unshift(t),!0;let r=this.head;for(;r.next;){if(r.next.value===i){let s=new D(t);return s.next=r.next,r.next=s,this._size++,!0}r=r.next}return!1}addAfter(e,t){let i;if(e instanceof D?i=e:i=this.getNode(e),i){let r=new D(t);return r.next=i.next,i.next=r,i===this.tail&&(this._tail=r),this._size++,!0}return!1}countOccurrences(e){let t=0,i=this.head;for(;i;)i.value===e&&t++,i=i.next;return t}clone(){return new l(this,{toElementFn:this.toElementFn})}filter(e,t){let i=new l([],{toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}};var v=class{constructor(n){d(this,"_value");d(this,"_next");d(this,"_prev");this._value=n,this._next=void 0,this._prev=void 0}get value(){return this._value}set value(n){this._value=n}get next(){return this._next}set next(n){this._next=n}get prev(){return this._prev}set prev(n){this._prev=n}},xe=class l extends T{constructor(e=[],t){super(t);d(this,"_head");d(this,"_tail");d(this,"_size");if(this._head=void 0,this._tail=void 0,this._size=0,e)for(let i of e)this.toElementFn?this.push(this.toElementFn(i)):this.push(i)}get head(){return this._head}get tail(){return this._tail}get size(){return this._size}get first(){var e;return(e=this.head)==null?void 0:e.value}get last(){var e;return(e=this.tail)==null?void 0:e.value}static fromArray(e){return new l(e)}push(e){let t=new v(e);return this.head?(t.prev=this.tail,this.tail.next=t,this._tail=t):(this._head=t,this._tail=t),this._size++,!0}pop(){if(!this.tail)return;let e=this.tail;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._tail=e.prev,this.tail.next=void 0),this._size--,e.value}shift(){if(!this.head)return;let e=this.head;return this.head===this.tail?(this._head=void 0,this._tail=void 0):(this._head=e.next,this.head.prev=void 0),this._size--,e.value}unshift(e){let t=new v(e);return this.head?(t.next=this.head,this.head.prev=t,this._head=t):(this._head=t,this._tail=t),this._size++,!0}at(e){if(e<0||e>=this._size)return;let t=this.head;for(let i=0;i<e;i++)t=t.next;return t.value}getNodeAt(e){if(e<0||e>=this._size)return;let t=this.head;for(let i=0;i<e;i++)t=t.next;return t}getNode(e){let t=this.head;for(;t;){if(t.value===e)return t;t=t.next}}addAt(e,t){if(e<0||e>this._size)return!1;if(e===0)return this.unshift(t),!0;if(e===this._size)return this.push(t),!0;let i=new v(t),r=this.getNodeAt(e-1),s=r.next;return i.prev=r,i.next=s,r.next=i,s.prev=i,this._size++,!0}addBefore(e,t){let i;if(e instanceof v?i=e:i=this.getNode(e),i){let r=new v(t);return r.prev=i.prev,i.prev&&(i.prev.next=r),r.next=i,i.prev=r,i===this.head&&(this._head=r),this._size++,!0}return!1}addAfter(e,t){let i;if(e instanceof v?i=e:i=this.getNode(e),i){let r=new v(t);return r.next=i.next,i.next&&(i.next.prev=r),r.prev=i,i.next=r,i===this.tail&&(this._tail=r),this._size++,!0}return!1}deleteAt(e){if(e<0||e>=this._size)return!1;if(e===0)return this.shift(),!0;if(e===this._size-1)return this.pop(),!0;let t=this.getNodeAt(e),i=t.prev,r=t.next;return i.next=r,r.prev=i,this._size--,!0}delete(e){let t;if(e instanceof v?t=e:t=this.getNode(e),t){if(t===this.head)this.shift();else if(t===this.tail)this.pop();else{let i=t.prev,r=t.next;i&&(i.next=r),r&&(r.prev=i),this._size--}return!0}return!1}isEmpty(){return this._size===0}clear(){this._head=void 0,this._tail=void 0,this._size=0}indexOf(e){let t=0,i=this.head;for(;i;){if(i.value===e)return t;t++,i=i.next}return-1}findBackward(e){let t=this.tail;for(;t;){if(e(t.value))return t.value;t=t.prev}}reverse(){let e=this.head;for([this._head,this._tail]=[this.tail,this.head];e;){let t=e.next;[e.prev,e.next]=[e.next,e.prev],e=t}return this}toArray(){let e=[],t=this.head;for(;t;)e.push(t.value),t=t.next;return e}toReversedArray(){let e=[],t=this.tail;for(;t;)e.push(t.value),t=t.prev;return e}clone(){return new l(this)}filter(e,t){let i=new l([],{toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){let e=this.head;for(;e;)yield e.value,e=e.next}};var $=class{constructor(n,e,t){d(this,"key");d(this,"value");d(this,"forward");this.key=n,this.value=e,this.forward=new Array(t)}},Me=class{constructor(n=[],e){d(this,"_head",new $(void 0,void 0,this.maxLevel));d(this,"_level",0);d(this,"_maxLevel",16);d(this,"_probability",.5);if(e){let{maxLevel:t,probability:i}=e;typeof t=="number"&&(this._maxLevel=t),typeof i=="number"&&(this._probability=i)}if(n)for(let[t,i]of n)this.add(t,i)}get head(){return this._head}get level(){return this._level}get maxLevel(){return this._maxLevel}get probability(){return this._probability}get first(){let n=this.head.forward[0];return n?n.value:void 0}get last(){let n=this.head;for(let e=this.level-1;e>=0;e--)for(;n.forward[e];)n=n.forward[e];return n.value}add(n,e){let t=new $(n,e,this._randomLevel()),i=new Array(this.maxLevel).fill(this.head),r=this.head;for(let s=this.level-1;s>=0;s--){for(;r.forward[s]&&r.forward[s].key<n;)r=r.forward[s];i[s]=r}for(let s=0;s<t.forward.length;s++)t.forward[s]=i[s].forward[s],i[s].forward[s]=t;t.forward[0]||(this._level=Math.max(this.level,t.forward.length))}get(n){let e=this.head;for(let t=this.level-1;t>=0;t--)for(;e.forward[t]&&e.forward[t].key<n;)e=e.forward[t];if(e=e.forward[0],e&&e.key===n)return e.value}has(n){return this.get(n)!==void 0}delete(n){let e=new Array(this.maxLevel).fill(this.head),t=this.head;for(let i=this.level-1;i>=0;i--){for(;t.forward[i]&&t.forward[i].key<n;)t=t.forward[i];e[i]=t}if(t=t.forward[0],t&&t.key===n){for(let i=0;i<this.level&&e[i].forward[i]===t;i++)e[i].forward[i]=t.forward[i];for(;this.level>0&&!this.head.forward[this.level-1];)this._level--;return!0}return!1}higher(n){let e=this.head;for(let i=this.level-1;i>=0;i--)for(;e.forward[i]&&e.forward[i].key<=n;)e=e.forward[i];let t=e.forward[0];return t?t.value:void 0}lower(n){let e=this.head,t;for(let i=this.level-1;i>=0;i--){for(;e.forward[i]&&e.forward[i].key<n;)e=e.forward[i];e.key<n&&(t=e)}return t?t.value:void 0}_randomLevel(){let n=1;for(;Math.random()<this.probability&&n<this.maxLevel;)n++;return n}};var Te=class l extends T{constructor(e=[],t){super(t);d(this,"_elements",[]);if(e)for(let i of e)this.toElementFn?this.push(this.toElementFn(i)):this.push(i)}get elements(){return this._elements}get size(){return this.elements.length}static fromArray(e){return new l(e)}isEmpty(){return this.elements.length===0}peek(){if(!this.isEmpty())return this.elements[this.elements.length-1]}push(e){return this.elements.push(e),!0}pop(){if(!this.isEmpty())return this.elements.pop()}delete(e){let t=this.elements.indexOf(e);return this.deleteAt(t)}deleteAt(e){return this.elements.splice(e,1).length===1}toArray(){return this.elements.slice()}clear(){this._elements=[]}clone(){return new l(this,{toElementFn:this.toElementFn})}filter(e,t){let i=new l([],{toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){for(let e=0;e<this.elements.length;e++)yield this.elements[e]}};var K=class l extends T{constructor(e=[],t){super(t);d(this,"_elements",[]);d(this,"_offset",0);d(this,"_autoCompactRatio",.5);if(t){let{autoCompactRatio:i=.5}=t;this._autoCompactRatio=i}if(e)for(let i of e)this.toElementFn?this.push(this.toElementFn(i)):this.push(i)}get elements(){return this._elements}get offset(){return this._offset}get size(){return this.elements.length-this.offset}get first(){return this.size>0?this.elements[this.offset]:void 0}get last(){return this.size>0?this.elements[this.elements.length-1]:void 0}get autoCompactRatio(){return this._autoCompactRatio}set autoCompactRatio(e){this._autoCompactRatio=e}static fromArray(e){return new l(e)}push(e){return this.elements.push(e),!0}shift(){if(this.size===0)return;let e=this.first;return this._offset+=1,this.offset/this.elements.length>this.autoCompactRatio&&this.compact(),e}delete(e){let t=this.elements.indexOf(e);return this.deleteAt(t)}deleteAt(e){return this.elements.splice(e,1).length===1}at(e){return this.elements[e+this._offset]}isEmpty(){return this.size===0}toArray(){return this.elements.slice(this.offset)}clear(){this._elements=[],this._offset=0}compact(){return this._elements=this.elements.slice(this.offset),this._offset=0,!0}clone(){return new l(this.elements.slice(this.offset),{toElementFn:this.toElementFn})}filter(e,t){let i=new l([],{toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){for(let e of this.elements.slice(this.offset))yield e}},ke=class l extends Z{clone(){return new l(this,{toElementFn:this.toElementFn})}};var Ke=class l extends T{constructor(e=[],t){super(t);d(this,"_bucketSize",4096);d(this,"_maxLen",-1);d(this,"_bucketFirst",0);d(this,"_firstInBucket",0);d(this,"_bucketLast",0);d(this,"_lastInBucket",0);d(this,"_bucketCount",0);d(this,"_buckets",[]);d(this,"_size",0);if(t){let{bucketSize:s,maxLen:o}=t;typeof s=="number"&&(this._bucketSize=s),typeof o=="number"&&o>0&&o%1===0&&(this._maxLen=o)}let i;"length"in e?e.length instanceof Function?i=e.length():i=e.length:e.size instanceof Function?i=e.size():i=e.size,this._bucketCount=he(i,this._bucketSize)||1;for(let s=0;s<this._bucketCount;++s)this._buckets.push(new Array(this._bucketSize));let r=he(i,this._bucketSize);this._bucketFirst=this._bucketLast=(this._bucketCount>>1)-(r>>1),this._firstInBucket=this._lastInBucket=this._bucketSize-i%this._bucketSize>>1;for(let s of e)this.toElementFn?this.push(this.toElementFn(s)):this.push(s)}get bucketSize(){return this._bucketSize}get maxLen(){return this._maxLen}get bucketFirst(){return this._bucketFirst}get firstInBucket(){return this._firstInBucket}get bucketLast(){return this._bucketLast}get lastInBucket(){return this._lastInBucket}get bucketCount(){return this._bucketCount}get buckets(){return this._buckets}get size(){return this._size}get first(){if(this._size!==0)return this._buckets[this._bucketFirst][this._firstInBucket]}get last(){if(this._size!==0)return this._buckets[this._bucketLast][this._lastInBucket]}push(e){return this._size&&(this._lastInBucket<this._bucketSize-1?this._lastInBucket+=1:this._bucketLast<this._bucketCount-1?(this._bucketLast+=1,this._lastInBucket=0):(this._bucketLast=0,this._lastInBucket=0),this._bucketLast===this._bucketFirst&&this._lastInBucket===this._firstInBucket&&this._reallocate()),this._size+=1,this._buckets[this._bucketLast][this._lastInBucket]=e,this._maxLen>0&&this._size>this._maxLen&&this.shift(),!0}pop(){if(this._size===0)return;let e=this._buckets[this._bucketLast][this._lastInBucket];return this._size!==1&&(this._lastInBucket>0?this._lastInBucket-=1:this._bucketLast>0?(this._bucketLast-=1,this._lastInBucket=this._bucketSize-1):(this._bucketLast=this._bucketCount-1,this._lastInBucket=this._bucketSize-1)),this._size-=1,e}unshift(e){return this._size&&(this._firstInBucket>0?this._firstInBucket-=1:this._bucketFirst>0?(this._bucketFirst-=1,this._firstInBucket=this._bucketSize-1):(this._bucketFirst=this._bucketCount-1,this._firstInBucket=this._bucketSize-1),this._bucketFirst===this._bucketLast&&this._firstInBucket===this._lastInBucket&&this._reallocate()),this._size+=1,this._buckets[this._bucketFirst][this._firstInBucket]=e,this._maxLen>0&&this._size>this._maxLen&&this.pop(),!0}shift(){if(this._size===0)return;let e=this._buckets[this._bucketFirst][this._firstInBucket];return this._size!==1&&(this._firstInBucket<this._bucketSize-1?this._firstInBucket+=1:this._bucketFirst<this._bucketCount-1?(this._bucketFirst+=1,this._firstInBucket=0):(this._bucketFirst=0,this._firstInBucket=0)),this._size-=1,e}isEmpty(){return this._size===0}clear(){this._buckets=[new Array(this._bucketSize)],this._bucketCount=1,this._bucketFirst=this._bucketLast=this._size=0,this._firstInBucket=this._lastInBucket=this._bucketSize>>1}*begin(){let e=0;for(;e<this._size;)yield this.at(e),e++}*reverseBegin(){let e=this._size-1;for(;e>=0;)yield this.at(e),e--}at(e){B(e,0,this._size-1);let{bucketIndex:t,indexInBucket:i}=this._getBucketAndPosition(e);return this._buckets[t][i]}setAt(e,t){B(e,0,this._size-1);let{bucketIndex:i,indexInBucket:r}=this._getBucketAndPosition(e);return this._buckets[i][r]=t,!0}addAt(e,t,i=1){let r=this._size;if(B(e,0,r),e===0)for(;i--;)this.unshift(t);else if(e===this._size)for(;i--;)this.push(t);else{let s=[];for(let o=e;o<this._size;++o)s.push(this.at(o));this.cut(e-1,!0);for(let o=0;o<i;++o)this.push(t);for(let o=0;o<s.length;++o)this.push(s[o])}return!0}cut(e,t=!1){if(t){if(e<0)return this.clear(),this;let{bucketIndex:i,indexInBucket:r}=this._getBucketAndPosition(e);return this._bucketLast=i,this._lastInBucket=r,this._size=e+1,this}else{let i=new l([],{bucketSize:this._bucketSize});for(let r=0;r<=e;r++)i.push(this.at(r));return i}}cutRest(e,t=!1){if(t){if(e<0)return this;let{bucketIndex:i,indexInBucket:r}=this._getBucketAndPosition(e);return this._bucketFirst=i,this._firstInBucket=r,this._size=this._size-e,this}else{let i=new l([],{bucketSize:this._bucketSize});e<0&&(e=0);for(let r=e;r<this._size;r++)i.push(this.at(r));return i}}deleteAt(e){if(B(e,0,this._size-1),e===0)this.shift();else if(e===this._size-1)this.pop();else{let t=this._size-1,{bucketIndex:i,indexInBucket:r}=this._getBucketAndPosition(e);for(let s=e;s<t;++s){let{bucketIndex:o,indexInBucket:a}=this._getBucketAndPosition(e+1);this._buckets[i][r]=this._buckets[o][a],i=o,r=a}this.pop()}return!0}delete(e){let t=this._size;if(t===0)return!1;let i=0,r=0;for(;i<t;){let s=this.at(i);s!==e&&(this.setAt(r,s),r+=1),i+=1}return this.cut(r-1,!0),!0}reverse(){this._buckets.reverse().forEach(function(s){s.reverse()});let{_bucketFirst:e,_bucketLast:t,_firstInBucket:i,_lastInBucket:r}=this;return this._bucketFirst=this._bucketCount-t-1,this._bucketLast=this._bucketCount-e-1,this._firstInBucket=this._bucketSize-r-1,this._lastInBucket=this._bucketSize-i-1,this}unique(){if(this._size<=1)return this;let e=1,t=this.at(0);for(let i=1;i<this._size;++i){let r=this.at(i);r!==t&&(t=r,this.setAt(e++,r))}return this.cut(e-1,!0),this}sort(e){let t=[];for(let i=0;i<this._size;++i)t.push(this.at(i));t.sort(e);for(let i=0;i<this._size;++i)this.setAt(i,t[i]);return this}shrinkToFit(){if(this._size===0)return;let e=[];if(this._bucketFirst!==this._bucketLast){if(this._bucketFirst<this._bucketLast)for(let t=this._bucketFirst;t<=this._bucketLast;++t)e.push(this._buckets[t]);else{for(let t=this._bucketFirst;t<this._bucketCount;++t)e.push(this._buckets[t]);for(let t=0;t<=this._bucketLast;++t)e.push(this._buckets[t])}this._bucketFirst=0,this._bucketLast=e.length-1,this._buckets=e}}indexOf(e){for(let t=0;t<this._size;++t)if(this.at(t)===e)return t;return-1}toArray(){return[...this]}clone(){return new l(this,{bucketSize:this.bucketSize,toElementFn:this.toElementFn})}filter(e,t){let i=new l([],{bucketSize:this._bucketSize,toElementFn:this.toElementFn}),r=0;for(let s of this)e.call(t,s,r,this)&&i.push(s),r++;return i}map(e,t,i){let r=new l([],{bucketSize:this._bucketSize,toElementFn:t}),s=0;for(let o of this)r.push(e.call(i,o,s,this)),s++;return r}*_getIterator(){for(let e=0;e<this._size;++e)yield this.at(e)}_reallocate(e){let t=[],i=e||this._bucketCount>>1||1;for(let r=0;r<i;++r)t[r]=new Array(this._bucketSize);for(let r=this._bucketFirst;r<this._bucketCount;++r)t[t.length]=this._buckets[r];for(let r=0;r<this._bucketLast;++r)t[t.length]=this._buckets[r];t[t.length]=[...this._buckets[this._bucketLast]],this._bucketFirst=i,this._bucketLast=t.length-1;for(let r=0;r<i;++r)t[t.length]=new Array(this._bucketSize);this._buckets=t,this._bucketCount=t.length}_getBucketAndPosition(e){let t,i,r=this._firstInBucket+e;return t=this._bucketFirst+Math.floor(r/this._bucketSize),t>=this._bucketCount&&(t-=this._bucketCount),i=(r+1)%this._bucketSize-1,i<0&&(i=this._bucketSize-1),{bucketIndex:t,indexInBucket:i}}};var w=class l extends T{constructor(e=[],t){super(t);d(this,"_elements",[]);d(this,"_DEFAULT_COMPARATOR",(e,t)=>{if(typeof e=="object"||typeof t=="object")throw TypeError("When comparing object types, a custom comparator must be defined in the constructor's options parameter.");return e>t?1:e<t?-1:0});d(this,"_comparator",this._DEFAULT_COMPARATOR);if(t){let{comparator:i}=t;i&&(this._comparator=i)}if(e)for(let i of e)this.toElementFn?this.add(this.toElementFn(i)):this.add(i)}get elements(){return this._elements}get size(){return this.elements.length}get leaf(){var e;return(e=this.elements[this.size-1])!=null?e:void 0}static heapify(e,t){return new l(e,t)}add(e){return this._elements.push(e),this._bubbleUp(this.elements.length-1)}poll(){if(this.elements.length===0)return;let e=this.elements[0],t=this.elements.pop();return this.elements.length&&(this.elements[0]=t,this._sinkDown(0,this.elements.length>>1)),e}peek(){return this.elements[0]}isEmpty(){return this.size===0}clear(){this._elements=[]}refill(e){return this._elements=e,this.fix()}has(e){return this.elements.includes(e)}delete(e){let t=this.elements.indexOf(e);return t<0?!1:(t===0?this.poll():t===this.elements.length-1?this.elements.pop():(this.elements.splice(t,1,this.elements.pop()),this._bubbleUp(t),this._sinkDown(t,this.elements.length>>1)),!0)}dfs(e="PRE"){let t=[],i=r=>{let s=2*r+1,o=s+1;r<this.size&&(e==="IN"?(i(s),t.push(this.elements[r]),i(o)):e==="PRE"?(t.push(this.elements[r]),i(s),i(o)):e==="POST"&&(i(s),i(o),t.push(this.elements[r])))};return i(0),t}toArray(){return[...this.elements]}clone(){return new l(this,{comparator:this.comparator,toElementFn:this.toElementFn})}sort(){let e=[],t=new l(this,{comparator:this.comparator});for(;t.size!==0;){let i=t.poll();i!==void 0&&e.push(i)}return e}fix(){let e=[];for(let t=Math.floor(this.size/2);t>=0;t--)e.push(this._sinkDown(t,this.elements.length>>1));return e}filter(e,t){let i=new l([],{toElementFn:this.toElementFn,comparator:this.comparator}),r=0;for(let s of this)e.call(t,s,r,this)&&i.add(s),r++;return i}map(e,t,i,r){let s=new l([],{comparator:t,toElementFn:i}),o=0;for(let a of this)s.add(e.call(r,a,o,this)),o++;return s}get comparator(){return this._comparator}*_getIterator(){for(let e of this.elements)yield e}_bubbleUp(e){let t=this.elements[e];for(;e>0;){let i=e-1>>1,r=this.elements[i];if(this.comparator(r,t)<=0)break;this.elements[e]=r,e=i}return this.elements[e]=t,!0}_sinkDown(e,t){let i=this.elements[e];for(;e<t;){let r=e<<1|1,s=r+1,o=this.elements[r];if(s<this.elements.length&&this.comparator(o,this.elements[s])>0&&(r=s,o=this.elements[s]),this.comparator(o,i)>=0)break;this.elements[e]=o,e=r}return this.elements[e]=i,!0}},le=class{constructor(n,e=0){d(this,"element");d(this,"degree");d(this,"left");d(this,"right");d(this,"child");d(this,"parent");d(this,"marked");this.element=n,this.degree=e,this.marked=!1}},De=class{constructor(n){d(this,"_root");d(this,"_size",0);d(this,"_min");d(this,"_comparator");if(this.clear(),this._comparator=n||this._defaultComparator,typeof this.comparator!="function")throw new Error("FibonacciHeap constructor: given comparator should be a function.")}get root(){return this._root}get size(){return this._size}get min(){return this._min}get comparator(){return this._comparator}clear(){this._root=void 0,this._min=void 0,this._size=0}add(n){return this.push(n)}push(n){let e=this.createNode(n);return e.left=e,e.right=e,this.mergeWithRoot(e),(!this.min||this.comparator(e.element,this.min.element)<=0)&&(this._min=e),this._size++,this}peek(){return this.min?this.min.element:void 0}consumeLinkedList(n){let e=[];if(!n)return e;let t=n,i=!1;for(;!(t===n&&i);)t===n&&(i=!0),t&&(e.push(t),t=t.right);return e}mergeWithChild(n,e){n.child?(e.right=n.child.right,e.left=n.child,n.child.right.left=e,n.child.right=e):n.child=e}poll(){return this.pop()}pop(){if(this._size===0)return;let n=this.min;if(n.child){let e=this.consumeLinkedList(n.child);for(let t of e)this.mergeWithRoot(t),t.parent=void 0}return this.removeFromRoot(n),n===n.right?(this._min=void 0,this._root=void 0):(this._min=n.right,this._consolidate()),this._size--,n.element}merge(n){if(n.size!==0){if(this.root&&n.root){let e=this.root,t=n.root,i=e.right,r=t.left;e.right=t,t.left=e,i.left=r,r.right=i}(!this.min||n.min&&this.comparator(n.min.element,this.min.element)<0)&&(this._min=n.min),this._size+=n.size,n.clear()}}createNode(n){return new le(n)}_defaultComparator(n,e){return n<e?-1:n>e?1:0}mergeWithRoot(n){this.root?(n.right=this.root.right,n.left=this.root,this.root.right.left=n,this.root.right=n):this._root=n}removeFromRoot(n){this.root===n&&(this._root=n.right),n.left&&(n.left.right=n.right),n.right&&(n.right.left=n.left)}_link(n,e){this.removeFromRoot(n),n.left=n,n.right=n,this.mergeWithChild(e,n),e.degree++,n.parent=e}_consolidate(){let n=new Array(this._size),e=this.consumeLinkedList(this.root),t,i,r,s;for(let o of e){for(t=o,r=t.degree;n[r];)i=n[r],this.comparator(t.element,i.element)>0&&(s=t,t=i,i=s),this._link(i,t),n[r]=void 0,r++;n[r]=t}for(let o=0;o<this._size;o++)n[o]&&this.comparator(n[o].element,this.min.element)<=0&&(this._min=n[o])}};var ve=class l extends w{constructor(n=[],e){super(n,M({comparator:(t,i)=>{if(typeof t=="object"||typeof i=="object")throw TypeError("When comparing object types, a custom comparator must be defined in the constructor's options parameter.");return t<i?1:t>i?-1:0}},e))}clone(){return new l(this,{comparator:this.comparator,toElementFn:this.toElementFn})}filter(n,e){let t=new l([],{toElementFn:this.toElementFn,comparator:this.comparator}),i=0;for(let r of this)n.call(e,r,i,this)&&t.add(r),i++;return t}map(n,e,t,i){let r=new l([],{comparator:e,toElementFn:t}),s=0;for(let o of this)r.add(n.call(i,o,s,this)),s++;return r}};var we=class l extends w{constructor(n=[],e){super(n,e)}clone(){return new l(this,{comparator:this.comparator,toElementFn:this.toElementFn})}filter(n,e){let t=new l([],{toElementFn:this.toElementFn,comparator:this.comparator}),i=0;for(let r of this)n.call(e,r,i,this)&&t.add(r),i++;return t}map(n,e,t,i){let r=new l([],{comparator:e,toElementFn:t}),s=0;for(let o of this)r.add(n.call(i,o,s,this)),s++;return r}};var k=class{constructor(n,e){d(this,"key");d(this,"value");this.key=n,this.value=e}},S=class{constructor(n,e){d(this,"value");d(this,"weight");d(this,"_hashCode");this.weight=n!==void 0?n:1,this.value=e,this._hashCode=_e()}get hashCode(){return this._hashCode}},H=class extends F{constructor(){super();d(this,"_vertexMap",new Map)}get vertexMap(){return this._vertexMap}set vertexMap(e){this._vertexMap=e}get size(){return this._vertexMap.size}getVertex(e){return this._vertexMap.get(e)||void 0}hasVertex(e){return this._vertexMap.has(this._getVertexKey(e))}addVertex(e,t){if(e instanceof k)return this._addVertex(e);{let i=this.createVertex(e,t);return this._addVertex(i)}}isVertexKey(e){let t=typeof e;return t==="string"||t==="number"}removeManyVertices(e){let t=[];for(let i of e)t.push(this.deleteVertex(i));return t.length>0}hasEdge(e,t){return!!this.getEdge(e,t)}addEdge(e,t,i,r){if(e instanceof S)return this._addEdge(e);if(t instanceof k||typeof t=="string"||typeof t=="number"){if(!(this.hasVertex(e)&&this.hasVertex(t)))return!1;e instanceof k&&(e=e.key),t instanceof k&&(t=t.key);let s=this.createEdge(e,t,i,r);return this._addEdge(s)}else throw new Error("dest must be a Vertex or vertex key while srcOrEdge is an Edge")}setEdgeWeight(e,t,i){let r=this.getEdge(e,t);return r?(r.weight=i,!0):!1}getAllPathsBetween(e,t,i=1e3){let r=[],s=this._getVertex(e),o=this._getVertex(t);if(!(s&&o))return[];let a=[];for(a.push({vertex:s,path:[s]});a.length>0;){let{vertex:h,path:u}=a.pop();if(h===o&&(r.push(u),r.length>=i))return r;let f=this.getNeighbors(h);for(let p of f)if(!u.includes(p)){let c=[...u,p];a.push({vertex:p,path:c})}}return r}getPathSumWeight(e){var i;let t=0;for(let r=0;r<e.length;r++)t+=((i=this.getEdge(e[r],e[r+1]))==null?void 0:i.weight)||0;return t}getMinCostBetween(e,t,i){if(i===void 0&&(i=!1),i){let r=this.getAllPathsBetween(e,t),s=1/0;for(let o of r)s=Math.min(this.getPathSumWeight(o),s);return s}else{let r=this._getVertex(t),s=this._getVertex(e);if(!(s&&r))return;let o=new Map,a=new K([s]);o.set(s,!0);let h=0;for(;a.size>0;){for(let u=0;u<a.size;u++){let f=a.shift();if(f===r)return h;if(f!==void 0){let p=this.getNeighbors(f);for(let c of p)o.has(c)||(o.set(c,!0),a.push(c))}}h++}return}}getMinPathBetween(e,t,i,r=!1){var s,o;if(i===void 0&&(i=!1),i)if(r){let a=this.getAllPathsBetween(e,t,1e4),h=1/0,u=-1,f=0;for(let p of a){let c=this.getPathSumWeight(p);c<h&&(h=c,u=f),f++}return a[u]||void 0}else return(o=(s=this.dijkstra(e,t,!0,!0))==null?void 0:s.minPath)!=null?o:[];else{let a=[],h=this._getVertex(e),u=this._getVertex(t);if(!(h&&u))return[];let f=(p,c,g,_)=>{if(g.add(p),p===c){a=[h,..._];return}let m=this.getNeighbors(p);for(let O of m)g.has(O)||(_.push(O),f(O,c,g,_),_.pop());g.delete(p)};return f(h,u,new Set,[]),a}}dijkstraWithoutHeap(e,t=void 0,i=!1,r=!1){let s=1/0,o,a=[],h=[],u=this._vertexMap,f=new Map,p=new Set,c=new Map,g=this._getVertex(e),_=t?this._getVertex(t):void 0;if(!g)return;for(let b of u){let E=b[1];E instanceof k&&f.set(E,1/0)}f.set(g,0),c.set(g,void 0);let m=()=>{let b=1/0,E;for(let[N,y]of f)p.has(N)||y<b&&(b=y,E=N);return E},O=b=>{for(let E of u){let N=E[1];if(N instanceof k){let y=[N],V=c.get(N);for(;V;)y.push(V),V=c.get(V);let R=y.reverse();E[1]===b&&(a=R),h.push(R)}}};for(let b=1;b<u.size;b++){let E=m();if(E){if(p.add(E),_&&_===E)return i&&(s=f.get(_)||1/0),r&&O(_),{distMap:f,preMap:c,seen:p,paths:h,minDist:s,minPath:a};let N=this.getNeighbors(E);for(let y of N)if(!p.has(y)){let V=this.getEdge(E,y);if(V){let R=f.get(E),x=f.get(y);R!==void 0&&x!==void 0&&V.weight+R<x&&(f.set(y,V.weight+R),c.set(y,E))}}}}return i&&f.forEach((b,E)=>{E!==g&&b<s&&(s=b,r&&(o=E))}),r&&O(o),{distMap:f,preMap:c,seen:p,paths:h,minDist:s,minPath:a}}dijkstra(e,t=void 0,i=!1,r=!1){var b;let s=1/0,o,a=[],h=[],u=this._vertexMap,f=new Map,p=new Set,c=new Map,g=this._getVertex(e),_=t?this._getVertex(t):void 0;if(!g)return;for(let E of u){let N=E[1];N instanceof k&&f.set(N,1/0)}let m=new w([],{comparator:(E,N)=>E.key-N.key});m.add({key:0,value:g}),f.set(g,0),c.set(g,void 0);let O=E=>{for(let N of u){let y=N[1];if(y instanceof k){let V=[y],R=c.get(y);for(;R;)V.push(R),R=c.get(R);let x=V.reverse();N[1]===E&&(a=x),h.push(x)}}};for(;m.size>0;){let E=m.poll(),N=E==null?void 0:E.key,y=E==null?void 0:E.value;if(N!==void 0&&y){if(p.add(y),_&&_===y)return i&&(s=f.get(_)||1/0),r&&O(_),{distMap:f,preMap:c,seen:p,paths:h,minDist:s,minPath:a};let V=this.getNeighbors(y);for(let R of V)if(!p.has(R)){let x=(b=this.getEdge(y,R))==null?void 0:b.weight;if(typeof x=="number"){let z=f.get(R);z&&N+x<z&&(m.add({key:N+x,value:R}),c.set(R,y),f.set(R,N+x))}}}}return i&&f.forEach((E,N)=>{N!==g&&E<s&&(s=E,r&&(o=N))}),r&&O(o),{distMap:f,preMap:c,seen:p,paths:h,minDist:s,minPath:a}}bellmanFord(e,t,i,r){i===void 0&&(i=!1),r===void 0&&(r=!1);let s=this._getVertex(e),o=[],a=new Map,h=new Map,u=1/0,f=[],p;if(t&&(p=!1),!s)return{hasNegativeCycle:p,distMap:a,preMap:h,paths:o,min:u,minPath:f};let c=this._vertexMap,g=c.size,_=this.edgeSet(),m=_.length;this._vertexMap.forEach(b=>{a.set(b,1/0)}),a.set(s,0);for(let b=1;b<g;++b)for(let E=0;E<m;++E){let N=this.getEndsOfEdge(_[E]);if(N){let[y,V]=N,R=_[E].weight,x=a.get(y),z=a.get(V);x!==void 0&&z!==void 0&&a.get(y)!==1/0&&x+R<z&&(a.set(V,x+R),r&&h.set(V,y))}}let O;if(i&&a.forEach((b,E)=>{E!==s&&b<u&&(u=b,r&&(O=E))}),r)for(let b of c){let E=b[1];if(E instanceof k){let N=[E],y=h.get(E);for(;y!==void 0;)N.push(y),y=h.get(y);let V=N.reverse();b[1]===O&&(f=V),o.push(V)}}for(let b=0;b<m;++b){let E=this.getEndsOfEdge(_[b]);if(E){let[N]=E,y=_[b].weight,V=a.get(N);V&&V!==1/0&&V+y<V&&(p=!0)}}return{hasNegativeCycle:p,distMap:a,preMap:h,paths:o,min:u,minPath:f}}floydWarshall(){var s;let e=[...this._vertexMap],t=e.length,i=[],r=[];for(let o=0;o<t;o++){i[o]=[],r[o]=[];for(let a=0;a<t;a++)r[o][a]=void 0}for(let o=0;o<t;o++)for(let a=0;a<t;a++)i[o][a]=((s=this.getEdge(e[o][1],e[a][1]))==null?void 0:s.weight)||1/0;for(let o=0;o<t;o++)for(let a=0;a<t;a++)for(let h=0;h<t;h++)i[a][h]>i[a][o]+i[o][h]&&(i[a][h]=i[a][o]+i[o][h],r[a][h]=e[o][1]);return{costs:i,predecessor:r}}getCycles(e=!1){let t=[],i=new Set,r=(o,a,h)=>{if(h.has(o)){(!e&&a.length>2||e&&a.length>=2)&&a[0]===o.key&&t.push([...a]);return}h.add(o),a.push(o.key);for(let u of this.getNeighbors(o))u&&r(u,a,h);h.delete(o),a.pop()};for(let o of this.vertexMap.values())r(o,[],i);let s=new Map;for(let o of t){let a=[...o].sort().toString();s.has(a)||s.set(a,o)}return[...s].map(o=>o[1])}filter(e,t){let i=[],r=0;for(let[s,o]of this)e.call(t,o,s,r,this)&&i.push([s,o]),r++;return i}map(e,t){let i=[],r=0;for(let[s,o]of this)i.push(e.call(t,o,s,r,this)),r++;return i}*_getIterator(){for(let e of this._vertexMap.values())yield[e.key,e.value]}_addVertex(e){return this.hasVertex(e)?!1:(this._vertexMap.set(e.key,e),!0)}_getVertex(e){let t=this._getVertexKey(e);return this._vertexMap.get(t)||void 0}_getVertexKey(e){return e instanceof k?e.key:e}};var P=class extends k{constructor(n,e){super(n,e)}},W=class extends S{constructor(e,t,i,r){super(i,r);d(this,"src");d(this,"dest");this.src=e,this.dest=t}},ee=class l extends H{constructor(){super();d(this,"_outEdgeMap",new Map);d(this,"_inEdgeMap",new Map)}get outEdgeMap(){return this._outEdgeMap}set outEdgeMap(e){this._outEdgeMap=e}get inEdgeMap(){return this._inEdgeMap}set inEdgeMap(e){this._inEdgeMap=e}createVertex(e,t){return new P(e,t)}createEdge(e,t,i,r){return new W(e,t,i!=null?i:1,r)}getEdge(e,t){let i=[];if(e!==void 0&&t!==void 0){let r=this._getVertex(e),s=this._getVertex(t);if(r&&s){let o=this._outEdgeMap.get(r);o&&(i=o.filter(a=>a.dest===s.key))}}return i[0]||void 0}deleteEdgeSrcToDest(e,t){let i=this._getVertex(e),r=this._getVertex(t),s;if(!i||!r)return;let o=this._outEdgeMap.get(i);o&&I(o,h=>h.dest===r.key);let a=this._inEdgeMap.get(r);return a&&(s=I(a,h=>h.src===i.key)[0]||void 0),s}deleteEdge(e,t){let i,r,s;if(this.isVertexKey(e))if(this.isVertexKey(t))r=this._getVertex(e),s=this._getVertex(t);else return;else r=this._getVertex(e.src),s=this._getVertex(e.dest);if(r&&s){let o=this._outEdgeMap.get(r);o&&o.length>0&&I(o,h=>h.src===r.key&&h.dest===(s==null?void 0:s.key));let a=this._inEdgeMap.get(s);a&&a.length>0&&(i=I(a,h=>h.src===r.key&&h.dest===s.key)[0])}return i}deleteVertex(e){let t,i;if(this.isVertexKey(e)?(i=this.getVertex(e),t=e):(i=e,t=this._getVertexKey(e)),i){let r=this.getNeighbors(i);for(let s of r)this.deleteEdgeSrcToDest(i,s);this._outEdgeMap.delete(i),this._inEdgeMap.delete(i)}return this._vertexMap.delete(t)}deleteEdgesBetween(e,t){let i=[];if(e&&t){let r=this.deleteEdgeSrcToDest(e,t),s=this.deleteEdgeSrcToDest(t,e);r&&i.push(r),s&&i.push(s)}return i}incomingEdgesOf(e){let t=this._getVertex(e);return t?this.inEdgeMap.get(t)||[]:[]}outgoingEdgesOf(e){let t=this._getVertex(e);return t?this._outEdgeMap.get(t)||[]:[]}degreeOf(e){return this.outDegreeOf(e)+this.inDegreeOf(e)}inDegreeOf(e){return this.incomingEdgesOf(e).length}outDegreeOf(e){return this.outgoingEdgesOf(e).length}edgesOf(e){return[...this.outgoingEdgesOf(e),...this.incomingEdgesOf(e)]}getEdgeSrc(e){return this._getVertex(e.src)}getEdgeDest(e){return this._getVertex(e.dest)}getDestinations(e){if(e===void 0)return[];let t=[],i=this.outgoingEdgesOf(e);for(let r of i){let s=this.getEdgeDest(r);s&&t.push(s)}return t}topologicalSort(e){e=e!=null?e:"key";let t=new Map;for(let o of this.vertexMap)t.set(o[1],0);let i=[],r=!1,s=o=>{t.set(o,1);let a=this.getDestinations(o);for(let h of a){let u=t.get(h);u===0?s(h):u===1&&(r=!0)}t.set(o,2),i.push(o)};for(let o of this.vertexMap)t.get(o[1])===0&&s(o[1]);if(!r)return e==="key"&&(i=i.map(o=>o instanceof P?o.key:o)),i.reverse()}edgeSet(){let e=[];return this._outEdgeMap.forEach(t=>{e=[...e,...t]}),e}getNeighbors(e){let t=[],i=this._getVertex(e);if(i){let r=this.outgoingEdgesOf(i);for(let s of r){let o=this._getVertex(s.dest);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.src,e.dest))return;let t=this._getVertex(e.src),i=this._getVertex(e.dest);if(t&&i)return[t,i]}isEmpty(){return this.vertexMap.size===0&&this.inEdgeMap.size===0&&this.outEdgeMap.size===0}clear(){this._vertexMap=new Map,this._inEdgeMap=new Map,this._outEdgeMap=new Map}clone(){let e=new l;return e.vertexMap=new Map(this.vertexMap),e.inEdgeMap=new Map(this.inEdgeMap),e.outEdgeMap=new Map(this.outEdgeMap),e}tarjan(){let e=new Map,t=new Map,i=new Map,r=0,s=[],o=new Set,a=h=>{e.set(h,r),t.set(h,r),r++,s.push(h),o.add(h);let u=this.getNeighbors(h);for(let f of u)e.has(f)?o.has(f)&&t.set(h,Math.min(t.get(h),e.get(f))):(a(f),t.set(h,Math.min(t.get(h),t.get(f))));if(e.get(h)===t.get(h)){let f=[],p;do p=s.pop(),o.delete(p),f.push(p);while(p!==h);i.set(i.size,f)}};for(let h of this.vertexMap.values())e.has(h)||a(h);return{dfnMap:e,lowMap:t,SCCs:i}}getDFNMap(){return this.tarjan().dfnMap}getLowMap(){return this.tarjan().lowMap}getSCCs(){return this.tarjan().SCCs}_addEdge(e){if(!(this.hasVertex(e.src)&&this.hasVertex(e.dest)))return!1;let t=this._getVertex(e.src),i=this._getVertex(e.dest);if(t&&i){let r=this._outEdgeMap.get(t);r?r.push(e):this._outEdgeMap.set(t,[e]);let s=this._inEdgeMap.get(i);return s?s.push(e):this._inEdgeMap.set(i,[e]),!0}else return!1}};var ue=class extends k{constructor(n,e){super(n,e)}},de=class extends S{constructor(e,t,i,r){super(i,r);d(this,"endpoints");this.endpoints=[e,t]}},Ce=class l extends H{constructor(){super();d(this,"_edgeMap");this._edgeMap=new Map}get edgeMap(){return this._edgeMap}set edgeMap(e){this._edgeMap=e}createVertex(e,t){return new ue(e,t!=null?t:e)}createEdge(e,t,i,r){return new de(e,t,i!=null?i:1,r)}getEdge(e,t){var r;let i=[];if(e!==void 0&&t!==void 0){let s=this._getVertex(e),o=this._getVertex(t);s&&o&&(i=(r=this._edgeMap.get(s))==null?void 0:r.filter(a=>a.endpoints.includes(o.key)))}return i&&i[0]||void 0}deleteEdgeBetween(e,t){let i=this._getVertex(e),r=this._getVertex(t);if(!i||!r)return;let s=this._edgeMap.get(i),o;s&&(o=I(s,h=>h.endpoints.includes(r.key))[0]||void 0);let a=this._edgeMap.get(r);return a&&I(a,h=>h.endpoints.includes(i.key)),o}deleteEdge(e,t){let i,r;if(this.isVertexKey(e))if(this.isVertexKey(t))i=this._getVertex(e),r=this._getVertex(t);else return;else i=this._getVertex(e.endpoints[0]),r=this._getVertex(e.endpoints[1]);if(i&&r)return this.deleteEdgeBetween(i,r)}deleteVertex(e){let t,i;this.isVertexKey(e)?(i=this.getVertex(e),t=e):(i=e,t=this._getVertexKey(e));let r=this.getNeighbors(e);return i&&(r.forEach(s=>{let o=this._edgeMap.get(s);if(o){let a=o.filter(h=>!h.endpoints.includes(t));this._edgeMap.set(s,a)}}),this._edgeMap.delete(i)),this._vertexMap.delete(t)}degreeOf(e){var i;let t=this._getVertex(e);return t&&((i=this._edgeMap.get(t))==null?void 0:i.length)||0}edgesOf(e){let t=this._getVertex(e);return t?this._edgeMap.get(t)||[]:[]}edgeSet(){let e=new Set;return this._edgeMap.forEach(t=>{t.forEach(i=>{e.add(i)})}),[...e]}getNeighbors(e){let t=[],i=this._getVertex(e);if(i){let r=this.edgesOf(i);for(let s of r){let o=this._getVertex(s.endpoints.filter(a=>a!==i.key)[0]);o&&t.push(o)}}return t}getEndsOfEdge(e){if(!this.hasEdge(e.endpoints[0],e.endpoints[1]))return;let t=this._getVertex(e.endpoints[0]),i=this._getVertex(e.endpoints[1]);if(t&&i)return[t,i]}isEmpty(){return this.vertexMap.size===0&&this.edgeMap.size===0}clear(){this._vertexMap=new Map,this._edgeMap=new Map}clone(){let e=new l;return e.vertexMap=new Map(this.vertexMap),e.edgeMap=new Map(this.edgeMap),e}tarjan(){let e=new Map,t=new Map,i=[],r=[],s=0,o=(a,h)=>{e.set(a,s),t.set(a,s),s++;let u=this.getNeighbors(a),f=0;for(let p of u)if(e.has(p))p!==h&&t.set(a,Math.min(t.get(a),e.get(p)));else{if(f++,o(p,a),t.set(a,Math.min(t.get(a),t.get(p))),t.get(p)>e.get(a)){let c=this.getEdge(a,p);c&&i.push(c)}h!==void 0&&t.get(p)>=e.get(a)&&r.push(a)}h===void 0&&f>1&&r.push(a)};for(let a of this.vertexMap.values())e.has(a)||o(a,void 0);return{dfnMap:e,lowMap:t,bridges:i,cutVertices:r}}getBridges(){return this.tarjan().bridges}getCutVertices(){return this.tarjan().cutVertices}getDFNMap(){return this.tarjan().dfnMap}getLowMap(){return this.tarjan().lowMap}_addEdge(e){for(let t of e.endpoints){let i=this._getVertex(t);if(i===void 0)return!1;if(i){let r=this._edgeMap.get(i);r?r.push(e):this._edgeMap.set(i,[e])}}return!0}};var fe=class extends P{constructor(e,t,i,r){super(e,t);d(this,"lat");d(this,"long");this.lat=i,this.long=r}},ce=class extends W{constructor(n,e,t,i){super(n,e,t,i)}},Fe=class l extends ee{constructor(e,t){super();d(this,"_originCoord",[0,0]);d(this,"_bottomRight");this._originCoord=e,this._bottomRight=t}get originCoord(){return this._originCoord}get bottomRight(){return this._bottomRight}createVertex(e,t,i=this.originCoord[0],r=this.originCoord[1]){return new fe(e,t,i,r)}createEdge(e,t,i,r){return new ce(e,t,i,r)}clone(){let e=new l(this.originCoord,this.bottomRight);return e.vertexMap=new Map(this.vertexMap),e.inEdgeMap=new Map(this.inEdgeMap),e.outEdgeMap=new Map(this.outEdgeMap),e}};var Ie=(e=>(e[e.VISIT=0]="VISIT",e[e.PROCESS=1]="PROCESS",e))(Ie||{});var A=class{constructor(n,e){d(this,"key");d(this,"value");d(this,"parent");d(this,"_left");d(this,"_right");this.key=n,this.value=e}get left(){return this._left}set left(n){n&&(n.parent=this),this._left=n}get right(){return this._right}set right(n){n&&(n.parent=this),this._right=n}get familyPosition(){let n=this;return this.parent?this.parent.left===n?this.left||this.right?"ROOT_LEFT":"LEFT":this.parent.right===n?this.left||this.right?"ROOT_RIGHT":"RIGHT":"MAL_NODE":this.left||this.right?"ROOT":"ISOLATED"}},te=class l extends F{constructor(e=[],t){super();d(this,"iterationType","ITERATIVE");d(this,"_isMapMode",!0);d(this,"_store",new Map);d(this,"_root");d(this,"_size",0);d(this,"_NIL",new A(NaN));d(this,"_toEntryFn");d(this,"_DEFAULT_NODE_CALLBACK",e=>e?e.key:void 0);if(t){let{iterationType:i,toEntryFn:r,isMapMode:s}=t;if(i&&(this.iterationType=i),s!==void 0&&(this._isMapMode=s),typeof r=="function")this._toEntryFn=r;else if(r)throw TypeError("toEntryFn must be a function type")}e&&this.addMany(e)}get isMapMode(){return this._isMapMode}get store(){return this._store}get root(){return this._root}get size(){return this._size}get NIL(){return this._NIL}get toEntryFn(){return this._toEntryFn}createNode(e,t){return new A(e,this._isMapMode?void 0:t)}createTree(e){return new l([],M({iterationType:this.iterationType,isMapMode:this._isMapMode,toEntryFn:this._toEntryFn},e))}keyValueNodeEntryRawToNodeAndValue(e,t){if(e===void 0)return[void 0,void 0];if(e===null)return[null,void 0];if(this.isNode(e))return[e,t];if(this.isEntry(e)){let[i,r]=e;if(i===void 0)return[void 0,void 0];if(i===null)return[null,void 0];let s=t!=null?t:r;return[this.createNode(i,s),s]}if(this.isKey(e))return[this.createNode(e,t),t];if(this.isRaw(e)){if(this._toEntryFn){let[i,r]=this._toEntryFn(e),s=t!=null?t:r;if(this.isKey(i))return[this.createNode(i,s),s]}return[void 0,void 0]}return[void 0,void 0]}ensureNode(e,t=this.iterationType){if(e===null)return null;if(e!==void 0&&e!==this._NIL){if(this.isNode(e))return e;if(this.isEntry(e)){let i=e[0];return i===null?null:i===void 0?void 0:this.getNodeByKey(i,t)}if(this._toEntryFn){let[i]=this._toEntryFn(e);if(this.isKey(i))return this.getNodeByKey(i)}if(this.isKey(e))return this.getNodeByKey(e,t)}}isNode(e){return e instanceof A}isRaw(e){return typeof e=="object"}isRealNode(e){return e===this._NIL||e===null||e===void 0?!1:this.isNode(e)}isRealNodeOrNull(e){return e===null||this.isRealNode(e)}isNIL(e){return e===this._NIL}isLeaf(e){return e=this.ensureNode(e),e===void 0?!1:e===null?!0:!this.isRealNode(e.left)&&!this.isRealNode(e.right)}isEntry(e){return Array.isArray(e)&&e.length===2}isKey(e){return e===null?!0:J(e)}add(e,t){let[i,r]=this.keyValueNodeEntryRawToNodeAndValue(e,t);if(i===void 0)return!1;if(!this._root)return this._setRoot(i),this._isMapMode&&this._setValue(i==null?void 0:i.key,r),this._size=1,!0;let s=new K([this._root]),o;for(;s.size>0;){let a=s.shift();if(a){if(i!==null&&a.key===i.key)return this._replaceNode(a,i),this._isMapMode&&this._setValue(a.key,r),!0;o===void 0&&(a.left===void 0||a.right===void 0)&&(o=a),a.left!==null&&a.left&&s.push(a.left),a.right!==null&&a.right&&s.push(a.right)}}return o?(o.left===void 0?o.left=i:o.right===void 0&&(o.right=i),this._isMapMode&&this._setValue(i==null?void 0:i.key,r),this._size++,!0):!1}addMany(e,t){let i=[],r;t&&(r=t[Symbol.iterator]());for(let s of e){let o;if(r){let a=r.next();a.done||(o=a.value)}i.push(this.add(s,o))}return i}refill(e,t){this.clear(),this.addMany(e,t)}delete(e){let t=[];if(!this._root)return t;let i=this.getNode(e);if(!i)return t;let r=i==null?void 0:i.parent,s,o=i;if(!i.left&&!i.right&&!r)this._setRoot(void 0);else if(i.left){let a=this.getRightMost(h=>h,i.left);if(a){let h=a.parent;o=this._swapProperties(i,a),h&&(h.right===a?h.right=a.left:h.left=a.left,s=h)}}else if(r){let{familyPosition:a}=i;a==="LEFT"||a==="ROOT_LEFT"?r.left=i.right:(a==="RIGHT"||a==="ROOT_RIGHT")&&(r.right=i.right),s=r}else this._setRoot(i.right),i.right=void 0;return this._size=this._size-1,t.push({deleted:o,needBalanced:s}),this._isMapMode&&o&&this._store.delete(o.key),t}getNodes(e,t=!1,i=this._root,r=this.iterationType){if(e===void 0)return[];if(e===null)return[];if(i=this.ensureNode(i),!i)return[];let s=this._ensurePredicate(e),o=[];if(r==="RECURSIVE"){let a=h=>{s(h)&&(o.push(h),t)||!this.isRealNode(h.left)&&!this.isRealNode(h.right)||(this.isRealNode(h.left)&&a(h.left),this.isRealNode(h.right)&&a(h.right))};a(i)}else{let a=[i];for(;a.length>0;){let h=a.pop();if(this.isRealNode(h)){if(s(h)&&(o.push(h),t))return o;this.isRealNode(h.left)&&a.push(h.left),this.isRealNode(h.right)&&a.push(h.right)}}}return o}getNode(e,t=this._root,i=this.iterationType){var r;return(r=this.getNodes(e,!0,t,i)[0])!=null?r:null}getNodeByKey(e,t=this.iterationType){return this.getNode(e,this._root,t)}get(e,t=this._root,i=this.iterationType){var r;if(this._isMapMode){let s=this._getKey(e);return s==null?void 0:this._store.get(s)}return(r=this.getNode(e,t,i))==null?void 0:r.value}has(e,t=this._root,i=this.iterationType){return this.getNodes(e,!0,t,i).length>0}clear(){this._clearNodes(),this._isMapMode&&this._clearValues()}isEmpty(){return this._size===0}isPerfectlyBalanced(e=this._root){return this.getMinHeight(e)+1>=this.getHeight(e)}isBST(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!e)return!0;if(t==="RECURSIVE"){let i=(o,a,h)=>{if(!this.isRealNode(o))return!0;let u=Number(o.key);return u<=a||u>=h?!1:i(o.left,a,u)&&i(o.right,u,h)},r=i(e,Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),s=i(e,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER);return r||s}else{let i=(o=!1)=>{let a=[],h=o?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,u=e;for(;this.isRealNode(u)||a.length>0;){for(;this.isRealNode(u);)a.push(u),u=u.left;u=a.pop();let f=Number(u.key);if(!this.isRealNode(u)||!o&&h>=f||o&&h<=f)return!1;h=f,u=u.right}return!0},r=i(!1),s=i(!0);return r||s}}getDepth(e,t=this._root){let i=this.ensureNode(e),r=this.ensureNode(t),s=0;for(;i!=null&&i.parent;){if(i===r)return s;s++,i=i.parent}return s}getHeight(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!this.isRealNode(e))return-1;if(t==="RECURSIVE"){let i=r=>{if(!this.isRealNode(r))return-1;let s=i(r.left),o=i(r.right);return Math.max(s,o)+1};return i(e)}else{let i=[{node:e,depth:0}],r=0;for(;i.length>0;){let{node:s,depth:o}=i.pop();this.isRealNode(s.left)&&i.push({node:s.left,depth:o+1}),this.isRealNode(s.right)&&i.push({node:s.right,depth:o+1}),r=Math.max(r,o)}return r}}getMinHeight(e=this._root,t=this.iterationType){if(e=this.ensureNode(e),!e)return-1;if(t==="RECURSIVE"){let i=r=>{if(!this.isRealNode(r)||!this.isRealNode(r.left)&&!this.isRealNode(r.right))return 0;let s=i(r.left),o=i(r.right);return Math.min(s,o)+1};return i(e)}else{let i=[],r=e,s=null,o=new Map;for(;i.length>0||r;)if(this.isRealNode(r))i.push(r),r=r.left;else if(r=i[i.length-1],!this.isRealNode(r.right)||s===r.right){if(r=i.pop(),this.isRealNode(r)){let a=this.isRealNode(r.left)?o.get(r.left):-1,h=this.isRealNode(r.right)?o.get(r.right):-1;o.set(r,1+Math.min(a,h)),s=r,r=null}}else r=r.right;return o.get(e)}}getPathToRoot(e=this._DEFAULT_NODE_CALLBACK,t,i=!0){let r=[],s=this.ensureNode(t);if(!s)return r;for(;s.parent;)r.push(e(s)),s=s.parent;return r.push(e(s)),i?r.reverse():r}getLeftMost(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType){if(this.isNIL(t))return e(void 0);if(t=this.ensureNode(t),!this.isRealNode(t))return e(t);if(i==="RECURSIVE"){let r=s=>this.isRealNode(s.left)?r(s.left):s;return e(r(t))}else{let r=ae(s=>this.isRealNode(s.left)?r.cont(s.left):s);return e(r(t))}}getRightMost(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType){if(this.isNIL(t))return e(void 0);if(t=this.ensureNode(t),!t)return e(t);if(i==="RECURSIVE"){let r=s=>this.isRealNode(s.right)?r(s.right):s;return e(r(t))}else{let r=ae(s=>this.isRealNode(s.right)?r.cont(s.right):s);return e(r(t))}}getPredecessor(e){if(this.isRealNode(e.left)){let t=e.left;for(;!this.isRealNode(t)||this.isRealNode(t.right)&&t.right!==e;)this.isRealNode(t)&&(t=t.right);return t}else return e}getSuccessor(e){if(e=this.ensureNode(e),!this.isRealNode(e))return;if(this.isRealNode(e.right))return this.getLeftMost(i=>i,e.right);let t=e.parent;for(;this.isRealNode(t)&&e===t.right;)e=t,t=t.parent;return t}dfs(e=this._DEFAULT_NODE_CALLBACK,t="IN",i=this._root,r=this.iterationType,s=!1){return i=this.ensureNode(i),i?this._dfs(e,t,i,r,s):[]}bfs(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType,r=!1){if(t=this.ensureNode(t),!t)return[];let s=[];if(i==="RECURSIVE"){let o=new K([t]),a=h=>{if(o.size===0)return;let u=o.shift();s.push(e(u)),r?(u&&this.isRealNodeOrNull(u.left)&&o.push(u.left),u&&this.isRealNodeOrNull(u.right)&&o.push(u.right)):(this.isRealNode(u.left)&&o.push(u.left),this.isRealNode(u.right)&&o.push(u.right)),a(h+1)};a(0)}else{let o=new K([t]);for(;o.size>0;){let a=o.size;for(let h=0;h<a;h++){let u=o.shift();s.push(e(u)),r?(u&&this.isRealNodeOrNull(u.left)&&o.push(u.left),u&&this.isRealNodeOrNull(u.right)&&o.push(u.right)):(this.isRealNode(u.left)&&o.push(u.left),this.isRealNode(u.right)&&o.push(u.right))}}}return s}leaves(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType){t=this.ensureNode(t);let r=[];if(!this.isRealNode(t))return[];if(i==="RECURSIVE"){let s=o=>{this.isLeaf(o)&&r.push(e(o)),!(!this.isRealNode(o.left)&&!this.isRealNode(o.right))&&(this.isRealNode(o.left)&&s(o.left),this.isRealNode(o.right)&&s(o.right))};s(t)}else{let s=new K([t]);for(;s.size>0;){let o=s.shift();this.isRealNode(o)&&(this.isLeaf(o)&&r.push(e(o)),this.isRealNode(o.left)&&s.push(o.left),this.isRealNode(o.right)&&s.push(o.right))}}return r}listLevels(e=this._DEFAULT_NODE_CALLBACK,t=this._root,i=this.iterationType,r=!1){t=this.ensureNode(t);let s=[];if(!t)return s;if(i==="RECURSIVE"){let o=(a,h)=>{s[h]||(s[h]=[]),s[h].push(e(a)),r?(a&&this.isRealNodeOrNull(a.left)&&o(a.left,h+1),a&&this.isRealNodeOrNull(a.right)&&o(a.right,h+1)):(a&&a.left&&o(a.left,h+1),a&&a.right&&o(a.right,h+1))};o(t,0)}else{let o=[[t,0]];for(;o.length>0;){let a=o.pop(),[h,u]=a;s[u]||(s[u]=[]),s[u].push(e(h)),r?(h&&this.isRealNodeOrNull(h.right)&&o.push([h.right,u+1]),h&&this.isRealNodeOrNull(h.left)&&o.push([h.left,u+1])):(h&&h.right&&o.push([h.right,u+1]),h&&h.left&&o.push([h.left,u+1]))}}return s}morris(e=this._DEFAULT_NODE_CALLBACK,t="IN",i=this._root){if(i=this.ensureNode(i),!i)return[];let r=[],s=i,o=h=>{let u=null,f=null;for(;h;)f=h.right,h.right=u,u=h,h=f;return u},a=h=>{let u=o(h),f=u;for(;f;)r.push(e(f)),f=f.right;o(u)};switch(t){case"IN":for(;s;){if(s.left){let h=this.getPredecessor(s);if(h.right)h.right=null;else{h.right=s,s=s.left;continue}}r.push(e(s)),s=s.right}break;case"PRE":for(;s;){if(s.left){let h=this.getPredecessor(s);if(h.right)h.right=null;else{h.right=s,r.push(e(s)),s=s.left;continue}}else r.push(e(s));s=s.right}break;case"POST":for(;s;){if(s.left){let h=this.getPredecessor(s);if(h.right===null){h.right=s,s=s.left;continue}else h.right=null,a(s.left)}s=s.right}a(i);break}return r}clone(){let e=this.createTree();return this.bfs(t=>{t===null?e.add(null):this._isMapMode?e.add([t.key,this._store.get(t.key)]):e.add([t.key,t.value])},this._root,this.iterationType,!0),this._isMapMode&&(e._store=this._store),e}filter(e,t){let i=this.createTree(),r=0;for(let[s,o]of this)e.call(t,o,s,r++,this)&&i.add([s,o]);return i}map(e,t){let i=this.createTree(),r=0;for(let[s,o]of this)i.add([s,e.call(t,o,s,r++,this)]);return i}toVisual(e=this._root,t){let i=M({isShowUndefined:!1,isShowNull:!0,isShowRedBlackNIL:!1},t);e=this.ensureNode(e);let r="";return e&&(i.isShowUndefined&&(r+=`U for undefined
2
2
  `),i.isShowNull&&(r+=`N for null
3
3
  `),i.isShowRedBlackNIL&&(r+=`S for Sentinel Node(NIL)
4
4
  `),(o=>{let[a,,,]=this._displayAux(o,i),h="";for(let u of a)h+=u+`