graph-typed 2.5.2 → 2.6.0

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 (63) hide show
  1. package/dist/cjs/index.cjs +422 -14
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs-legacy/index.cjs +422 -14
  4. package/dist/cjs-legacy/index.cjs.map +1 -1
  5. package/dist/esm/index.mjs +422 -14
  6. package/dist/esm/index.mjs.map +1 -1
  7. package/dist/esm-legacy/index.mjs +422 -14
  8. package/dist/esm-legacy/index.mjs.map +1 -1
  9. package/dist/types/data-structures/base/iterable-element-base.d.ts +17 -0
  10. package/dist/types/data-structures/base/linear-base.d.ts +6 -0
  11. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +86 -2
  12. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +98 -0
  13. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +191 -15
  14. package/dist/types/data-structures/binary-tree/bst.d.ts +171 -3
  15. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +136 -8
  16. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +42 -0
  17. package/dist/types/data-structures/binary-tree/tree-map.d.ts +1061 -167
  18. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1232 -355
  19. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +916 -194
  20. package/dist/types/data-structures/binary-tree/tree-set.d.ts +1078 -141
  21. package/dist/types/data-structures/graph/directed-graph.d.ts +70 -0
  22. package/dist/types/data-structures/graph/undirected-graph.d.ts +63 -0
  23. package/dist/types/data-structures/hash/hash-map.d.ts +84 -6
  24. package/dist/types/data-structures/heap/heap.d.ts +140 -12
  25. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +150 -2
  26. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +106 -1
  27. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +126 -0
  28. package/dist/types/data-structures/matrix/matrix.d.ts +56 -0
  29. package/dist/types/data-structures/queue/deque.d.ts +171 -0
  30. package/dist/types/data-structures/queue/queue.d.ts +97 -0
  31. package/dist/types/data-structures/stack/stack.d.ts +72 -2
  32. package/dist/types/data-structures/trie/trie.d.ts +84 -0
  33. package/dist/types/interfaces/binary-tree.d.ts +2 -3
  34. package/dist/umd/graph-typed.js +422 -14
  35. package/dist/umd/graph-typed.js.map +1 -1
  36. package/dist/umd/graph-typed.min.js +2 -2
  37. package/dist/umd/graph-typed.min.js.map +1 -1
  38. package/package.json +2 -2
  39. package/src/data-structures/base/iterable-element-base.ts +32 -0
  40. package/src/data-structures/base/linear-base.ts +11 -0
  41. package/src/data-structures/binary-tree/avl-tree.ts +88 -5
  42. package/src/data-structures/binary-tree/binary-indexed-tree.ts +98 -0
  43. package/src/data-structures/binary-tree/binary-tree.ts +242 -81
  44. package/src/data-structures/binary-tree/bst.ts +173 -7
  45. package/src/data-structures/binary-tree/red-black-tree.ts +139 -15
  46. package/src/data-structures/binary-tree/segment-tree.ts +42 -0
  47. package/src/data-structures/binary-tree/tree-map.ts +948 -36
  48. package/src/data-structures/binary-tree/tree-multi-map.ts +893 -13
  49. package/src/data-structures/binary-tree/tree-multi-set.ts +761 -33
  50. package/src/data-structures/binary-tree/tree-set.ts +1260 -251
  51. package/src/data-structures/graph/directed-graph.ts +71 -1
  52. package/src/data-structures/graph/undirected-graph.ts +64 -1
  53. package/src/data-structures/hash/hash-map.ts +100 -12
  54. package/src/data-structures/heap/heap.ts +149 -19
  55. package/src/data-structures/linked-list/doubly-linked-list.ts +178 -2
  56. package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
  57. package/src/data-structures/linked-list/skip-linked-list.ts +126 -0
  58. package/src/data-structures/matrix/matrix.ts +56 -0
  59. package/src/data-structures/queue/deque.ts +187 -0
  60. package/src/data-structures/queue/queue.ts +109 -0
  61. package/src/data-structures/stack/stack.ts +75 -5
  62. package/src/data-structures/trie/trie.ts +84 -0
  63. package/src/interfaces/binary-tree.ts +1 -9
@@ -441,6 +441,35 @@ var graphTyped = (() => {
441
441
  for (const ele of this) if (ele === element) return true;
442
442
  return false;
443
443
  }
444
+ /**
445
+ * Check whether a value exists (Array-compatible alias for `has`).
446
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
447
+ * @param element - Element to search for (uses `===`).
448
+ * @returns `true` if found.
449
+ */
450
+ includes(element) {
451
+ return this.has(element);
452
+ }
453
+ /**
454
+ * Return an iterator of `[index, value]` pairs (Array-compatible).
455
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
456
+ */
457
+ *entries() {
458
+ let index = 0;
459
+ for (const value of this) {
460
+ yield [index++, value];
461
+ }
462
+ }
463
+ /**
464
+ * Return an iterator of numeric indices (Array-compatible).
465
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
466
+ */
467
+ *keys() {
468
+ let index = 0;
469
+ for (const _ of this) {
470
+ yield index++;
471
+ }
472
+ }
444
473
  /**
445
474
  * Reduces all elements to a single accumulated value.
446
475
  *
@@ -700,6 +729,16 @@ var graphTyped = (() => {
700
729
  }
701
730
  return this;
702
731
  }
732
+ /**
733
+ * Return a new instance of the same type with elements in reverse order (non-mutating).
734
+ * @remarks Provided for familiarity when migrating from Array (ES2023 `toReversed`). Time O(n), Space O(n).
735
+ * @returns A new reversed instance.
736
+ */
737
+ toReversed() {
738
+ const cloned = this.clone();
739
+ cloned.reverse();
740
+ return cloned;
741
+ }
703
742
  };
704
743
 
705
744
  // src/data-structures/heap/heap.ts
@@ -769,6 +808,13 @@ var graphTyped = (() => {
769
808
 
770
809
 
771
810
 
811
+
812
+
813
+
814
+
815
+
816
+
817
+
772
818
 
773
819
 
774
820
 
@@ -826,7 +872,7 @@ var graphTyped = (() => {
826
872
  }
827
873
  /**
828
874
  * Insert an element.
829
- * @remarks Time O(1) amortized, Space O(1)
875
+ * @remarks Time O(log N) amortized, Space O(1)
830
876
  * @param element - Element to insert.
831
877
  * @returns True.
832
878
 
@@ -856,6 +902,13 @@ var graphTyped = (() => {
856
902
 
857
903
 
858
904
 
905
+
906
+
907
+
908
+
909
+
910
+
911
+
859
912
 
860
913
 
861
914
 
@@ -913,6 +966,13 @@ var graphTyped = (() => {
913
966
 
914
967
 
915
968
 
969
+
970
+
971
+
972
+
973
+
974
+
975
+
916
976
 
917
977
 
918
978
 
@@ -976,7 +1036,41 @@ var graphTyped = (() => {
976
1036
 
977
1037
 
978
1038
 
1039
+
1040
+
1041
+
979
1042
 
1043
+
1044
+
1045
+
1046
+ * @example
1047
+ * // Heap with custom comparator (MaxHeap behavior)
1048
+ * interface Task {
1049
+ * id: number;
1050
+ * priority: number;
1051
+ * name: string;
1052
+ * }
1053
+ *
1054
+ * // Custom comparator for max heap behavior (higher priority first)
1055
+ * const tasks: Task[] = [
1056
+ * { id: 1, priority: 5, name: 'Email' },
1057
+ * { id: 2, priority: 3, name: 'Chat' },
1058
+ * { id: 3, priority: 8, name: 'Alert' }
1059
+ * ];
1060
+ *
1061
+ * const maxHeap = new Heap(tasks, {
1062
+ * comparator: (a: Task, b: Task) => b.priority - a.priority
1063
+ * });
1064
+ *
1065
+ * console.log(maxHeap.size); // 3;
1066
+ *
1067
+ * // Peek returns highest priority task
1068
+ * const topTask = maxHeap.peek();
1069
+ * console.log(topTask?.priority); // 8;
1070
+ * console.log(topTask?.name); // 'Alert';
1071
+ */
1072
+ /**
1073
+ * @deprecated Use `pop` instead. Will be removed in a future major version.
980
1074
 
981
1075
 
982
1076
 
@@ -1007,6 +1101,14 @@ var graphTyped = (() => {
1007
1101
  * console.log(topTask?.name); // 'Alert';
1008
1102
  */
1009
1103
  poll() {
1104
+ return this.pop();
1105
+ }
1106
+ /**
1107
+ * Remove and return the top element (min or max depending on comparator).
1108
+ * @remarks Time O(log N) amortized, Space O(1)
1109
+ * @returns The removed top element, or undefined if empty.
1110
+ */
1111
+ pop() {
1010
1112
  if (this.elements.length === 0) return;
1011
1113
  const value = this.elements[0];
1012
1114
  const last = this.elements.pop();
@@ -1047,6 +1149,13 @@ var graphTyped = (() => {
1047
1149
 
1048
1150
 
1049
1151
 
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1050
1159
 
1051
1160
 
1052
1161
 
@@ -1147,6 +1256,13 @@ var graphTyped = (() => {
1147
1256
 
1148
1257
 
1149
1258
 
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1150
1266
 
1151
1267
 
1152
1268
 
@@ -1194,6 +1310,13 @@ var graphTyped = (() => {
1194
1310
 
1195
1311
 
1196
1312
 
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
1197
1320
 
1198
1321
 
1199
1322
 
@@ -1211,16 +1334,6 @@ var graphTyped = (() => {
1211
1334
  clear() {
1212
1335
  this._elements = [];
1213
1336
  }
1214
- /**
1215
- * Replace the backing array and rebuild the heap.
1216
- * @remarks Time O(N), Space O(N)
1217
- * @param elements - Iterable used to refill the heap.
1218
- * @returns Array of per-node results from fixing steps.
1219
- */
1220
- refill(elements) {
1221
- this._elements = Array.from(elements);
1222
- return this.fix();
1223
- }
1224
1337
  /**
1225
1338
  * Check if an equal element exists in the heap.
1226
1339
  * @remarks Time O(N), Space O(1)
@@ -1244,6 +1357,13 @@ var graphTyped = (() => {
1244
1357
 
1245
1358
 
1246
1359
 
1360
+
1361
+
1362
+
1363
+
1364
+
1365
+
1366
+
1247
1367
 
1248
1368
 
1249
1369
 
@@ -1291,6 +1411,13 @@ var graphTyped = (() => {
1291
1411
 
1292
1412
 
1293
1413
 
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1294
1421
 
1295
1422
 
1296
1423
 
@@ -1315,7 +1442,7 @@ var graphTyped = (() => {
1315
1442
  }
1316
1443
  if (index < 0) return false;
1317
1444
  if (index === 0) {
1318
- this.poll();
1445
+ this.pop();
1319
1446
  } else if (index === this.elements.length - 1) {
1320
1447
  this.elements.pop();
1321
1448
  } else {
@@ -1325,13 +1452,19 @@ var graphTyped = (() => {
1325
1452
  }
1326
1453
  return true;
1327
1454
  }
1455
+ /**
1456
+ * @deprecated Use `deleteWhere` instead. Will be removed in a future major version.
1457
+ */
1458
+ deleteBy(predicate) {
1459
+ return this.deleteWhere(predicate);
1460
+ }
1328
1461
  /**
1329
1462
  * Delete the first element that matches a predicate.
1330
1463
  * @remarks Time O(N), Space O(1)
1331
1464
  * @param predicate - Function (element, index, heap) → boolean.
1332
1465
  * @returns True if an element was removed.
1333
1466
  */
1334
- deleteBy(predicate) {
1467
+ deleteWhere(predicate) {
1335
1468
  let idx = -1;
1336
1469
  for (let i = 0; i < this.elements.length; i++) {
1337
1470
  if (predicate(this.elements[i], i, this)) {
@@ -1341,7 +1474,7 @@ var graphTyped = (() => {
1341
1474
  }
1342
1475
  if (idx < 0) return false;
1343
1476
  if (idx === 0) {
1344
- this.poll();
1477
+ this.pop();
1345
1478
  } else if (idx === this.elements.length - 1) {
1346
1479
  this.elements.pop();
1347
1480
  } else {
@@ -1384,6 +1517,13 @@ var graphTyped = (() => {
1384
1517
 
1385
1518
 
1386
1519
 
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1387
1527
 
1388
1528
 
1389
1529
 
@@ -1464,6 +1604,13 @@ var graphTyped = (() => {
1464
1604
 
1465
1605
 
1466
1606
 
1607
+
1608
+
1609
+
1610
+
1611
+
1612
+
1613
+
1467
1614
 
1468
1615
 
1469
1616
 
@@ -1517,6 +1664,13 @@ var graphTyped = (() => {
1517
1664
 
1518
1665
 
1519
1666
 
1667
+
1668
+
1669
+
1670
+
1671
+
1672
+
1673
+
1520
1674
 
1521
1675
 
1522
1676
 
@@ -1569,6 +1723,13 @@ var graphTyped = (() => {
1569
1723
 
1570
1724
 
1571
1725
 
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+
1572
1733
 
1573
1734
 
1574
1735
 
@@ -1628,6 +1789,13 @@ var graphTyped = (() => {
1628
1789
 
1629
1790
 
1630
1791
 
1792
+
1793
+
1794
+
1795
+
1796
+
1797
+
1798
+
1631
1799
 
1632
1800
 
1633
1801
 
@@ -1829,6 +1997,13 @@ var graphTyped = (() => {
1829
1997
 
1830
1998
 
1831
1999
 
2000
+
2001
+
2002
+
2003
+
2004
+
2005
+
2006
+
1832
2007
 
1833
2008
 
1834
2009
 
@@ -1879,6 +2054,13 @@ var graphTyped = (() => {
1879
2054
 
1880
2055
 
1881
2056
 
2057
+
2058
+
2059
+
2060
+
2061
+
2062
+
2063
+
1882
2064
 
1883
2065
 
1884
2066
 
@@ -1896,6 +2078,14 @@ var graphTyped = (() => {
1896
2078
  get first() {
1897
2079
  return this.length > 0 ? this.elements[this._offset] : void 0;
1898
2080
  }
2081
+ /**
2082
+ * Peek at the front element without removing it (alias for `first`).
2083
+ * @remarks Time O(1), Space O(1)
2084
+ * @returns Front element or undefined.
2085
+ */
2086
+ peek() {
2087
+ return this.first;
2088
+ }
1899
2089
  /**
1900
2090
  * Get the last element (back) without removing it.
1901
2091
  * @remarks Time O(1), Space O(1)
@@ -1945,6 +2135,13 @@ var graphTyped = (() => {
1945
2135
 
1946
2136
 
1947
2137
 
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
1948
2145
 
1949
2146
 
1950
2147
 
@@ -2007,6 +2204,13 @@ var graphTyped = (() => {
2007
2204
 
2008
2205
 
2009
2206
 
2207
+
2208
+
2209
+
2210
+
2211
+
2212
+
2213
+
2010
2214
 
2011
2215
 
2012
2216
 
@@ -2076,6 +2280,13 @@ var graphTyped = (() => {
2076
2280
 
2077
2281
 
2078
2282
 
2283
+
2284
+
2285
+
2286
+
2287
+
2288
+
2289
+
2079
2290
 
2080
2291
 
2081
2292
 
@@ -2135,6 +2346,13 @@ var graphTyped = (() => {
2135
2346
 
2136
2347
 
2137
2348
 
2349
+
2350
+
2351
+
2352
+
2353
+
2354
+
2355
+
2138
2356
 
2139
2357
 
2140
2358
 
@@ -2187,6 +2405,13 @@ var graphTyped = (() => {
2187
2405
 
2188
2406
 
2189
2407
 
2408
+
2409
+
2410
+
2411
+
2412
+
2413
+
2414
+
2190
2415
 
2191
2416
 
2192
2417
 
@@ -2241,6 +2466,21 @@ var graphTyped = (() => {
2241
2466
  this._elements[this._offset + index] = newElement;
2242
2467
  return true;
2243
2468
  }
2469
+ /**
2470
+ * Delete the first element that satisfies a predicate.
2471
+ * @remarks Time O(N), Space O(N)
2472
+ * @param predicate - Function (value, index, queue) → boolean to decide deletion.
2473
+ * @returns True if a match was removed.
2474
+ */
2475
+ deleteWhere(predicate) {
2476
+ for (let i = 0; i < this.length; i++) {
2477
+ if (predicate(this._elements[this._offset + i], i, this)) {
2478
+ this.deleteAt(i);
2479
+ return true;
2480
+ }
2481
+ }
2482
+ return false;
2483
+ }
2244
2484
  /**
2245
2485
  * Reverse the queue in-place by compacting then reversing.
2246
2486
  * @remarks Time O(N), Space O(N)
@@ -2280,6 +2520,13 @@ var graphTyped = (() => {
2280
2520
 
2281
2521
 
2282
2522
 
2523
+
2524
+
2525
+
2526
+
2527
+
2528
+
2529
+
2283
2530
 
2284
2531
 
2285
2532
 
@@ -2326,6 +2573,13 @@ var graphTyped = (() => {
2326
2573
 
2327
2574
 
2328
2575
 
2576
+
2577
+
2578
+
2579
+
2580
+
2581
+
2582
+
2329
2583
 
2330
2584
 
2331
2585
 
@@ -2395,6 +2649,13 @@ var graphTyped = (() => {
2395
2649
 
2396
2650
 
2397
2651
 
2652
+
2653
+
2654
+
2655
+
2656
+
2657
+
2658
+
2398
2659
 
2399
2660
 
2400
2661
 
@@ -2448,6 +2709,13 @@ var graphTyped = (() => {
2448
2709
 
2449
2710
 
2450
2711
 
2712
+
2713
+
2714
+
2715
+
2716
+
2717
+
2718
+
2451
2719
 
2452
2720
 
2453
2721
 
@@ -2505,6 +2773,13 @@ var graphTyped = (() => {
2505
2773
 
2506
2774
 
2507
2775
 
2776
+
2777
+
2778
+
2779
+
2780
+
2781
+
2782
+
2508
2783
 
2509
2784
 
2510
2785
 
@@ -3635,6 +3910,13 @@ var graphTyped = (() => {
3635
3910
 
3636
3911
 
3637
3912
 
3913
+
3914
+
3915
+
3916
+
3917
+
3918
+
3919
+
3638
3920
 
3639
3921
 
3640
3922
 
@@ -3723,6 +4005,13 @@ var graphTyped = (() => {
3723
4005
 
3724
4006
 
3725
4007
 
4008
+
4009
+
4010
+
4011
+
4012
+
4013
+
4014
+
3726
4015
 
3727
4016
 
3728
4017
 
@@ -3809,6 +4098,13 @@ var graphTyped = (() => {
3809
4098
 
3810
4099
 
3811
4100
 
4101
+
4102
+
4103
+
4104
+
4105
+
4106
+
4107
+
3812
4108
 
3813
4109
 
3814
4110
 
@@ -3886,6 +4182,13 @@ var graphTyped = (() => {
3886
4182
 
3887
4183
 
3888
4184
 
4185
+
4186
+
4187
+
4188
+
4189
+
4190
+
4191
+
3889
4192
 
3890
4193
 
3891
4194
 
@@ -3940,6 +4243,13 @@ var graphTyped = (() => {
3940
4243
 
3941
4244
 
3942
4245
 
4246
+
4247
+
4248
+
4249
+
4250
+
4251
+
4252
+
3943
4253
 
3944
4254
 
3945
4255
 
@@ -4047,6 +4357,13 @@ var graphTyped = (() => {
4047
4357
 
4048
4358
 
4049
4359
 
4360
+
4361
+
4362
+
4363
+
4364
+
4365
+
4366
+
4050
4367
 
4051
4368
 
4052
4369
 
@@ -4135,6 +4452,13 @@ var graphTyped = (() => {
4135
4452
 
4136
4453
 
4137
4454
 
4455
+
4456
+
4457
+
4458
+
4459
+
4460
+
4461
+
4138
4462
 
4139
4463
 
4140
4464
 
@@ -4185,6 +4509,13 @@ var graphTyped = (() => {
4185
4509
 
4186
4510
 
4187
4511
 
4512
+
4513
+
4514
+
4515
+
4516
+
4517
+
4518
+
4188
4519
 
4189
4520
 
4190
4521
 
@@ -4288,6 +4619,13 @@ var graphTyped = (() => {
4288
4619
 
4289
4620
 
4290
4621
 
4622
+
4623
+
4624
+
4625
+
4626
+
4627
+
4628
+
4291
4629
 
4292
4630
 
4293
4631
 
@@ -4394,6 +4732,13 @@ var graphTyped = (() => {
4394
4732
 
4395
4733
 
4396
4734
 
4735
+
4736
+
4737
+
4738
+
4739
+
4740
+
4741
+
4397
4742
 
4398
4743
 
4399
4744
 
@@ -4558,6 +4903,13 @@ var graphTyped = (() => {
4558
4903
 
4559
4904
 
4560
4905
 
4906
+
4907
+
4908
+
4909
+
4910
+
4911
+
4912
+
4561
4913
 
4562
4914
 
4563
4915
 
@@ -4643,6 +4995,13 @@ var graphTyped = (() => {
4643
4995
 
4644
4996
 
4645
4997
 
4998
+
4999
+
5000
+
5001
+
5002
+
5003
+
5004
+
4646
5005
 
4647
5006
 
4648
5007
 
@@ -4727,6 +5086,13 @@ var graphTyped = (() => {
4727
5086
 
4728
5087
 
4729
5088
 
5089
+
5090
+
5091
+
5092
+
5093
+
5094
+
5095
+
4730
5096
 
4731
5097
 
4732
5098
 
@@ -4826,6 +5192,13 @@ var graphTyped = (() => {
4826
5192
 
4827
5193
 
4828
5194
 
5195
+
5196
+
5197
+
5198
+
5199
+
5200
+
5201
+
4829
5202
 
4830
5203
 
4831
5204
 
@@ -4880,6 +5253,13 @@ var graphTyped = (() => {
4880
5253
 
4881
5254
 
4882
5255
 
5256
+
5257
+
5258
+
5259
+
5260
+
5261
+
5262
+
4883
5263
 
4884
5264
 
4885
5265
 
@@ -5004,6 +5384,13 @@ var graphTyped = (() => {
5004
5384
 
5005
5385
 
5006
5386
 
5387
+
5388
+
5389
+
5390
+
5391
+
5392
+
5393
+
5007
5394
 
5008
5395
 
5009
5396
 
@@ -5150,6 +5537,13 @@ var graphTyped = (() => {
5150
5537
 
5151
5538
 
5152
5539
 
5540
+
5541
+
5542
+
5543
+
5544
+
5545
+
5546
+
5153
5547
 
5154
5548
 
5155
5549
 
@@ -5218,6 +5612,13 @@ var graphTyped = (() => {
5218
5612
 
5219
5613
 
5220
5614
 
5615
+
5616
+
5617
+
5618
+
5619
+
5620
+
5621
+
5221
5622
 
5222
5623
 
5223
5624
 
@@ -5268,6 +5669,13 @@ var graphTyped = (() => {
5268
5669
 
5269
5670
 
5270
5671
 
5672
+
5673
+
5674
+
5675
+
5676
+
5677
+
5678
+
5271
5679
 
5272
5680
 
5273
5681