From e1712a4e7069b224a2385999d09a5328d22fe1f5 Mon Sep 17 00:00:00 2001 From: NUHASHROXME <106915718+YashNuhash@users.noreply.github.com> Date: Mon, 12 Jun 2023 11:10:47 +0600 Subject: [PATCH 001/486] Updated Problem list binary_search.md Added a new Problem. --- src/num_methods/binary_search.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/num_methods/binary_search.md b/src/num_methods/binary_search.md index a95db3c32..31332a209 100644 --- a/src/num_methods/binary_search.md +++ b/src/num_methods/binary_search.md @@ -143,6 +143,7 @@ This paradigm is widely used in tasks around trees, such as finding lowest commo * [LeetCode - Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square/) * [LeetCode - Guess Number Higher or Lower](https://leetcode.com/problems/guess-number-higher-or-lower/) * [LeetCode - Search a 2D Matrix II](https://leetcode.com/problems/search-a-2d-matrix-ii/) +* [LeetCode - Kth Ancestor of a Tree Node](https://leetcode.com/problems/kth-ancestor-of-a-tree-node) * [Codeforces - Interesting Drink](https://codeforces.com/problemset/problem/706/B/) * [Codeforces - Magic Powder - 1](https://codeforces.com/problemset/problem/670/D1) * [Codeforces - Another Problem on Strings](https://codeforces.com/problemset/problem/165/C) From c469486cfa6907927ad31769634742d233e6cb37 Mon Sep 17 00:00:00 2001 From: Yury Semenov Date: Wed, 12 Jul 2023 18:52:18 +0300 Subject: [PATCH 002/486] Added an article on planar graph faces --- src/geometry/planar.md | 151 +++++++++++++++++++++++++++++++++++ src/geometry/planar_hole.png | Bin 0 -> 42198 bytes src/navigation.md | 2 + test/test_planar_faces.cpp | 100 +++++++++++++++++++++++ 4 files changed, 253 insertions(+) create mode 100644 src/geometry/planar.md create mode 100644 src/geometry/planar_hole.png create mode 100644 test/test_planar_faces.cpp diff --git a/src/geometry/planar.md b/src/geometry/planar.md new file mode 100644 index 000000000..d9b059eb9 --- /dev/null +++ b/src/geometry/planar.md @@ -0,0 +1,151 @@ +--- +title: Finding faces of a planar graph +tags: + - Translated +--- +# Finding faces of a planar graph + +Consider a graph $G$ with $n$ vertices and $m$ edges, which can be drawn on a plane in such a way that two edges intersect only at a common vertex (if it exists). +Such graphs are called **planar**. Now suppose that we are given a planar graph together with its straight-line drawing, which means that for each vertex $v$ we have a corresponding point $(x, y)$ and all edges are drawn as line segments between these points without intersection (such drawing always exists). These line segments split the plane into several regions, which are called faces. Exactly one of the faces is unbounded. This face is called **outer**, while the other faces are called **inner**. + +In this article we will deal with finding both inner and outer faces of a planar graph. We will assume that the graph is connected. + +## Some facts about planar graphs + +In this section we present several facts about planar graphs without proof. Readers who are interested in proofs should refer to [Graph Theory by R. Diestel](https://sites.math.washington.edu/~billey/classes/562.winter.2018/articles/GraphTheory.pdf) or some other book. + +### Euler's theorem +Euler's theorem states that any correct drawing of a connected planar graph with $n$ vertices, $m$ edges and $f$ faces satisfies: + +$$n - m + f = 2$$ + +And more generally, every planar graph with $k$ connected components satisfies: + +$$n - m + f = 1 + k$$ + +### Number of edges of a planar graph. +If $n \ge 3$ then the maximum number of edges of a planar graph with $n$ vertices is $3n - 6$. This number is achieved by any connected planar graph where each face is bounded by a triangle. In terms of complexity this fact means that $m = O(n)$ for any planar graph. + +### Number of faces of a planar graph. +As a direct consequence of the above fact, if $n \ge 3$ then the maximum number of faces of a planar graph with $n$ vertices is $2n - 4$. + +### Minimum vertex degree in a planar graph. +Every planar graph has a vertex of degree 5 or less. + +## The algorithm + +Firstly, sort the adjacent edges for each vertex by polar angle. +Now let's traverse the graph in the following way. Suppose that we entered vertex $u$ through the edge $(v, u)$ and $(u, w)$ is the next edge after $(v, u)$ in the sorted adjacency list of $u$. Then the next vertex will be $w$. It turns out that if we start this traversal at some edge $(v, u)$, we will traverse exactly one of the faces adjacent to $(v, u)$, the exact face depending on whether our first step is from $u$ to $v$ or from $v$ to $u$. + +Now the algorithm is quite obvious. We must iterate over all edges of the graph and start the traversal for each edge that wasn't visited by one of the previous traversals. This way we will find each face exactly once, and each edge will be traversed twice (once in each direction). + +### Finding the next edge +During the traversal we have to find the next edge in counter-clockwise order. The most obvious way to find the next edge is binary search by angle. However, given the counter-clockwise order of adjacent edges for each vertex, we can precompute the next edges and store them in a hash table. If the edges are already sorted by angle, the complexity of finding all faces in this case becomes linear. + +### Finding the outer face +It's not hard to see that the algorithm traverses each inner face in a clockwise order and the outer face in the counter-clockwise order, so the outer face can be found by checking the order of each face. + +### Complexity +It's quite clear that the complexity of the algorithm is $O(m \log m)$ because of sorting, and since $m = O(n)$, it's actually $O(n \log n)$. As mentioned before, without sorting the complexity becomes $O(n)$. + +## What if the graph isn't connected? + +At the first glance it may seem that finding faces of a disconnected graph is not much harder because we can run the same algorithm for each connected component. However, the components may be drawn in a nested way, forming **holes** (see the image below). In this case the inner face of some component becomes the outer face of some other components and has a complex disconnected border. Dealing with such cases is quite hard, one possible approach is to identify nested components with [point location](point-location.md) algorithms. + +
![Planar graph with holes](planar_hole.png)
+ +## Implementation +The following implementation returns a vector of vertices for each face, outer face goes first. +Inner faces are returned in counter-clockwise orders and the outer face is returned in clockwise order. + +For simplicity we find the next edge by doing binary search by angle. +```{.cpp file=planar} +struct Point { + int64_t x, y; + + Point(int64_t x_, int64_t y_): x(x_), y(y_) {} + + Point operator - (const Point & p) const { + return Point(x - p.x, y - p.y); + } + + int64_t cross (const Point & p) const { + return x * p.y - y * p.x; + } + + int64_t cross (const Point & p, const Point & q) const { + return (p - *this).cross(q - *this); + } + + int half () const { + return int(y < 0 || (y == 0 && x < 0)); + } +}; + +std::vector> find_faces(std::vector vertices, std::vector> adj) { + size_t n = vertices.size(); + std::vector> used(n); + for (size_t i = 0; i < n; i++) { + used[i].resize(adj[i].size()); + used[i].assign(adj[i].size(), 0); + auto compare = [&](size_t l, size_t r) { + Point pl = vertices[l] - vertices[i]; + Point pr = vertices[r] - vertices[i]; + if (pl.half() != pr.half()) + return pl.half() < pr.half(); + return pl.cross(pr) > 0; + }; + std::sort(adj[i].begin(), adj[i].end(), compare); + } + std::vector> faces; + for (size_t i = 0; i < n; i++) { + for (size_t edge_id = 0; edge_id < adj[i].size(); edge_id++) { + if (used[i][edge_id]) { + continue; + } + std::vector face; + size_t v = i; + size_t e = edge_id; + while (!used[v][e]) { + used[v][e] = true; + face.push_back(v); + size_t u = adj[v][e]; + size_t e1 = std::lower_bound(adj[u].begin(), adj[u].end(), v, [&](size_t l, size_t r) { + Point pl = vertices[l] - vertices[u]; + Point pr = vertices[r] - vertices[u]; + if (pl.half() != pr.half()) + return pl.half() < pr.half(); + return pl.cross(pr) > 0; + }) - adj[u].begin() + 1; + if (e1 == adj[u].size()) { + e1 = 0; + } + v = u; + e = e1; + } + std::reverse(face.begin(), face.end()); + int sign = 0; + for (size_t j = 0; j < face.size(); j++) { + size_t j1 = (j + 1) % face.size(); + size_t j2 = (j + 2) % face.size(); + int64_t val = vertices[face[j]].cross(vertices[face[j1]], vertices[face[j2]]); + if (val > 0) { + sign = 1; + break; + } else if (val < 0) { + sign = -1; + break; + } + } + if (sign <= 0) { + faces.insert(faces.begin(), face); + } else { + faces.emplace_back(face); + } + } + } + return faces; +} +``` +## Problems + * [TIMUS 1664 Pipeline Transportation](https://acm.timus.ru/problem.aspx?space=1&num=1664) diff --git a/src/geometry/planar_hole.png b/src/geometry/planar_hole.png new file mode 100644 index 0000000000000000000000000000000000000000..1059a2197b7e118f99bfab5c2ee55e1e103854c7 GIT binary patch literal 42198 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�yFY#Av23hlyODAJRqU)^O{? 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 z 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 literal 0 HcmV?d00001 diff --git a/src/navigation.md b/src/navigation.md index b37bab725..260c68a26 100644 --- a/src/navigation.md +++ b/src/navigation.md @@ -133,6 +133,8 @@ search: - [Convex hull trick and Li Chao tree](geometry/convex_hull_trick.md) - Sweep-line - [Search for a pair of intersecting segments](geometry/intersecting_segments.md) + - Planar graphs + - [Finding faces of a planar graph](geometry/planar.md) - [Point location in O(log N)](geometry/point-location.md) - Miscellaneous - [Finding the nearest pair of points](geometry/nearest_points.md) diff --git a/test/test_planar_faces.cpp b/test/test_planar_faces.cpp new file mode 100644 index 000000000..731bae4db --- /dev/null +++ b/test/test_planar_faces.cpp @@ -0,0 +1,100 @@ +#include +#include +#include + +#include "planar.h" + +bool equal_cycles(const std::vector & a, const std::vector & b) { + size_t n = a.size(); + if (n != b.size()) { + return false; + } + for (size_t begin = 0; begin < n; begin++) { + bool ok = true; + for (size_t i = 0; i < n; i++) { + if (a[(begin + i) % n] != b[i]) { + ok = false; + break; + } + } + if (ok) { + return true; + } + } + return false; +} + +void test_simple() { + std::vector p = { + Point(0, 0), + Point(1, 0), + Point(1, 1), + Point(0, 1) + }; + + std::vector> adj = { + {1, 2, 3}, + {0, 2}, + {0, 1, 3}, + {0, 2} + }; + + auto faces = find_faces(p, adj); + assert(faces.size() == 3u); + assert(equal_cycles(faces[0], {3, 2, 1, 0})); + bool eq11 = equal_cycles(faces[1], {0, 1, 2}); + bool eq12 = equal_cycles(faces[1], {0, 2, 3}); + bool eq21 = equal_cycles(faces[2], {0, 1, 2}); + bool eq22 = equal_cycles(faces[2], {0, 2, 3}); + assert(eq11^eq21); + assert(eq12^eq22); +} + +void test_degenerate() { + std::vector p = { + Point(0, 0), + Point(1, 1), + Point(2, 2) + }; + + std::vector> adj = { + {1}, + {0, 2}, + {1} + }; + + auto faces = find_faces(p, adj); + assert(faces.size() == 1u); + assert(equal_cycles(faces[0], {0, 1, 2, 1})); +} + +void test_cycle_with_chain() { + std::vector p = { + Point(0, 0), + Point(0, 3), + Point(3, 3), + Point(3, 0), + Point(1, 1), + Point(2, 2) + }; + + std::vector> adj = { + {1, 3}, + {0, 2}, + {1, 3, 5}, + {0, 2}, + {5}, + {2, 4} + }; + + auto faces = find_faces(p, adj); + assert(faces.size() == 2u); + assert(equal_cycles(faces[0], {0, 1, 2, 3})); + assert(equal_cycles(faces[1], {2, 5, 4, 5, 2, 1, 0, 3})); +} + +int main() { + test_simple(); + test_degenerate(); + test_cycle_with_chain(); +} From 60acd9b5b5106825a799c7f2b5b23c7767e44033 Mon Sep 17 00:00:00 2001 From: Yury Semenov Date: Thu, 13 Jul 2023 23:54:38 +0300 Subject: [PATCH 003/486] added building graph from segments --- src/geometry/planar.md | 195 +++++++++++++++++++++++++++++++ src/geometry/planar_implicit.png | Bin 0 -> 35023 bytes test/test_planar_implicit.cpp | 82 +++++++++++++ 3 files changed, 277 insertions(+) create mode 100644 src/geometry/planar_implicit.png create mode 100644 test/test_planar_implicit.cpp diff --git a/src/geometry/planar.md b/src/geometry/planar.md index d9b059eb9..9e3808313 100644 --- a/src/geometry/planar.md +++ b/src/geometry/planar.md @@ -147,5 +147,200 @@ std::vector> find_faces(std::vector vertices, std::ve return faces; } ``` + +## Building planar graph from line segments + +Sometimes you are not given a graph explicitly, but rather as a set of line segments on a plane, and the actual graph is formed by intersecting those segments, as shown in the picture below. In this case you have to build the graph manually. The easiest way to do so is as follows. Fix a segment and intersect it with all other segments. Then sort all intersection points together with the two endpoints of the segment lexicographically and add them to the graph as vertices. Also link each two adjacent vertices in lexicographical order by an edge. After doing this procedure for all edges we will obtain the graph. Of course, we should ensure that two equal intersection points will always correspond to the same vertex. The easiest way to do this is to store the points in a map by their coordinates, regarding points whose coordinates differ by a small number (say, less than $10^{-9}$) as equal. This algorithm works in $O(n^2 \log n)$. + +
![Implicitly defined graph](planar_implicit.png)
+ +## Implementation +```{.cpp file=planar_implicit} +using dbl = long double; + +const dbl eps = 1e-9; + +struct Point { + dbl x, y; + + Point(){} + Point(dbl x_, dbl y_): x(x_), y(y_) {} + + Point operator * (dbl d) const { + return Point(x * d, y * d); + } + + Point operator + (const Point & p) const { + return Point(x + p.x, y + p.y); + } + + Point operator - (const Point & p) const { + return Point(x - p.x, y - p.y); + } + + dbl cross (const Point & p) const { + return x * p.y - y * p.x; + } + + dbl cross (const Point & p, const Point & q) const { + return (p - *this).cross(q - *this); + } + + dbl dot (const Point & p) const { + return x * p.x + y * p.y; + } + + dbl dot (const Point & p, const Point & q) const { + return (p - *this).dot(q - *this); + } + + bool operator < (const Point & p) const { + if (fabs(x - p.x) < eps) { + if (fabs(y - p.y) < eps) { + return false; + } else { + return y < p.y; + } + } else { + return x < p.x; + } + } + + bool operator == (const Point & p) const { + return fabs(x - p.x) < eps && fabs(y - p.y) < eps; + } + + bool operator >= (const Point & p) const { + return !(*this < p); + } +}; + +struct Line{ + Point p[2]; + + Line(Point l, Point r){p[0] = l; p[1] = r;} + Point& operator [](const int & i){return p[i];} + const Point& operator[](const int & i)const{return p[i];} + Line(const Line & l){ + p[0] = l.p[0]; p[1] = l.p[1]; + } + Point getOrth()const{ + return Point(p[1].y - p[0].y, p[0].x - p[1].x); + } + bool hasPointLine(const Point & t)const{ + return std::fabs(p[0].cross(p[1], t)) < eps; + } + bool hasPointSeg(const Point & t)const{ + return hasPointLine(t) && t.dot(p[0], p[1]) < eps; + } +}; + +std::vector interLineLine(Line l1, Line l2){ + if(std::fabs(l1.getOrth().cross(l2.getOrth())) < eps){ + if(l1.hasPointLine(l2[0]))return {l1[0], l1[1]}; + else return {}; + } + Point u = l2[1] - l2[0]; + Point v = l1[1] - l1[0]; + dbl s = u.cross(l2[0] - l1[0])/u.cross(v); + return {Point(l1[0] + v * s)}; +} + +std::vector interSegSeg(Line l1, Line l2){ + if (l1[0] == l1[1]) { + if (l2[0] == l2[1]) { + if (l1[0] == l2[0]) + return {l1[0]}; + else + return {}; + } else { + if (l2.hasPointSeg(l1[0])) + return {l1[0]}; + else + return {}; + } + } + if (l2[0] == l2[1]) { + if (l1.hasPointSeg(l2[0])) + return {l2[0]}; + else + return {}; + } + auto li = interLineLine(l1, l2); + if (li.empty()) + return li; + if (li.size() == 2) { + if (l1[0] >= l1[1]) + std::swap(l1[0], l1[1]); + if (l2[0] >= l2[1]) + std::swap(l2[0], l2[1]); + std::vector res(2); + if (l1[0] < l2[0]) + res[0] = l2[0]; + else + res[0] = l1[0]; + if (l1[1] < l2[1]) + res[1] = l1[1]; + else + res[1] = l2[1]; + if (res[0] == res[1]) + res.pop_back(); + if (res.size() == 2u && res[1] < res[0]) + return {}; + else + return res; + } + Point cand = li[0]; + if (l1.hasPointSeg(cand) && l2.hasPointSeg(cand)) + return {cand}; + else + return {}; +} + +std::pair, std::vector>> build_graph(std::vector segments) { + std::vector p; + std::vector> adj; + std::map point_id; + auto get_point_id = [&](Point pt) { + if (!point_id.count(pt)) { + adj.emplace_back(); + size_t id = point_id.size(); + point_id[pt] = id; + p.push_back(pt); + return id; + } else { + return point_id[pt]; + } + }; + for (size_t i = 0; i < segments.size(); i++) { + std::vector curr = { + get_point_id(segments[i][0]), + get_point_id(segments[i][1]) + }; + for (size_t j = 0; j < segments.size(); j++) { + if (i == j) + continue; + auto inter = interSegSeg(segments[i], segments[j]); + for (auto pt: inter) { + curr.push_back(get_point_id(pt)); + } + } + std::sort(curr.begin(), curr.end(), [&](size_t l, size_t r) { return p[l] < p[r]; }); + curr.erase(std::unique(curr.begin(), curr.end()), curr.end()); + for (size_t j = 0; j + 1 < curr.size(); j++) { + adj[curr[j]].push_back(curr[j + 1]); + adj[curr[j + 1]].push_back(curr[j]); + } + } + for (size_t i = 0; i < adj.size(); i++) { + std::sort(adj[i].begin(), adj[i].end()); + // removing edges that were added multiple times + adj[i].erase(std::unique(adj[i].begin(), adj[i].end()), adj[i].end()); + } + return {p, adj}; +} +``` + ## Problems * [TIMUS 1664 Pipeline Transportation](https://acm.timus.ru/problem.aspx?space=1&num=1664) + * [TIMUS 1681 Brother Bear's Garden](https://acm.timus.ru/problem.aspx?space=1&num=1681) diff --git a/src/geometry/planar_implicit.png b/src/geometry/planar_implicit.png new file mode 100644 index 0000000000000000000000000000000000000000..37a0e72f8cab363269c8f3e7dd333189b7198f96 GIT binary patch literal 35023 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 N|D^88&^mhI{{TK-go^+G literal 0 HcmV?d00001 diff --git a/test/test_planar_implicit.cpp b/test/test_planar_implicit.cpp new file mode 100644 index 000000000..5bd6c75d7 --- /dev/null +++ b/test/test_planar_implicit.cpp @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include + +#include "planar_implicit.h" + +void test_square() { + std::vector s = { + Line(Point(0, 0), Point(0, 1)), + Line(Point(0, 0), Point(1, 0)), + Line(Point(1, 1), Point(0, 1)), + Line(Point(1, 1), Point(1, 0)), + Line(Point(0, 0), Point(1, 1)), + Line(Point(1, 0), Point(0, 1)) + }; + auto [pts, adj] = build_graph(s); + std::vector pts1 = {Point(0, 0), Point(0, 1), Point(1, 0), Point(1, 1), Point(0.5, 0.5)}; + assert(pts == pts1); + std::sort(adj[4].begin(), adj[4].end()); + std::vector adj1 = {0, 1, 2, 3}; + assert(adj[4] == adj1); +} + +void test_grid() { + std::vector s = { + Line(Point(0, 0), Point(0, 3)), + Line(Point(0, 0), Point(3, 0)), + Line(Point(3, 3), Point(0, 3)), + Line(Point(3, 3), Point(3, 0)), + Line(Point(1, 0), Point(1, 3)), + Line(Point(2, 0), Point(2, 3)), + Line(Point(0, 1), Point(3, 1)), + Line(Point(0, 2), Point(3, 2)) + }; + auto [pts, adj] = build_graph(s); + auto pts_copy = pts; + std::sort(pts_copy.begin(), pts_copy.end()); + std::vector pts1 = { + Point(0, 0), Point(0, 1), Point(0, 2), Point(0, 3), + Point(1, 0), Point(1, 1), Point(1, 2), Point(1, 3), + Point(2, 0), Point(2, 1), Point(2, 2), Point(2, 3), + Point(3, 0), Point(3, 1), Point(3, 2), Point(3, 3), + }; + assert(pts_copy == pts1); + std::map m; + for (size_t i = 0; i < pts.size(); i++) { + m[pts[i]] = i; + } + for (int i = 0; i < 3; i++) { + for (int j = 0; j <= 3; j++) { + size_t v = m[Point(i, j)]; + size_t u = m[Point(i + 1, j)]; + assert(std::find(adj[v].begin(), adj[v].end(), u) != adj[v].end()); + assert(std::find(adj[u].begin(), adj[u].end(), v) != adj[u].end()); + } + } + for (int i = 0; i < 3; i++) { + for (int j = 0; j <= 3; j++) { + size_t v = m[Point(j, i)]; + size_t u = m[Point(j, i + 1)]; + assert(std::find(adj[v].begin(), adj[v].end(), u) != adj[v].end()); + assert(std::find(adj[u].begin(), adj[u].end(), v) != adj[u].end()); + } + } +} + +void test_multiedges() { + std::vector s = { + Line(Point(0, 0), Point(2, 2)), + Line(Point(1, 1), Point(3, 3)) + }; + auto [pts, adj] = build_graph(s); + assert(adj[0].size() == 1u && adj[1].size() == 2u && adj[2].size() == 2u && adj[3].size() == 1u); +} + +int main() { + test_square(); + test_grid(); + test_multiedges(); +} From 3641395acfbbef065cd966d38919cd2fdcfa6ed3 Mon Sep 17 00:00:00 2001 From: Yury Semenov Date: Fri, 14 Jul 2023 00:06:12 +0300 Subject: [PATCH 004/486] resized pictures --- src/geometry/planar_hole.png | Bin 42198 -> 25767 bytes src/geometry/planar_implicit.png | Bin 35023 -> 34990 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/geometry/planar_hole.png b/src/geometry/planar_hole.png index 1059a2197b7e118f99bfab5c2ee55e1e103854c7..4e94589371553effaedcced8743fc7f10a2091eb 100644 GIT binary patch literal 25767 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 literal 42198 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�yFY#Av23hlyODAJRqU)^O{? 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 z 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 diff --git a/src/geometry/planar_implicit.png b/src/geometry/planar_implicit.png index 37a0e72f8cab363269c8f3e7dd333189b7198f96..3b33aa5926a3612995390a10c5b68f80a889d4a2 100644 GIT binary patch literal 34990 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򧲮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 literal 35023 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 N|D^88&^mhI{{TK-go^+G From bed765f0a5c03ee870b38f9d482b27cea47bdfe5 Mon Sep 17 00:00:00 2001 From: Oleksandr Kulkov Date: Fri, 14 Jul 2023 21:54:12 +0200 Subject: [PATCH 005/486] e_maxx_link: facets --- src/geometry/planar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/geometry/planar.md b/src/geometry/planar.md index 9e3808313..0917381b8 100644 --- a/src/geometry/planar.md +++ b/src/geometry/planar.md @@ -2,6 +2,7 @@ title: Finding faces of a planar graph tags: - Translated +e_maxx_link: facets --- # Finding faces of a planar graph From 5ba4d6fcfbdb18fe977cb6f314443d6f7c9ae25e Mon Sep 17 00:00:00 2001 From: Yury Semenov Date: Sat, 15 Jul 2023 10:07:51 +0300 Subject: [PATCH 006/486] fix --- README.md | 1 + src/geometry/planar.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ef2a16f6e..f21f5d57e 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Compiled pages are published at [https://cp-algorithms.com/](https://cp-algorith ### New articles +- (12 July 2023) [Finding faces of a planar graph](https://cp-algorithms.com/geometry/planar.html) - (18 April 2023) [Bit manipulation](https://cp-algorithms.com/algebra/bit-manipulation.html) - (17 October 2022) [Binary Search](https://cp-algorithms.com/num_methods/binary_search.html) - (17 October 2022) [MEX (Minimum Excluded element in an array)](https://cp-algorithms.com/sequences/mex.html) diff --git a/src/geometry/planar.md b/src/geometry/planar.md index 0917381b8..cb632b5ba 100644 --- a/src/geometry/planar.md +++ b/src/geometry/planar.md @@ -7,7 +7,7 @@ e_maxx_link: facets # Finding faces of a planar graph Consider a graph $G$ with $n$ vertices and $m$ edges, which can be drawn on a plane in such a way that two edges intersect only at a common vertex (if it exists). -Such graphs are called **planar**. Now suppose that we are given a planar graph together with its straight-line drawing, which means that for each vertex $v$ we have a corresponding point $(x, y)$ and all edges are drawn as line segments between these points without intersection (such drawing always exists). These line segments split the plane into several regions, which are called faces. Exactly one of the faces is unbounded. This face is called **outer**, while the other faces are called **inner**. +Such graphs are called **planar**. Now suppose that we are given a planar graph together with its straight-line embedding, which means that for each vertex $v$ we have a corresponding point $(x, y)$ and all edges are drawn as line segments between these points without intersection (such embedding always exists). These line segments split the plane into several regions, which are called faces. Exactly one of the faces is unbounded. This face is called **outer**, while the other faces are called **inner**. In this article we will deal with finding both inner and outer faces of a planar graph. We will assume that the graph is connected. @@ -16,7 +16,7 @@ In this article we will deal with finding both inner and outer faces of a planar In this section we present several facts about planar graphs without proof. Readers who are interested in proofs should refer to [Graph Theory by R. Diestel](https://sites.math.washington.edu/~billey/classes/562.winter.2018/articles/GraphTheory.pdf) or some other book. ### Euler's theorem -Euler's theorem states that any correct drawing of a connected planar graph with $n$ vertices, $m$ edges and $f$ faces satisfies: +Euler's theorem states that any correct embedding of a connected planar graph with $n$ vertices, $m$ edges and $f$ faces satisfies: $$n - m + f = 2$$ From 66c5eeda2a7aa2bbb19db44a2566245e96033c5e Mon Sep 17 00:00:00 2001 From: Yury Semenov Date: Sat, 15 Jul 2023 15:45:57 +0300 Subject: [PATCH 007/486] fixed map bug --- src/geometry/planar.md | 12 ++++++++---- test/test_planar_implicit.cpp | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/geometry/planar.md b/src/geometry/planar.md index cb632b5ba..1c613f585 100644 --- a/src/geometry/planar.md +++ b/src/geometry/planar.md @@ -301,16 +301,20 @@ std::vector interSegSeg(Line l1, Line l2){ std::pair, std::vector>> build_graph(std::vector segments) { std::vector p; std::vector> adj; - std::map point_id; + std::map, size_t> point_id; auto get_point_id = [&](Point pt) { - if (!point_id.count(pt)) { + auto repr = std::make_pair( + int64_t(std::round(pt.x * 1000000000) + 1e-6), + int64_t(std::round(pt.y * 1000000000) + 1e-6) + ); + if (!point_id.count(repr)) { adj.emplace_back(); size_t id = point_id.size(); - point_id[pt] = id; + point_id[repr] = id; p.push_back(pt); return id; } else { - return point_id[pt]; + return point_id[repr]; } }; for (size_t i = 0; i < segments.size(); i++) { diff --git a/test/test_planar_implicit.cpp b/test/test_planar_implicit.cpp index 5bd6c75d7..86c3c7388 100644 --- a/test/test_planar_implicit.cpp +++ b/test/test_planar_implicit.cpp @@ -2,6 +2,8 @@ #include #include #include +#include +#include #include #include "planar_implicit.h" From 2c9e1c01c9de585d0c7283f93eae767d1431db60 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Sun, 16 Jul 2023 23:51:05 +0530 Subject: [PATCH 008/486] Update lca_binary_lifting.md The question I added, can also be solved using LCA concept, so I wanted to share, --- src/graph/lca_binary_lifting.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/graph/lca_binary_lifting.md b/src/graph/lca_binary_lifting.md index e8f51dc94..af862e1a4 100644 --- a/src/graph/lca_binary_lifting.md +++ b/src/graph/lca_binary_lifting.md @@ -96,3 +96,4 @@ void preprocess(int root) { ## Practice Problems * [Codechef - Longest Good Segment](https://www.codechef.com/problems/LGSEG) +* [HackerEarth - Optimal Connectivity](https://www.hackerearth.com/practice/algorithms/graphs/graph-representation/practice-problems/algorithm/optimal-connectivity-c6ae79ca/) From 36de2cc200db292eebeecf7ffd066d845eae6fb0 Mon Sep 17 00:00:00 2001 From: Roman Steinberg Date: Sun, 18 Jun 2023 12:56:02 +0200 Subject: [PATCH 009/486] Update kuhn_maximum_bipartite_matching.md Two important terms are defined: maximal and maximum matching. The formulation of the Beurge's lemma requires maximum matching term definition. And it is important to show difference between maximal and maximum matching. It is also possible to state perfect and near perfect matching definition, but this particular article doesn't require them. --- src/graph/kuhn_maximum_bipartite_matching.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/graph/kuhn_maximum_bipartite_matching.md b/src/graph/kuhn_maximum_bipartite_matching.md index 64647cb5f..7b1bbd595 100644 --- a/src/graph/kuhn_maximum_bipartite_matching.md +++ b/src/graph/kuhn_maximum_bipartite_matching.md @@ -26,6 +26,10 @@ by this matching. * An **augmenting path** (in a bipartite graph, with respect to some matching) is an alternating path whose initial and final vertices are unsaturated, i.e., they do not belong in the matching. +* A **maximal matching** is a matching M of a graph G that is not a subset of any other matching. + +* A **maximum matching** (also known as maximum-cardinality matching) is a matching that contains the largest possible number of edges. Every maximum matching is a maximal matching. + * The **symmetric difference** (also known as the **disjunctive union**) of sets $A$ and $B$, represented by $A \oplus B$, is the set of all elements that belong to exactly one of $A$ or $B$, but not to both. That is, $A \oplus B = (A - B) \cup (B - A) = (A \cup B) - (A \cap B)$. From c3aeb45fd21d0f3bdf244fd30a5fb1953e92c1fb Mon Sep 17 00:00:00 2001 From: Oleksandr Kulkov Date: Mon, 17 Jul 2023 21:50:56 +0200 Subject: [PATCH 010/486] style changes --- src/graph/kuhn_maximum_bipartite_matching.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/graph/kuhn_maximum_bipartite_matching.md b/src/graph/kuhn_maximum_bipartite_matching.md index 7b1bbd595..25b835ca1 100644 --- a/src/graph/kuhn_maximum_bipartite_matching.md +++ b/src/graph/kuhn_maximum_bipartite_matching.md @@ -15,10 +15,14 @@ that no selected edge shares a vertex with any other selected edge. ### Required Definitions * A **matching** $M$ is a set of pairwise non-adjacent edges of a graph (in other words, no more than one edge from the set should be incident to any vertex of the graph $M$). -The **cardinality** of a matching is the number of edges in it. The maximum (or largest) matching is a matching whose cardinality is maximum among all possible matchings -in a given graph. All those vertices that have an adjacent edge from the matching (i.e., which have degree exactly one in the subgraph formed by $M$) are called **saturated** +The **cardinality** of a matching is the number of edges in it. +All those vertices that have an adjacent edge from the matching (i.e., which have degree exactly one in the subgraph formed by $M$) are called **saturated** by this matching. +* A **maximal matching** is a matching $M$ of a graph $G$ that is not a subset of any other matching. + +* A **maximum matching** (also known as maximum-cardinality matching) is a matching that contains the largest possible number of edges. Every maximum matching is a maximal matching. + * A **path** of length $k$ here means a *simple* path (i.e. not containing repeated vertices or edges) containing $k$ edges, unless specified otherwise. * An **alternating path** (in a bipartite graph, with respect to some matching) is a path in which the edges alternately belong / do not belong to the matching. @@ -26,10 +30,6 @@ by this matching. * An **augmenting path** (in a bipartite graph, with respect to some matching) is an alternating path whose initial and final vertices are unsaturated, i.e., they do not belong in the matching. -* A **maximal matching** is a matching M of a graph G that is not a subset of any other matching. - -* A **maximum matching** (also known as maximum-cardinality matching) is a matching that contains the largest possible number of edges. Every maximum matching is a maximal matching. - * The **symmetric difference** (also known as the **disjunctive union**) of sets $A$ and $B$, represented by $A \oplus B$, is the set of all elements that belong to exactly one of $A$ or $B$, but not to both. That is, $A \oplus B = (A - B) \cup (B - A) = (A \cup B) - (A \cap B)$. From b8c085161973011ede4b3b09da5483036b121a29 Mon Sep 17 00:00:00 2001 From: Egor Gorbachev Date: Sun, 16 Jul 2023 21:48:51 +0200 Subject: [PATCH 011/486] Update polynomial.md typo in indices --- src/algebra/polynomial.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/algebra/polynomial.md b/src/algebra/polynomial.md index c5f01ce9f..52ecb997f 100644 --- a/src/algebra/polynomial.md +++ b/src/algebra/polynomial.md @@ -263,7 +263,7 @@ Note that the matrix above is a so-called triangular [Toeplitz matrix](https://e Let's generalize the Sieveking–Kung algorithm. Consider equation $F(P) = 0$ where $P(x)$ should be a polynomial and $F(x)$ is some polynomial-valued function defined as -$$F(x) = \sum\limits_{i=0}^\infty \alpha_i (x-\beta)^k,$$ +$$F(x) = \sum\limits_{i=0}^\infty \alpha_i (x-\beta)^i,$$ where $\beta$ is some constant. It can be proven that if we introduce a new formal variable $y$, we can express $F(x)$ as @@ -271,7 +271,7 @@ $$F(x) = F(y) + (x-y)F'(y) + (x-y)^2 G(x,y),$$ where $F'(x)$ is the derivative formal power series defined as -$$F'(x) = \sum\limits_{i=0}^\infty (k+1)\alpha_{i+1}(x-\beta)^k,$$ +$$F'(x) = \sum\limits_{i=0}^\infty (i+1)\alpha_{i+1}(x-\beta)^i,$$ and $G(x, y)$ is some formal power series of $x$ and $y$. With this result we can find the solution iteratively. From ac5eef2e744913b9c9481d195a92da658dca599b Mon Sep 17 00:00:00 2001 From: Egor Gorbachev Date: Mon, 17 Jul 2023 20:08:07 +0200 Subject: [PATCH 012/486] Update polynomial.md --- src/algebra/polynomial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/algebra/polynomial.md b/src/algebra/polynomial.md index 52ecb997f..6676f9fed 100644 --- a/src/algebra/polynomial.md +++ b/src/algebra/polynomial.md @@ -384,7 +384,7 @@ The coefficient of $x^{n+r}$ of the product of the polynomials $A_0(x) = \sum\li Assume you need to calculate $A(x_1), \dots, A(x_n)$. As mentioned earlier, $A(x) \equiv A(x_i) \pmod{x-x_i}$. Thus you may do the following: 1. Compute a segment tree such that in the segment $[l,r)$ stands the product $P_{l, r}(x) = (x-x_l)(x-x_{l+1})\dots(x-x_{r-1})$. -2. Starting with $l=1$ and $r=n$ at the root node. Let $m=\lfloor(l+r)/2\rfloor$. Let's move down to $[l,m)$ with the polynomial $A(x) \pmod{P_{l,m}(x)}$. +2. Starting with $l=0$ and $r=n$ at the root node. Let $m=\lfloor(l+r)/2\rfloor$. Let's move down to $[l,m)$ with the polynomial $A(x) \pmod{P_{l,m}(x)}$. 3. This will recursively compute $A(x_l), \dots, A(x_{m-1})$, now do the same for $[m,r)$ with $A(x) \pmod{P_{m,r}(x)}$. 4. Concatenate the results from the first and second recursive call and return them. From 77ef08ad68f42b9fcf998b426c13d67d7092b83a Mon Sep 17 00:00:00 2001 From: Egor Gorbachev Date: Mon, 17 Jul 2023 23:00:23 +0200 Subject: [PATCH 013/486] Update polynomial.md --- src/algebra/polynomial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/algebra/polynomial.md b/src/algebra/polynomial.md index 6676f9fed..fe81cfa8e 100644 --- a/src/algebra/polynomial.md +++ b/src/algebra/polynomial.md @@ -384,7 +384,7 @@ The coefficient of $x^{n+r}$ of the product of the polynomials $A_0(x) = \sum\li Assume you need to calculate $A(x_1), \dots, A(x_n)$. As mentioned earlier, $A(x) \equiv A(x_i) \pmod{x-x_i}$. Thus you may do the following: 1. Compute a segment tree such that in the segment $[l,r)$ stands the product $P_{l, r}(x) = (x-x_l)(x-x_{l+1})\dots(x-x_{r-1})$. -2. Starting with $l=0$ and $r=n$ at the root node. Let $m=\lfloor(l+r)/2\rfloor$. Let's move down to $[l,m)$ with the polynomial $A(x) \pmod{P_{l,m}(x)}$. +2. Starting with $l=1$ and $r=n+1$ at the root node. Let $m=\lfloor(l+r)/2\rfloor$. Let's move down to $[l,m)$ with the polynomial $A(x) \pmod{P_{l,m}(x)}$. 3. This will recursively compute $A(x_l), \dots, A(x_{m-1})$, now do the same for $[m,r)$ with $A(x) \pmod{P_{m,r}(x)}$. 4. Concatenate the results from the first and second recursive call and return them. From 43d93af0f35201fad545d45bb28e33f7e2f3ab8d Mon Sep 17 00:00:00 2001 From: Nikita Voitik <69681605+NikitaVoitik@users.noreply.github.com> Date: Thu, 20 Jul 2023 20:39:02 +0300 Subject: [PATCH 014/486] Fix typo in catalan-numbers.md --- src/combinatorics/catalan-numbers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/combinatorics/catalan-numbers.md b/src/combinatorics/catalan-numbers.md index d3fa1ce64..40de84b53 100644 --- a/src/combinatorics/catalan-numbers.md +++ b/src/combinatorics/catalan-numbers.md @@ -9,7 +9,7 @@ Catalan numbers is a number sequence, which is found useful in a number of combi This sequence was named after the Belgian mathematician [Catalan](https://en.wikipedia.org/wiki/Eug%C3%A8ne_Charles_Catalan), who lived in the 19th century. (In fact it was known before to Euler, who lived a century before Catalan). -The first few numbers Catalan numbers, $C_n$ (starting from zero): +The first few numbers of Catalan numbers, $C_n$ (starting from zero): $1, 1, 2, 5, 14, 42, 132, 429, 1430, \ldots$ From 133f1e86367559732213d9f92b09f951735eca13 Mon Sep 17 00:00:00 2001 From: Md Shamim Ahmmed <56692841+Md-Shamim-Ahmmed@users.noreply.github.com> Date: Sat, 22 Jul 2023 07:45:17 +0600 Subject: [PATCH 015/486] Update divisors.md --- src/algebra/divisors.md | 48 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/algebra/divisors.md b/src/algebra/divisors.md index eabc485d0..53ae7d4a0 100644 --- a/src/algebra/divisors.md +++ b/src/algebra/divisors.md @@ -29,8 +29,7 @@ A way of thinking about it is the following: * If there are two distinct prime divisors $n = p_1^{e_1} \cdot p_2^{e_2}$, then you can arrange all divisors in form of a tabular. $$\begin{array}{c|ccccc} -& 1 & p_2 & p_2^2 & \dots & p_2^{e_2} \\\\ -\hline +& 1 & p_2 & p_2^2 & \dots & p_2^{e_2} \\\\\hline 1 & 1 & p_2 & p_2^2 & \dots & p_2^{e_2} \\\\ p_1 & p_1 & p_1 \cdot p_2 & p_1 \cdot p_2^2 & \dots & p_1 \cdot p_2^{e_2} \\\\ p_1^2 & p_1^2 & p_1^2 \cdot p_2 & p_1^2 \cdot p_2^2 & \dots & p_1^2 \cdot p_2^{e_2} \\\\ @@ -42,18 +41,39 @@ So the number of divisors is trivially $(e_1 + 1) \cdot (e_2 + 1)$. * A similar argument can be made if there are more then two distinct prime factors. + +```cpp +vector primes; + +long long NumberOfDivisors(long long num) { + long long total = 1; + + for (long long p: primes) { + if (num % p == 0) { + int e = 0; + while (num % p == 0) { + e++; + num /= p; + } + total *= (e + 1); + } + } + return total; +} +``` + ## Sum of divisors We can use the same argument of the previous section. * If there is only one distinct prime divisor $n = p_1^{e_1}$, then the sum is: - + $$1 + p_1 + p_1^2 + \dots + p_1^{e_1} = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1}$$ * If there are two distinct prime divisors $n = p_1^{e_1} \cdot p_2^{e_2}$, then we can make the same table as before. The only difference is that now we now want to compute the sum instead of counting the elements. It is easy to see, that the sum of each combination can be expressed as: - + $$\left(1 + p_1 + p_1^2 + \dots + p_1^{e_1}\right) \cdot \left(1 + p_2 + p_2^2 + \dots + p_2^{e_2}\right)$$ $$ = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1} \cdot \frac{p_2^{e_2 + 1} - 1}{p_2 - 1}$$ @@ -62,6 +82,26 @@ $$ = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1} \cdot \frac{p_2^{e_2 + 1} - 1}{p_2 - 1}$$ $$\sigma(n) = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1} \cdot \frac{p_2^{e_2 + 1} - 1}{p_2 - 1} \cdots \frac{p_k^{e_k + 1} - 1}{p_k - 1}$$ +```cpp +vector primes; + +long long SumOfDivisors(long long num) { + long long total = 1; + + for (long long p: primes) { + if (num % p == 0) { + int e = 0; + while (num % p == 0) { + e++; + num /= p; + } + total *= (pow(p, (e + 1)) - 1) / (p - 1); + } + } + return total; +} +``` + ## Multiplicative functions A multiplicative function is a function $f(x)$ which satisfies From d9aba33a6b52006222088784ef2683a4c952afe8 Mon Sep 17 00:00:00 2001 From: Le Bao Hiep Date: Wed, 26 Jul 2023 15:23:19 +0700 Subject: [PATCH 016/486] Fix typos --- src/algebra/bit-manipulation.md | 2 +- src/algebra/discrete-log.md | 4 ++-- src/algebra/garners-algorithm.md | 2 +- src/algebra/polynomial.md | 8 ++++---- src/graph/bridge-searching-online.md | 4 ++-- src/graph/lca_farachcoltonbender.md | 2 +- src/graph/min_cost_flow.md | 2 +- src/string/rabin-karp.md | 10 +++++----- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/algebra/bit-manipulation.md b/src/algebra/bit-manipulation.md index 36c30d909..76d117668 100644 --- a/src/algebra/bit-manipulation.md +++ b/src/algebra/bit-manipulation.md @@ -170,7 +170,7 @@ int countSetBits(int n) } ``` -### Addtional tricks +### Additional tricks - $n ~\&~ (n + 1)$ clears all trailing ones: $0011~0111_2 \rightarrow 0011~0000_2$. - $n ~|~ (n + 1)$ sets the last cleared bit: $0011~0101_2 \rightarrow 0011~0111_2$. diff --git a/src/algebra/discrete-log.md b/src/algebra/discrete-log.md index 1c16dccb0..dd899fb25 100644 --- a/src/algebra/discrete-log.md +++ b/src/algebra/discrete-log.md @@ -47,7 +47,7 @@ This problem can be solved using the meet-in-the-middle method as follows: ## Complexity -We can calculate $f_1(p)$ in $O(\log m)$ using the [binary exponentation algorithm](binary-exp.md). Similarly for $f_2(q)$. +We can calculate $f_1(p)$ in $O(\log m)$ using the [binary exponentiation algorithm](binary-exp.md). Similarly for $f_2(q)$. In the first step of the algorithm, we need to calculate $f_1$ for every possible argument $p$ and then sort the values. Thus, this step has complexity: @@ -107,7 +107,7 @@ Internally, `map` uses a red-black tree to store values. Thus this code is a little bit slower than if we had used an array and binary searched, but is much easier to write. Notice that our code assumes $0^0 = 1$, i.e. the code will compute $0$ as solution for the equation $0^x \equiv 1 \pmod m$ and also as solution for $0^x \equiv 0 \pmod 1$. -This is an often used convention in algebra, but it's also not univerally accepted in all areas. +This is an often used convention in algebra, but it's also not universally accepted in all areas. Sometimes $0^0$ is simply undefined. If you don't like our convention, then you need to handle the case $a=0$ separately: diff --git a/src/algebra/garners-algorithm.md b/src/algebra/garners-algorithm.md index 1a34f8ba6..fada69fd1 100644 --- a/src/algebra/garners-algorithm.md +++ b/src/algebra/garners-algorithm.md @@ -19,7 +19,7 @@ A mixed radix representation is a positional numeral system, that's a generaliza For instance the decimal numeral system is a positional numeral system with the radix (or base) 10. Every a number is represented as a string of digits $d_1 d_2 d_3 \dots d_n$ between $0$ and $9$, and E.g. the string $415$ represents the number $4 \cdot 10^2 + 1 \cdot 10^1 + 5 \cdot 10^0$. -In general the string of digits $d_1 d_2 d_3 \dots d_n$ represents the number $d_1 b^{n-1} + d_2 b^{n-2} + \cdots + d_n b^0$ in the positional numberal system with radix $b$. +In general the string of digits $d_1 d_2 d_3 \dots d_n$ represents the number $d_1 b^{n-1} + d_2 b^{n-2} + \cdots + d_n b^0$ in the positional numeral system with radix $b$. In a mixed radix system, we don't have one radix any more. The base varies from position to position. diff --git a/src/algebra/polynomial.md b/src/algebra/polynomial.md index fe81cfa8e..0aadba26c 100644 --- a/src/algebra/polynomial.md +++ b/src/algebra/polynomial.md @@ -16,7 +16,7 @@ In this section, we focus more on the definitions and "intuitive" properties of ### Polynomial multiplication !!! info "Definition" - **Univariate polynomial** is an expresion of form $A(x) = a_0 + a_1 x + \dots + a_n x^n$. + **Univariate polynomial** is an expression of form $A(x) = a_0 + a_1 x + \dots + a_n x^n$. The values $a_0, \dots, a_n$ are polynomial coefficients, typically taken from some set of numbers or number-like structures. In this article, we assume that the coefficients are taken from some [field](https://en.wikipedia.org/wiki/Field_(mathematics)), meaning that operations of addition, subtraction, multiplication and division are well-defined for them (except for division by $0$) and they generally behave in a similar way to real numbers. @@ -25,7 +25,7 @@ Typical example of such field is the field of remainders modulo prime number $p$ For simplicity we will drop the term _univariate_, as this is the only kind of polynomials we consider in this article. We will also write $A$ instead of $A(x)$ wherever possible, which will be understandable from the context. It is assumed that either $a_n \neq 0$ or $A(x)=0$. !!! info "Definition" - The **product** of two polynomials is defined by expanding it as an arythmetic expression: + The **product** of two polynomials is defined by expanding it as an arithmetic expression: $$ A(x) B(x) = \left(\sum\limits_{i=0}^n a_i x^i \right)\left(\sum\limits_{j=0}^m b_j x^j\right) = \sum\limits_{i,j} a_i b_j x^{i+j} = \sum\limits_{k=0}^{n+m} c_k x^k = C(x). @@ -69,12 +69,12 @@ The coefficient near $x^k$ in the polynomial $A(x)$ is denoted shortly as $[x^k] ### Formal power series !!! info "Definition" - A **formal power series** is an infite sum $A(x) = a_0 + a_1 x + a_2 x^2 + \dots$, considered regardless of its convergence properties. + A **formal power series** is an infinite sum $A(x) = a_0 + a_1 x + a_2 x^2 + \dots$, considered regardless of its convergence properties. In other words, when we consider e.g. a sum $1+\frac{1}{2}+\frac{1}{4}+\frac{1}{8}+\dots=2$, we imply that it _converges_ to $2$ when the number of summands approach infinity. However, formal series are only considered in terms of sequences that make them. !!! info "Definition" - The **product** of formal power series $A(x)$ and $B(x)$, is also defined by expanding it as an arythmetic expression: + The **product** of formal power series $A(x)$ and $B(x)$, is also defined by expanding it as an arithmetic expression: $$ diff --git a/src/graph/bridge-searching-online.md b/src/graph/bridge-searching-online.md index 0c5da3a4c..da3af4402 100644 --- a/src/graph/bridge-searching-online.md +++ b/src/graph/bridge-searching-online.md @@ -259,13 +259,13 @@ This function is used many times in the rest of the code, since after the compre The DSU for the connected components is stored in the vector `dsu_cc`, and there is also an additional vector `dsu_cc_size` to store the component sizes. The function `find_cc(v)` returns the leader of the connectivity component (which is actually the root of the tree). -The re-rooting of a tree `make_root(v)` works as descibed above: +The re-rooting of a tree `make_root(v)` works as described above: if traverses from the vertex $v$ via the ancestors to the root vertex, each time redirecting the ancestor `par` in the opposite direction. The link to the representative of the connected component `dsu_cc` is also updated, so that it points to the new root vertex. After re-rooting we have to assign the new root the correct size of the connected component. Also we have to be careful that we call `find_2ecc()` to get the representatives of the 2-edge-connected component, rather than some other vertex that have already been compressed. -The cycle finding and compression function `merge_path(a, b)` is also implemented as descibed above. +The cycle finding and compression function `merge_path(a, b)` is also implemented as described above. It searches for the LCA of $a$ and $b$ be rising these nodes in parallel, until we meet a vertex for the second time. For efficiency purposes we choose a unique identifier for each LCA finding call, and mark the traversed vertices with it. This works in $O(1)$, while other approaches like using $set$ perform worse. diff --git a/src/graph/lca_farachcoltonbender.md b/src/graph/lca_farachcoltonbender.md index 9c9b9e6ac..f67365511 100644 --- a/src/graph/lca_farachcoltonbender.md +++ b/src/graph/lca_farachcoltonbender.md @@ -118,7 +118,7 @@ int min_by_h(int i, int j) { } void precompute_lca(int root) { - // get euler tour & indices of first occurences + // get euler tour & indices of first occurrences first_visit.assign(n, -1); height.assign(n, 0); euler_tour.reserve(2 * n); diff --git a/src/graph/min_cost_flow.md b/src/graph/min_cost_flow.md index cdc2a6a22..9f96e575b 100644 --- a/src/graph/min_cost_flow.md +++ b/src/graph/min_cost_flow.md @@ -17,7 +17,7 @@ Sometimes the task is given a little differently: you want to find the maximum flow, and among all maximal flows we want to find the one with the least cost. This is called the **minimum-cost maximum-flow problem**. -Both these problems can be solved effectively with the algorithm of sucessive shortest paths. +Both these problems can be solved effectively with the algorithm of successive shortest paths. ## Algorithm diff --git a/src/string/rabin-karp.md b/src/string/rabin-karp.md index 38625b285..e9dcc74da 100644 --- a/src/string/rabin-karp.md +++ b/src/string/rabin-karp.md @@ -37,13 +37,13 @@ vector rabin_karp(string const& s, string const& t) { for (int i = 0; i < S; i++) h_s = (h_s + (s[i] - 'a' + 1) * p_pow[i]) % m; - vector occurences; - for (int i = 0; i + S - 1 < T; i++) { - long long cur_h = (h[i+S] + m - h[i]) % m; + vector occurrences; + for (int i = 0; i + S - 1 < T; i++) { + long long cur_h = (h[i+S] + m - h[i]) % m; if (cur_h == h_s * p_pow[i] % m) - occurences.push_back(i); + occurrences.push_back(i); } - return occurences; + return occurrences; } ``` From 8a78e7dcbefd51b69ea4827afe305cd466521077 Mon Sep 17 00:00:00 2001 From: Matthias Langer Date: Fri, 28 Jul 2023 09:53:19 +0200 Subject: [PATCH 017/486] Clarify preconditions when calculating multiplicative inverses --- src/algebra/module-inverse.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/algebra/module-inverse.md b/src/algebra/module-inverse.md index dd68b9667..677d1f68d 100644 --- a/src/algebra/module-inverse.md +++ b/src/algebra/module-inverse.md @@ -77,24 +77,28 @@ From these results, we can easily find the modular inverse using the [binary exp Even though this method is easier to understand than the method described in previous paragraph, in the case when $m$ is not a prime number, we need to calculate Euler phi function, which involves factorization of $m$, which might be very hard. If the prime factorization of $m$ is known, then the complexity of this method is $O(\log m)$. -## Finding the modular inverse using Euclidean Division +## Finding the modular inverse for prime mods using Euclidean Division -Given that $m > i$ (or we can modulo to make it smaller in 1 step), according to [Euclidean Division](https://en.wikipedia.org/wiki/Euclidean_division) +Given that $p > i$ (or we can modulo to make it smaller in 1 step), according to [Euclidean Division](https://en.wikipedia.org/wiki/Euclidean_division) -$$m = k \cdot i + r$$ +$$p = k \cdot i + r$$ -where $k = \left\lfloor \frac{m}{i} \right\rfloor$ and $r = m \bmod i$, then +where $k = \left\lfloor \frac{p}{i} \right\rfloor$ and $r = p \bmod i$, then $$ \begin{align*} -& \implies & 0 & \equiv k \cdot i + r & \mod m \\ -& \iff & r & \equiv -k \cdot i & \mod m \\ -& \iff & r \cdot i^{-1} & \equiv -k & \mod m \\ -& \iff & i^{-1} & \equiv -k \cdot r^{-1} & \mod m +& \implies & 0 & \equiv k \cdot i + r & \mod p \\ +& \iff & r & \equiv -k \cdot i & \mod p \\ +& \iff & r \cdot i^{-1} & \equiv -k & \mod p \\ +& \iff & i^{-1} & \equiv -k \cdot r^{-1} & \mod p \end{align*} $$ -From there we can have the following recursive function (in C++) for computing the modular inverse for number $i$ with respect to module $m$ +Note that this reasoning does not hold if $p$ is not prime, since the existence of $i^{-1}$ does not imply the existence of $r^{-1}$ +in the general case. To see this, lets try to calculate $5^{-1}$ modulo $12$ with the above formula. We would like to arrive at $5$, +since $5 \cdot 5 \equiv 1 \bmod 12$. However, $12 = 2 \cdot 5 + 2$, and we have $k=2$ and $r=2$, with $2$ being not invertible modulo $12$. + +If the modulus is prime however, all $i$ with $0 < i < p$ are invertible modulo $p$, and we can have the following recursive function (in C++) for computing the modular inverse for number $i$ with respect to $p$ ```{.cpp file=modular_inverse_euclidean_division} int inv(int i) { From 08cc8a624ee78ba98301c6a842796db87223d684 Mon Sep 17 00:00:00 2001 From: PirateOfAndaman <82709887+PirateOfAndaman@users.noreply.github.com> Date: Sat, 5 Aug 2023 12:12:51 +0530 Subject: [PATCH 018/486] Update dijkstra.md added a comma to improve readability --- src/graph/dijkstra.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graph/dijkstra.md b/src/graph/dijkstra.md index 3771fd294..6c98705bc 100644 --- a/src/graph/dijkstra.md +++ b/src/graph/dijkstra.md @@ -38,7 +38,7 @@ Note that if some vertices are unreachable from the starting vertex $s$, the val ### Restoring Shortest Paths -Usually one needs to know not only the lengths of shortest paths but also the shortest paths themselves. Let's see how to maintain sufficient information to restore the shortest path from $s$ to any vertex. We'll maintain an array of predecessors $p[]$ in which for each vertex $v \ne s$ $p[v]$ is the penultimate vertex in the shortest path from $s$ to $v$. Here we use the fact that if we take the shortest path to some vertex $v$ and remove $v$ from this path, we'll get a path ending in at vertex $p[v]$, and this path will be the shortest for the vertex $p[v]$. This array of predecessors can be used to restore the shortest path to any vertex: starting with $v$, repeatedly take the predecessor of the current vertex until we reach the starting vertex $s$ to get the required shortest path with vertices listed in reverse order. So, the shortest path $P$ to the vertex $v$ is equal to: +Usually one needs to know not only the lengths of shortest paths but also the shortest paths themselves. Let's see how to maintain sufficient information to restore the shortest path from $s$ to any vertex. We'll maintain an array of predecessors $p[]$ in which for each vertex $v \ne s$, $p[v]$ is the penultimate vertex in the shortest path from $s$ to $v$. Here we use the fact that if we take the shortest path to some vertex $v$ and remove $v$ from this path, we'll get a path ending in at vertex $p[v]$, and this path will be the shortest for the vertex $p[v]$. This array of predecessors can be used to restore the shortest path to any vertex: starting with $v$, repeatedly take the predecessor of the current vertex until we reach the starting vertex $s$ to get the required shortest path with vertices listed in reverse order. So, the shortest path $P$ to the vertex $v$ is equal to: $$P = (s, \ldots, p[p[p[v]]], p[p[v]], p[v], v)$$ From 059a101a75450e2bca72ba160845575dff983c2f Mon Sep 17 00:00:00 2001 From: iagorrr <85769349+iagorrr@users.noreply.github.com> Date: Thu, 10 Aug 2023 12:44:19 -0300 Subject: [PATCH 019/486] Adds practice problems to Sprague-Grundy theorem. Nim Adds 3 exercises in this topic in ascending order of their difficulty. --- src/game_theory/sprague-grundy-nim.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/game_theory/sprague-grundy-nim.md b/src/game_theory/sprague-grundy-nim.md index 99156bae2..9ffe95272 100644 --- a/src/game_theory/sprague-grundy-nim.md +++ b/src/game_theory/sprague-grundy-nim.md @@ -199,3 +199,10 @@ $$g(n) = \text{mex} \Bigl( \{ g(n-2) \} \cup \{g(i-2) \oplus g(n-i-1) \mid 2 \le So we've got a $O(n^2)$ solution. In fact, $g(n)$ has a period of length 34 starting with $n=52$. + + +## Practice Problems + +- [KATTIS S-Nim](https://open.kattis.com/problems/snim) +- [CodeForces - Marbles (2018-2019 ACM-ICPC Brazil Subregional)](https://codeforces.com/gym/101908/problem/B) +- [KATTIS - Cuboid Slicing Game](https://open.kattis.com/problems/cuboidslicinggame) From 60fa701e5951ef4477b198d7b1e7bb59abf9638f Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 20 Aug 2023 19:42:00 +0200 Subject: [PATCH 020/486] more sprague-grundy practice problems --- src/game_theory/sprague-grundy-nim.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/game_theory/sprague-grundy-nim.md b/src/game_theory/sprague-grundy-nim.md index 9ffe95272..0d03983f9 100644 --- a/src/game_theory/sprague-grundy-nim.md +++ b/src/game_theory/sprague-grundy-nim.md @@ -206,3 +206,6 @@ In fact, $g(n)$ has a period of length 34 starting with $n=52$. - [KATTIS S-Nim](https://open.kattis.com/problems/snim) - [CodeForces - Marbles (2018-2019 ACM-ICPC Brazil Subregional)](https://codeforces.com/gym/101908/problem/B) - [KATTIS - Cuboid Slicing Game](https://open.kattis.com/problems/cuboidslicinggame) +- [HackerRank - Tower Breakers, Revisited!](https://www.hackerrank.com/contests/5-days-of-game-theory/challenges/tower-breakers-2) +- [HackerRank - Tower Breakers, Again!](https://www.hackerrank.com/contests/5-days-of-game-theory/challenges/tower-breakers-3/problem) +- [HackerRank - Chessboard Game, Again!](https://www.hackerrank.com/contests/5-days-of-game-theory/challenges/a-chessboard-game) From 4cb485b78d04bab46c1c2458af792d616430d783 Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 20 Aug 2023 20:07:23 +0200 Subject: [PATCH 021/486] fix old link and rename variables --- src/algebra/module-inverse.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/algebra/module-inverse.md b/src/algebra/module-inverse.md index 677d1f68d..71e4aa6e9 100644 --- a/src/algebra/module-inverse.md +++ b/src/algebra/module-inverse.md @@ -77,36 +77,37 @@ From these results, we can easily find the modular inverse using the [binary exp Even though this method is easier to understand than the method described in previous paragraph, in the case when $m$ is not a prime number, we need to calculate Euler phi function, which involves factorization of $m$, which might be very hard. If the prime factorization of $m$ is known, then the complexity of this method is $O(\log m)$. -## Finding the modular inverse for prime mods using Euclidean Division +
+## Finding the modular inverse for prime moduli using Euclidean Division -Given that $p > i$ (or we can modulo to make it smaller in 1 step), according to [Euclidean Division](https://en.wikipedia.org/wiki/Euclidean_division) +Given a prime modulus $m > a$ (or we can apply modulo to make it smaller in 1 step), according to [Euclidean Division](https://en.wikipedia.org/wiki/Euclidean_division) -$$p = k \cdot i + r$$ +$$m = k \cdot a + r$$ -where $k = \left\lfloor \frac{p}{i} \right\rfloor$ and $r = p \bmod i$, then +where $k = \left\lfloor \frac{m}{a} \right\rfloor$ and $r = m \bmod a$, then $$ \begin{align*} -& \implies & 0 & \equiv k \cdot i + r & \mod p \\ -& \iff & r & \equiv -k \cdot i & \mod p \\ -& \iff & r \cdot i^{-1} & \equiv -k & \mod p \\ -& \iff & i^{-1} & \equiv -k \cdot r^{-1} & \mod p +& \implies & 0 & \equiv k \cdot a + r & \mod m \\ +& \iff & r & \equiv -k \cdot a & \mod m \\ +& \iff & r \cdot a^{-1} & \equiv -k & \mod m \\ +& \iff & a^{-1} & \equiv -k \cdot r^{-1} & \mod m \end{align*} $$ -Note that this reasoning does not hold if $p$ is not prime, since the existence of $i^{-1}$ does not imply the existence of $r^{-1}$ +Note that this reasoning does not hold if $m$ is not prime, since the existence of $a^{-1}$ does not imply the existence of $r^{-1}$ in the general case. To see this, lets try to calculate $5^{-1}$ modulo $12$ with the above formula. We would like to arrive at $5$, since $5 \cdot 5 \equiv 1 \bmod 12$. However, $12 = 2 \cdot 5 + 2$, and we have $k=2$ and $r=2$, with $2$ being not invertible modulo $12$. -If the modulus is prime however, all $i$ with $0 < i < p$ are invertible modulo $p$, and we can have the following recursive function (in C++) for computing the modular inverse for number $i$ with respect to $p$ +If the modulus is prime however, all $a$ with $0 < a < m$ are invertible modulo $m$, and we can have the following recursive function (in C++) for computing the modular inverse for number $a$ with respect to $m$ ```{.cpp file=modular_inverse_euclidean_division} -int inv(int i) { - return i <= 1 ? i : m - (long long)(m/i) * inv(m % i) % m; +int inv(int a) { + return a <= 1 ? a : m - (long long)(m/a) * inv(m % a) % m; } ``` -The exact time complexity of the this recursion is not known. It's is somewhere between $O(\frac{\log m}{\log\log m})$ and $O(n^{\frac{1}{3} - \frac{2}{177} + \epsilon})$. +The exact time complexity of the this recursion is not known. It's is somewhere between $O(\frac{\log m}{\log\log m})$ and $O(m^{\frac{1}{3} - \frac{2}{177} + \epsilon})$. See [On the length of Pierce expansions](https://arxiv.org/abs/2211.08374). In practice this implementation is fast, e.g. for the modulus $10^9 + 7$ it will always finish in less than 50 iterations. @@ -115,8 +116,8 @@ Applying this formula, we can also precompute the modular inverse for every numb ```{.cpp file=modular_inverse_euclidean_division_all} inv[1] = 1; -for(int i = 2; i < m; ++i) - inv[i] = m - (long long)(m/i) * inv[m%i] % m; +for(int a = 2; a < m; ++a) + inv[a] = m - (long long)(m/a) * inv[m%a] % m; ``` ## Finding the modular inverse for array of numbers modulo $m$ From 0e950f842e74be1d9e0ba2ef9bc656a3dc8d0dd7 Mon Sep 17 00:00:00 2001 From: Harshit Jain <117633610+harshit-jain52@users.noreply.github.com> Date: Sun, 20 Aug 2023 23:50:34 +0530 Subject: [PATCH 022/486] Update prefix-function.md --- src/string/prefix-function.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/string/prefix-function.md b/src/string/prefix-function.md index 1fab80255..94d3efc3e 100644 --- a/src/string/prefix-function.md +++ b/src/string/prefix-function.md @@ -381,6 +381,7 @@ The problem can be solved in the same way by constructing the automaton of the p * [UVA 12467 - Secret Word](https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3911) * [UVA 11019 - Matrix Matcher](https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=1960) * [SPOJ - Pattern Find](http://www.spoj.com/problems/NAJPF/) +* [SPOJ - A Needle in the Haystack](https://www.spoj.com/problems/NHAY/) * [Codeforces - Anthem of Berland](http://codeforces.com/contest/808/problem/G) * [Codeforces - MUH and Cube Walls](http://codeforces.com/problemset/problem/471/D) * [Codeforces - Prefixes and Suffixes](https://codeforces.com/contest/432/problem/D) From e169a6f647f6b73f0605d535f9350b3792d3bd5c Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 20 Aug 2023 20:50:35 +0200 Subject: [PATCH 023/486] Update catalan-numbers.md --- src/combinatorics/catalan-numbers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/combinatorics/catalan-numbers.md b/src/combinatorics/catalan-numbers.md index 40de84b53..94d559a78 100644 --- a/src/combinatorics/catalan-numbers.md +++ b/src/combinatorics/catalan-numbers.md @@ -9,7 +9,7 @@ Catalan numbers is a number sequence, which is found useful in a number of combi This sequence was named after the Belgian mathematician [Catalan](https://en.wikipedia.org/wiki/Eug%C3%A8ne_Charles_Catalan), who lived in the 19th century. (In fact it was known before to Euler, who lived a century before Catalan). -The first few numbers of Catalan numbers, $C_n$ (starting from zero): +The first few Catalan numbers $C_n$ (starting from zero): $1, 1, 2, 5, 14, 42, 132, 429, 1430, \ldots$ From 890ea70e4af68f8efb7f69818c270b0397abf2f3 Mon Sep 17 00:00:00 2001 From: Arnar Bjarni Arnarson Date: Sun, 20 Aug 2023 23:06:41 +0000 Subject: [PATCH 024/486] Add String Hashing on Kattis as a Practice Problem --- src/string/string-hashing.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/string/string-hashing.md b/src/string/string-hashing.md index 5ce399283..7e62380bb 100644 --- a/src/string/string-hashing.md +++ b/src/string/string-hashing.md @@ -207,6 +207,7 @@ When comparing $10^6$ strings with each other, the probability that at least one ## Practice Problems * [Good Substrings - Codeforces](https://codeforces.com/contest/271/problem/D) * [A Needle in the Haystack - SPOJ](http://www.spoj.com/problems/NHAY/) +* [String Hashing - Kattis](https://open.kattis.com/problems/hashing) * [Double Profiles - Codeforces](http://codeforces.com/problemset/problem/154/C) * [Password - Codeforces](http://codeforces.com/problemset/problem/126/B) * [SUB_PROB - SPOJ](http://www.spoj.com/problems/SUB_PROB/) From db1381b7c40b66620a6a9b98408742cda2cf2297 Mon Sep 17 00:00:00 2001 From: TrietMinh Date: Wed, 23 Aug 2023 21:59:19 +0700 Subject: [PATCH 025/486] Add more problems to sieve of eratosthenes article --- src/algebra/primality_tests.md | 2 +- src/algebra/sieve-of-eratosthenes.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/algebra/primality_tests.md b/src/algebra/primality_tests.md index dcebf116a..2acc0cffa 100644 --- a/src/algebra/primality_tests.md +++ b/src/algebra/primality_tests.md @@ -217,4 +217,4 @@ However, since these numbers (except 2) are not prime, you need to check additio ## Practice Problems -- [SPOJ - Prime or Not](https://www.spoj.com/problems/PON/) +- [SPOJ - Prime or Not](https://www.spoj.com/problems/PON/) \ No newline at end of file diff --git a/src/algebra/sieve-of-eratosthenes.md b/src/algebra/sieve-of-eratosthenes.md index 1fd2e9cb3..f537ff46a 100644 --- a/src/algebra/sieve-of-eratosthenes.md +++ b/src/algebra/sieve-of-eratosthenes.md @@ -254,6 +254,8 @@ However, this algorithm also has its own weaknesses. ## Practice Problems +* [Leetcode - Four Divisors](https://leetcode.com/problems/four-divisors/) +* [Leetcode - Count Primes](https://leetcode.com/problems/count-primes/) * [SPOJ - Printing Some Primes](http://www.spoj.com/problems/TDPRIMES/) * [SPOJ - A Conjecture of Paul Erdos](http://www.spoj.com/problems/HS08PAUL/) * [SPOJ - Primal Fear](http://www.spoj.com/problems/VECTAR8/) From 8645e70baed217d189276c96a6066edbe8534c93 Mon Sep 17 00:00:00 2001 From: MInhTriet <57322084+TrietMinh799@users.noreply.github.com> Date: Wed, 23 Aug 2023 22:03:28 +0700 Subject: [PATCH 026/486] Update sieve-of-eratosthenes.md I add 2 problems from leetcode to this article. --- src/algebra/sieve-of-eratosthenes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/algebra/sieve-of-eratosthenes.md b/src/algebra/sieve-of-eratosthenes.md index 1fd2e9cb3..f537ff46a 100644 --- a/src/algebra/sieve-of-eratosthenes.md +++ b/src/algebra/sieve-of-eratosthenes.md @@ -254,6 +254,8 @@ However, this algorithm also has its own weaknesses. ## Practice Problems +* [Leetcode - Four Divisors](https://leetcode.com/problems/four-divisors/) +* [Leetcode - Count Primes](https://leetcode.com/problems/count-primes/) * [SPOJ - Printing Some Primes](http://www.spoj.com/problems/TDPRIMES/) * [SPOJ - A Conjecture of Paul Erdos](http://www.spoj.com/problems/HS08PAUL/) * [SPOJ - Primal Fear](http://www.spoj.com/problems/VECTAR8/) From f774c39e8841d73fec7b6fcd80a44447c08985e2 Mon Sep 17 00:00:00 2001 From: Md Shamim Ahmad <56692841+md-shamim-ahmad@users.noreply.github.com> Date: Thu, 24 Aug 2023 20:17:22 +0600 Subject: [PATCH 027/486] Update divisors.md --- src/algebra/divisors.md | 43 ++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/algebra/divisors.md b/src/algebra/divisors.md index 53ae7d4a0..2356b0a9c 100644 --- a/src/algebra/divisors.md +++ b/src/algebra/divisors.md @@ -43,21 +43,21 @@ So the number of divisors is trivially $(e_1 + 1) \cdot (e_2 + 1)$. ```cpp -vector primes; - -long long NumberOfDivisors(long long num) { +long long numberOfDivisors(long long num) { long long total = 1; - - for (long long p: primes) { - if (num % p == 0) { + for (int i = 2; (long long)i * i <= num; i++) { + if (num % i == 0) { int e = 0; - while (num % p == 0) { + do { e++; - num /= p; - } - total *= (e + 1); + num /= i; + } while (num % i == 0); + total *= e + 1; } } + if (num > 1) { + total *= 2; + } return total; } ``` @@ -83,21 +83,28 @@ $$ = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1} \cdot \frac{p_2^{e_2 + 1} - 1}{p_2 - 1}$$ $$\sigma(n) = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1} \cdot \frac{p_2^{e_2 + 1} - 1}{p_2 - 1} \cdots \frac{p_k^{e_k + 1} - 1}{p_k - 1}$$ ```cpp -vector primes; - long long SumOfDivisors(long long num) { long long total = 1; - for (long long p: primes) { - if (num % p == 0) { + for (int i = 2; (long long)i * i <= num; i++) { + if (num % i == 0) { int e = 0; - while (num % p == 0) { + do { e++; - num /= p; - } - total *= (pow(p, (e + 1)) - 1) / (p - 1); + num /= i; + } while (num % i == 0); + + long long sum = 0, pow = 1; + do { + sum += pow; + pow *= i; + } while (e-- > 0); + total *= sum; } } + if (num > 1) { + total *= (1 + num); + } return total; } ``` From b021708cad4194f3c7a6248ff22721b2982df1a8 Mon Sep 17 00:00:00 2001 From: dallasyan Date: Sun, 27 Aug 2023 17:21:38 +1000 Subject: [PATCH 028/486] Update point-in-convex-polygon.md, fix cross product 0 check and `prepair` typo --- src/geometry/point-in-convex-polygon.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/geometry/point-in-convex-polygon.md b/src/geometry/point-in-convex-polygon.md index f04012748..7d6e630b7 100644 --- a/src/geometry/point-in-convex-polygon.md +++ b/src/geometry/point-in-convex-polygon.md @@ -42,7 +42,7 @@ If it is inside, then it will be equal. ## Implementation -The function `prepair` will make sure that the lexicographical smallest point (smallest x value, and in ties smallest y value) will be $p_0$, and computes the vectors $p_i - p_0$. +The function `prepare` will make sure that the lexicographical smallest point (smallest x value, and in ties smallest y value) will be $p_0$, and computes the vectors $p_i - p_0$. Afterwards the function `pointInConvexPolygon` computes the result of a query. We additionally remember the point $p_0$ and translate all queried points with it in order compute the correct distance, as vectors don't have an initial point. By translating the query points we can assume that all vectors start at the origin $(0, 0)$, and simplify the computations for distances and lengths. @@ -95,7 +95,7 @@ void prepare(vector &points) { bool pointInConvexPolygon(pt point) { point = point - translation; - if (seq[0].cross(point) != 1 && + if (seq[0].cross(point) != 0 && sgn(seq[0].cross(point)) != sgn(seq[0].cross(seq[n - 1]))) return false; if (seq[n - 1].cross(point) != 0 && From 3fe9c7053c59f119369646f99f0c59e05d1a183e Mon Sep 17 00:00:00 2001 From: Mehrdad <70322560+mehrdad3301@users.noreply.github.com> Date: Sun, 27 Aug 2023 22:56:44 +0330 Subject: [PATCH 029/486] fix: fix small grammar --- src/data_structures/segment_tree.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data_structures/segment_tree.md b/src/data_structures/segment_tree.md index 0c4f4fb0a..67090a82e 100644 --- a/src/data_structures/segment_tree.md +++ b/src/data_structures/segment_tree.md @@ -121,7 +121,7 @@ We can show that this proposition (at most four vertices each level) is true by At the first level, we only visit one vertex, the root vertex, so here we visit less than four vertices. Now let's look at an arbitrary level. By induction hypothesis, we visit at most four vertices. -If we only visit at most two vertices, the next level has at most four vertices. That trivial, because each vertex can only cause at most two recursive calls. +If we only visit at most two vertices, the next level has at most four vertices. That is trivial, because each vertex can only cause at most two recursive calls. So let's assume that we visit three or four vertices in the current level. From those vertices, we will analyze the vertices in the middle more carefully. Since the sum query asks for the sum of a continuous subarray, we know that segments corresponding to the visited vertices in the middle will be completely covered by the segment of the sum query. From 181fce0efeb863312845ef158da5f06fc6144c45 Mon Sep 17 00:00:00 2001 From: iagorrr <85769349+iagorrr@users.noreply.github.com> Date: Sun, 27 Aug 2023 18:34:43 -0300 Subject: [PATCH 030/486] Update suffix-automaton.md, adds practice problems --- src/string/suffix-automaton.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/string/suffix-automaton.md b/src/string/suffix-automaton.md index f7a46c81f..47c60c169 100644 --- a/src/string/suffix-automaton.md +++ b/src/string/suffix-automaton.md @@ -775,6 +775,13 @@ After that, the answer to the problem will be the string $longest(v)$ for the st ## Practice Problems + - [CSES - Finding Patterns](https://cses.fi/problemset/task/2102) + - [CSES - Counting Patterns](https://cses.fi/problemset/task/2103) + - [CSES - String Matching](https://cses.fi/problemset/task/1753) + - [CSES - Patterns Positions](https://cses.fi/problemset/task/2104) + - [CSES - Distinct Substrings](https://cses.fi/problemset/task/2105) + - [CSES - Word Combinations](https://cses.fi/problemset/task/1731) + - [CSES - String Distribution](https://cses.fi/problemset/task/2110) - [AtCoder - K-th Substring](https://atcoder.jp/contests/abc097/tasks/arc097_a) - [SPOJ - SUBLEX](https://www.spoj.com/problems/SUBLEX/) - [Codeforces - Cyclical Quest](https://codeforces.com/problemset/problem/235/C) From 35eb407d9c2ada7abab257bc2d1f6ad83a27a67f Mon Sep 17 00:00:00 2001 From: Akash Nayar <33558235+Akash-Nayar@users.noreply.github.com> Date: Wed, 17 May 2023 10:22:40 -0400 Subject: [PATCH 031/486] Update bit-manipulation.md (Fix Typo) "enought" -> "enough" --- src/algebra/bit-manipulation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/algebra/bit-manipulation.md b/src/algebra/bit-manipulation.md index b61cfbf85..f4047181d 100644 --- a/src/algebra/bit-manipulation.md +++ b/src/algebra/bit-manipulation.md @@ -37,7 +37,7 @@ assert(negative_signed_number == 0b1111'1111'1111'1111'1111'1111'1111'0011); CPUs are very fast manipulating those bits with specific operations. For some problems we can take these binary number representations to our advantage, and speed up the execution time. -And for some problems (typically in combinatorics or dynamic programming) where we want to track which objects we already picked from a given set of objects, we can just use an large enought integer where each digit represents an object and depending on if we pick or drop the object we set or clear the digit. +And for some problems (typically in combinatorics or dynamic programming) where we want to track which objects we already picked from a given set of objects, we can just use an large enough integer where each digit represents an object and depending on if we pick or drop the object we set or clear the digit. ## Bit operators From 918fb74fa0056feed71e09dbecc0bea0c13eb6c9 Mon Sep 17 00:00:00 2001 From: huggin Date: Sun, 14 May 2023 15:41:48 -0700 Subject: [PATCH 032/486] fix z_function --- src/string/z-function.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/string/z-function.md b/src/string/z-function.md index 632eddc43..c83938cb4 100644 --- a/src/string/z-function.md +++ b/src/string/z-function.md @@ -33,7 +33,7 @@ vector z_function_trivial(string s) { int n = s.size(); vector z(n); for (int i = 1; i < n; i++) { - while (s[z[i]] == s[i + z[i]]) { + while (i + z[i] < n && s[z[i]] == s[i + z[i]]) { z[i]++; } } @@ -96,7 +96,7 @@ vector z_function(string s) { if(i < r) { z[i] = min(r - i, z[i - l]); } - while(s[z[i]] == s[i + z[i]]) { + while(i + z[i] < n && s[z[i]] == s[i + z[i]]) { z[i]++; } if(i + z[i] > r) { From d4e1bf399c70372b39b9225036497190e961230a Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sat, 3 Jun 2023 14:19:53 +0200 Subject: [PATCH 033/486] new GA4 tag --- mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index 7fe24eeb9..f539e7249 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -74,4 +74,4 @@ plugins: extra: analytics: provider: google - property: UA-85220282-1 + property: G-7FLS2HCYHH From 271a56bf9117476923dae354cf7e93661f5b2121 Mon Sep 17 00:00:00 2001 From: Sourav Date: Fri, 1 Sep 2023 00:46:49 -0300 Subject: [PATCH 034/486] Added Hare n Tortoise algorithm under data structures --- .../hare_tortoise_algorithm.md | 105 ++++++++++++++++++ src/data_structures/tortoise_hare_algo.png | Bin 0 -> 17291 bytes .../tortoise_hare_algo_proof.png | Bin 0 -> 26102 bytes src/data_structures/tortoise_hare_proof.png | Bin 0 -> 27733 bytes .../tortouse_hare_cycle_found.png | Bin 0 -> 21399 bytes 5 files changed, 105 insertions(+) create mode 100644 src/data_structures/hare_tortoise_algorithm.md create mode 100644 src/data_structures/tortoise_hare_algo.png create mode 100644 src/data_structures/tortoise_hare_algo_proof.png create mode 100644 src/data_structures/tortoise_hare_proof.png create mode 100644 src/data_structures/tortouse_hare_cycle_found.png diff --git a/src/data_structures/hare_tortoise_algorithm.md b/src/data_structures/hare_tortoise_algorithm.md new file mode 100644 index 000000000..ae1844d31 --- /dev/null +++ b/src/data_structures/hare_tortoise_algorithm.md @@ -0,0 +1,105 @@ + +--- +tags: + - Translated +e_maxx_link: hare_tortoise_algorithm +--- + +# Floyd's Linked List Cycle Finding Algorithm + +Given a linked list where the starting point of that linked list is denoted by `head`, and there may or may not be a cycle present. For instance: + +![[tortoise_hare_algo.png]] + +Here we need to find out the point `C`, i.e the starting point of the cycle. + +## Proposed algorithm +The algorithm is called `Floyd’s Cycle Algorithm or Tortoise n Hare algorithm`. +In order to figure out the starting point of the cycle, we need to figure out of the the cycle even exists or not. +So, it involved two steps: +1. Figure out the presence of the cycle. +2. Find out the starting point of the cycle. + +### Step 1: Presence of the cycle +1. Take two pointers $slow$ and $fast$. +2. Both of them will point to head of the linked list initially. +3. $slow$ will move one step at a time. +4. $fast$ will move two steps at a time. (twice as speed as $slow$ pointer). +5. check if at any point they point to the same node before any one(or both) reach null. +6. if they point to any same node at any point of their journey, it would indicate that the cycle indeed exists in the linked list. +7. if we get null, it would indicate that the linked list has no cycle. + +![[tortouse_hare_cycle_found.png]] + +Now, that we have figured out that there is a cycle present in the linked list, for the next step we need to find out the starting point of cycle, i.e., `C. +### Step 2: Starting point of the cycle +1. Reset the $slow$ pointer to the `head` of the linked list. +2. Move both pointers one step at a time. +3. The point they will meet at will be the starting point of the cycle. + +```java +// Presence of cycle +public boolean hasCycle(ListNode head) { + ListNode slow = head; + ListNode fast = head; + + while(slow !=null && fast != null && fast.next != null){ + slow = slow.next; + fast = fast.next.next; + if(slow==fast){ + return true; + } + } + + return false; +} +``` + +```java +// Assuming there is a cycle present and slow and fast are point to their meeting point +slow = head; +while(slow!=fast){ + slow = slow.next; + fast = fast.next; +} + +return slow; // the starting point of the cycle. +``` + +## Why does it work + +### Step 1: Presence of the cycle +Since the pointer $fast$ is moving with twice as speed as $slow$, we can say that at any point of time, $fast$ would have covered twice as much distance as $slow$. +We can also deduce that the difference between the distance covered by both of these pointers is increasing by $1$. +``` +slow: 0 --> 1 --> 2 --> 3 --> 4 (distance covered) +fast: 0 --> 2 --> 4 --> 6 --> 8 (distance covered) +diff: 0 --> 1 --> 2 --> 3 --> 4 (difference between distance covered by both pointers) +``` + +So, if we assume that Length of cycle is: $L$, we can also say that there will be a point when the difference between $slow$ and $fast$ pointer will grow and reach $NXL$ where $N>0$ . + +When both $slow$ and $fast$ are within cycle, and the difference between their covered lengths is $NXL$, then they are bound to point at same node, indicating the presence of cycle. + +### Step 2: Starting point of the cycle + +Lets try to calculate the distance covered by both of the pointers till they point they met within the cycle. + +distance covered by slow = $slowDist$ +distance covered by fast = $fastDist$ + +$slowDist = a + xL + b$ $x\ge0$ +$fastDist = a + yL + b$ $y\ge0$ + +![[tortoise_hare_proof.png]] + +$a + yL + b = 2(a + xL + b)$ + +$a=(y-2x)L-b$ where $y-2x$ is an integer. + +We know that $fast$ has already covered $b$, so, we can say that the distance $a$ is same as some multiple of length of the cycle. + +# Problems: +- [Linked List Cycle (EASY)](https://leetcode.com/problems/linked-list-cycle/) +- [Find the Duplicate Number (Medium)](https://leetcode.com/problems/find-the-duplicate-number/) + diff --git a/src/data_structures/tortoise_hare_algo.png b/src/data_structures/tortoise_hare_algo.png new file mode 100644 index 0000000000000000000000000000000000000000..24d2f688261cf59f3ed1471338b072f7c790d6c6 GIT binary patch literal 17291 zcmeIaXHZmIv@W{PZ2}dLC{a*AB#8vcs3gfq&PdK60+PGgD$sy{N)!-KqD09V1R7AH z@Im0JF82t^@1k1*Km29=Q28MQ6-E$YP0xX!FFkv#=L$iT zEbu=9dG%YH5F~X&UizV?r}5gvr3x*r3CT^yM_EtL#Pi*I9RKocmhG}Z%25m)_jYrr$L)J@l(OPZJjPvGh4zQdXL}WSIt@&ZcA0Kr-ZpdQ zf_15xUR71K+JvuMNLpz^hAB3wc1s+u9?tO~uOCc!m`oBj?=opFN>OSAgT<_wj@uvO zajIS`^E_TFPnC~k1?}Idz1mCn;&`JTIsUBaiWdiGg2Zc(V8519z;tlRhRtb$A3c(W7gx$#5)eut z==Lr65&wRz;ApXH(|?-15Z<8= z1`?>8RT3ywPv&&CW_ij(!#qUUWaY0B9Fm-Fn?BD1zAc6=pnjo4-G*JR;ZRT$Mo z$&Cz2Uj<*=F~m#hUy>!_%i-wLgXRz`-` znLMTlChbl}J~EWJDf&8lFyE-!W~$DQ4skf$D1C@J?P_V-Qn*Wt@CE4|x0)30{0d*Y z!OH`=s>u?COBo3*o6}7J!JDL~U9(f_!x4x26_fLtIZPzy4Js*9i+Mgnkn=wO{n(V* z_c1)W{_({It3`eYq5U3DA<5Tv+FxWHdeh`Pk|ibW$yggh$l!_ZPt@*tzJ}f0i=9o! zl4KiY%jW)t3cgFKZI~Jm`nwfOiB{^9R9W7q-~1i42A2izdGm{KIw=NC6odzqGsKs2 zt4=&wXEQH_O`mc5ShWso1)^Gr}L! zZ_t2LhZi@$r@Om*;qiL4T!Nru(KM>o=b)>AGeH4ucGHJHq=^!*)~Usep*E~mcQ>Ue zGBim)!@I||CiC2;27ndKAMzkU@4~j4R%)b zi!~aJOqI^;Yhd1?$zUrtGA9org%_sUHAU^SxSeD?IV*y0rv+UhChbtOw_mt6Bb8;xe#3XGnW{KM zYMRN{6P~RU@;d{lXw#tJyIZLrcz3fa_zW~YyZBbh9jGZub3N8VQ8Y>&Zl1<3+cZ10 zf`8maGRc=-sWWeq2V`QH1SM}EJf(ATuV?F}6Y_R?-4=TtAq(d*hHOKtyR-FnhS@`XSnLy453 zvDL!e3gpU5>Zmx0l8gtTsvzvukWm@AJ*fdx;MHEQ6)5anwUjYJ*kyZeFy7#!7rfnm zI$Px_#)~h#t2oZ5H9OQQN6+>Z)1Ym7aLb3Sc|k3h5k1GOy=bkYXT4NZ+SbN(Rx71p zd+~E@TKR*=B=G3v{>3h>w7k4rB%b`H?Lr0105LH~gX7v?km73;N1AQPhL_&BODE}8 z08P##a^`K*emm5mse8S*>A1HILVeDzmY6s3ItVNQANZ_W0;r7RlDV!DM}`TG-VVG% zO9^II>!^}5ETLIs#p6u@9iPz2T~k>xq~F>(6yz)RXF_`K&flN%<ptoz=N3y5?{F(k`5dlJ%cvzqCS9+tPc#U#~*s82$LmrVz*2%OOku`TKCO?e7kYBhfm>AIjC*;k4wrQF|~GXCD5; zASLcJOPnse=uz*Lyj16@Iv4C#Yb(gIJKA#r^lcNv&AFG~Fk!W#S&ZN9Ok8I(JX z)aB=MkL@gd0C`$lo*!gso5>olebZ+PA3eIlzo;yEoD7>sG%xm~ny-&nx}Ztr(9KjP zboP0r+K3CeLVl0edV)AV!kI<;43k;YPOIbzuT#xdOPr94nHcE6$OWlvjbf|L&*rV+ zJzq33g*LyPP4zigKcYBX++`}2Vk~ll$6xmncx%m97Z^Nm94Ew_B)PAR3OJ`zejxjA zQr7=NM*E+y|Jy|WKg06>=CEYBfRG(5;fJv}rg*n5irs9|IYhLnp0XRY+0jz_*fkLF zO{lMGH#WIVH3kq(;f1r4PXU-ewa~MtWsDNOhsUNfIR$m`rRjbwVoF1iZMgnGSt1RG z%Mj%IxypSdW^DzI$xzfonqDz8G-|a1z(8K)33gRTZ@b20V{#)Xxc~g001oz0+wChl zDg%LvcHvIt3| zQBl3gC%c&y(}A>RGw9&0eht;;@k-Yn4$TCs&Ul&DaQak`0$hGRywD6#bfn3rPdkZ& zSG(C|thy4fOCFDOo2?EP>LKsCFZW{!2eOnC1ocdQrYpt@Eu}?%wrr0%qJY}65T{RO zl}^(HNSD5q5$SuGUWEVnXI0ZxQM8Ka8u_1qG{B1MV)WbXq2{wvqI^W}-v7j<;T)Ak zJ(7mC+jea$v53=S%Fo01cx)NVaLl1NmuJ{4lBjv)(F{=~WKJEwk`h9Z4 z4Dl_AH~gGQ8q12^OKI|v+kAF1%S7)dUW{>#NwG-xGeVY;87q~mMeRjP-W>-LWH>K0a)h`taN9(HRXy++ejDPb~`NAWfX)AHvPBGnCP?enG3(w<8 z0010_)hJ>7C)hR*606JPBQDYD*JNg;1KOb`xMdwL#Wm7XA*J8EiXq0LiUAG=&^P2= zBjUXQjGOo=vhnwxL>xQz?QIg2N*G1_ZyfN`<@pJ^+Ce+=Fq(A7S)ujm8hX&iQwkF1 zN0&N|aau03iP&4l!3p`%r%%cWCn2S&xeidXsCmQZRL3f};Fi$+g3I+nPD!ywe@SrN z^!Yu|&_1l~OiJrE%7!sImhR|8{+0E7$Es!6{#d4)eoQWOfCKk1(x%Soc(~BIzGDAU zEdiuv{7Bkn(aMl)XfXYvOYLwv{@vDG6mwT4FZXqko7I;&n!f#g)*Nulqw9=6YVMnl zMtY#Vg51Idk0ajLdhtcc8yOkBq2^_lO#NQsgK2i6MRJ!({;sKT*^P?pv-qfs#O+Zz zcAB5iYMAYYEi^NYm4tL+#&ad16jS}l*x!m{BD&r7Jr@s62!64&BvRKE_@3_?2$%W>ozMF#+rOxBq*u*$VYww!< zQTxy`y{+}cg`Jb9#!3t>Pkqy;vSj2SXpUL>^?65iL)WI)t65$LNn52h6t&)d!nD0~ z=1AHmHp|#wWJ4e>4ZHOzn;&jYH=-l5M!Y|oO)+`2R8I7giE`vuFV8nqrC8jF{_(}c zW~?mlZeg8mtZcVLIePb8*ens71hobu&9&n)=NOX?0sHzaNzc0s*P}96^hmlB55f-L zErk)-eA};hs<3~6tQ<2@3D4V3{segYCnlf6#tN}^k_5Q}XZMJV&~W{|H1<~b*^Ej^C$%_8*oBL*^PRG|k=rSsm7#q|g66N0uM{8Z8f zFOq&D@Hre!n2C1#S>xlI<1;BxF2Y<_tP{hm|1=;v`x+g;ZSSr5?&RdsOJtI{*SEf# z^H|8ymX2|bNnK9|UAT)=Fu9?WTOoiD7CTm?PoRIH}M~LL|1deJs);v4pqXdcRoF2Rx)&P zH9_*{i#rt@+Uiq(kvR}5z~>)P+)iex*L?gsxRMP|nYxhnYR{~@w!A$aNIqJr0ZaCl zHotmFviS>r;$y#PcT`vEEB+ zWKK1Dgy&6gBn1_>23K9|*|vgtOg_ux)QdlC@WuCQcQ%~uPnCr$y>F4<$#WtJPszmr?%w17yRyR@8z%_K} zh2phaTMEBGq)^t2(88KzH6_XRXN_`c(T@qClN>oFPudRzAWr6uZQBr1y`z{8BUg@d05w! zY&s9oRX@w548?cSAgBA&Cv`f(h*Y{=ujES3W7^YYv`Cz53o1*jpa zscQvTgmnL0>!$qjR6YLKHH9U5R_dzoEmqZ}#4DywL-|I7Ef)kFE9F;xH`BL%C9A$E zNo#v)-4&)G7vB{1T%j8i%2RiEVu*^adzu<17y@I5{x2HEwpZ-Btkyoezt~h)@{$k* zis`d4Q^ljp`pzr7_v$~yGl39dt$rE5HjMQ=SBp?KwEAErVX7E-zOgAHe<{2+)w=BN z&Pz|bMh!jMC}qqeCO=&ghQU6okBTSDjEnzydQ=tl*75F=**iz?7AAU1Ms9-m}CtL z&7{6O_3FJJ3I^16vcq$q7-v>qkW_yd`Zs0m%;KwftJoAySYaXI-MiG-WNG7WbGf$0 zrv!Cwt0TZ9T(EjCR8r~WX_S!j{BVUC{_0lxPLiIR&g@}hL;;GC=fGJE#6CC?SWI@t zHVYitu^XLas^)%Q2-TMJW!u+JWNz8fF}Y66Bk?+dB>+q-#V*#Xr*iUE-$`4{tzicKvA1WaaYlfYR=X=tQstRH3 zd!9=>V!*(WQEp;eozteqY1MmwYG#W`G;kfLJ+w^B{M0)$Wm6NBuDzzSPA*{ABoK-o2!nj{DUO$)yOKAQBy}s+ zN2Y)x$+6aU73s@Jl>06F#bVybBeM4K`R?GQ0_8Us5MCB;w(R%(^?#OF#tM0Uzrt&` zy&K0@-^5~7vYC2VFo-z=rPP3ouT~-=vfeHEtOEp7;&QXu{MZ)BonJFjcup8k zJ%<%{z={5=ke)Kg#k+8j7c}qq^{-Rh^`G4>b;AF|1n?mXA0}ps==v*|v(WAPOw8%ee!r8mk}}P& z*>0-|(0?&v8Qbi$QA^cI=c+XMNa~lcr98NCpvbaaXffs03|0N1Ovgvj`_Adw>Gedh zhR@~cd^Z~c`Oc;TjJd2>5Tu`!F9&zIc5kq!+<8jq_r@lYwY5tGP#_r0kRrsF>bPphG zK!uY-1O#@u>WcynNi4ScZ4o3l#5rb|N=pS^4&It=wPtKF2732@Q0ceX9x5VBX%68^ z{`W-ZqBM$@F+mL8w^zoplx?e$+H7+4860n(IzqZ39+O^dM8wHp^o7<+`exqnb$u^T z-ERBqI^IWux_sVf+U&`g+%(U$c)X=pe|F zMfx>M+WiAnu`OxriV42WfO*n)r_(_m3He8)0&_=J2!hi8T(loXBhc1;!o^keUfbb3 zba=bh=M9yyC)4@M)NjinC@PeM^f~)2I>7ch9rHc`$+s1}aa=M1sv{aQvn+Eo8Rx>=;MU@#?@ zK6<@+gMrqu#sQ*LyssH7 zWIvd@S^-PMevxdd;eH1bLkS4zX=U%@pmZ%J?KC@S6D4pn6Sz5y_C9w@IDNvoS6l{V z9R@cCjeXXLFT1F~I@knEPHN6UPnQq?>mySLdGoqz(lo<7dt|8QtU;MW0?E60kH$-E z(hFT5cZ!h)`Y7E(i{Xoqnh8zA=1(bNOD$CN4IuCXVW=~lqqos1o0I^C9*y_N15gko z1Js`qtj*R-M_a@kzg8QprF7O~N4gP$)iIOyS+ajYZ4Xcv+i!q1E)k+YF_V$tMAH;_ zrJd4Nafc%_1Px=v9iGfGg*ZJzUjg&w4Ce(e%jfpY?Q zuo^J+qCS9!m;;gjh!pxJmkF-D%?IbN+%tFJfrYKgZ+GA({=fP)JQHv~At=Xxy5sb{ z2!P=5Z{L8EK=9A&{{QFKdZ{wb7B!K2=ZyXK20ZsitU)wCl&d+M3FY-Wmb zfgOaK1s<6d9?m{;z!jOC8Z>n6Bu*Tf8Z`2l7zVMbI1d;lBgj|8Y_%hdKsLBcCv?}D z06Mg(+X{0=xAWA~rOHKg89*u1KEM9H@EL5+CptP*M%6Dm4Zg@cLaY8vaIU+qD!!*l zNiK0P?z+{%*KN^YItoWyY<_bL6*M>%FX%|)I^S{h;HPd$I-Y9}L|bkm@^T=960b_) zkGdB;)L^ChFl`m|c&m|!2Mya#l#tEgYn0|iQprFd3-X*`7bII>5lh4c1odUAb{B9C zf>6(yrD#C7tS<0$H1n5}7M$bZWJbiRk#)4&r)o`LEutD7uBd>gEgy5L9(L^(2k*jA z2=u-M9lL}-kF3X^@Oo|kroQh4N+O^u$t3RxnP!6SBCv;?{7MGio|9e+A9MX$={-8m zG_ss+g3CVOqK{Q?si;6rp6i?$YwzS3g0J&gSq$~zPk;b=v+iWCpcM|ButYp)Y=63g z=KRlI{a)AM2h6qq^=3p$34&bfH9K7u3rRjjzwUP0$HAHY1TcNkoYCWDoq8HLzKynX z*OCL6wu4Z^4Aq|q5Gf?^+g<~buj@Wu*l`I6l`TiAS^#;04YvdUhu}o#>q}(Y{|un+ z$I2uiLf@ASr~4p&gVy2e!`<}>QKD=0+tCGR*cR+GkGyjT8-uH3zwIuOM3Tp?eQmnh zQ(#ihDWptPm4=HzVrMy(=s*#|YT1}mVUH|rvpn0!D4Zw+eKi9PYUv^9RWt}(AcyfD z{Ek#@Ax3Pz;=CaWiUW!Rlmahbf1j5Wd*@mK5I_&tJ?d#4M@xPnKV$OhFw1(SbFko> zDjU`|?~BE4Ad@>6TmcidbQMJ$wVQc%prDH@fg`K|- zgVvE-pKMY2Ax#k(?kj^MKR04c5W?KGyS)zF%>c_C7oK2NtfkN~%0EhxRAGeF+ zFOv4%X<`>r`ZNvRb~Z{wC0NJUi$(SgH7N|-H)dw-26OcU(}cC$PL@=WAs=6ivJ+8^ zfn0cnOy|QzsQ=z+c++x69iqupr4QC8ikl@{A{di9UE%^KlVHmLcq#K9h4*$Bdv4}z zD&>fJtPb-Uj8p>L>hgmn77gHg?9@3(P4qNNXh$>6z=nh5(GS(4Pwnhz5zJyLER~MD z9V-#Kn4_XUaRj4VfWajO^{hWSbp3EF8(}rrqk&Rl{*3kVBQ&{6`rBpfPItGqwh9Fb z)E?;xN-`#g?*>*{cPH_>%%FvU{67QS{qNdniKE|)Tclb?3&SNg3I94Uzto{)C$b%vnaB&F`;`E$G;0seen*{-H8$ijh6BH#yeFu3AgB7o34K z8BZr7T146xMC{_}uW%t2Y_7O;3JjrP+rT9Ka@C8qc&+etumwk!MVe%I{&m~%vGxX7LQM}o$Tfntz4&O222jh_d>_^1{TQQ|WfsA=@ zV4ykcN$SjEYD73Z6?vM)d|g5}4W3zkf6L@W1U>Nj(}oX*az#&$PQmcgS68;R?HaaP8I#w7uF}V^5kPGUe}?HI=|rRbB8Tck;8J+loi`XAZ@9s_x6;cSTBd{kFtu-9uevYhz6~VnKAg zpX50c>^U2DA7lsr?I)+}m>ulJ8;*co7lP`*d9DHL7WWIX30-o{j8l_bDiy!lDz;ye znU$Asgb|pGF?+wsMZenlyq?vyRZ4KsGA7DMC0YHv$M01{F#RBcmqEyRV|XP|{>YCs zvg=6Q4bydHYrJX-)eyQay0*eMgRQ+9CRr0brN#_bWtK65vnrAEJm$Hy*IXVYKj$IosE^B50%P!DP#sb>+Cnd<}h>TL^S zorGA^Id`i%EE>w!2(2rrLzm;AAH3u-zqZ+vk0ikR5Jf zHsoXeX-QtWfG@k464CN1Ahd-$U7`zlIW3?x)$E%;0q?V4-vI0Rl`0IFv>90LTa!L> ziDu{hM|T0wl`eOh_zVhf;NViO9;!gfoUvT1p(-xWCAQO1lWuB2$J|o%s(uUixoL)$ zG6;3kM>-WK_dMLnv%?!6JG1k~M@uyywziASXBy;MT8A%eg!pXu-EFBAyHDvbc)vxN z=GvGgzP5Gd`*CJ-LG_$uuQ@Fd`<5uhcq&_TpVmoS1R#)R$SwtEa)cu70CNEQI!8bB>$y zS1j?tbB7MTFY>Tor887M#={$}DhinpU4My$z+d$dMxDPF@ao&C>aS6@x9#Jp3hhcK zZ>gU@9Dd~<+8t}z3yO=_iCaahlW5JYYG{e3K9(*{S(=I6o$)EuLMXBxZ`3lViu2xd z&Z1@{OX?z4OuKf&85A9iFhD79dJ|EPK+MSnG3NxJitg@gwem@qpR%L{Cax-%ao&DU4Vc&bA47X#e)jsB#2BL1% zlb!7{nT#;3m!VE$fEJvf*8t&s@IfoXn)DW6XPO}-E-(E4?HIda`(4QbpOQFN z4`1uP&Y5p~2(tRhuO_?W`Q~(92cla?vt3~u8CZwdiO-6&sOtLqxfvgXtLg5Tb*QfM zhP@f4p08P^j$y&5YO($R8&EhFb1Yp?ge0S4C^v9hbv5W{+qfO+vtG#tlZHirJpe*h zlYn2m1FWERfYwJO0^|qma8k};$Z_%8`zP4lLv#E_^8vyQF}~G%z7Su~+8oCuDjP%k zLP&VMCe_)^Xrr`3c*1qpb}NCZER=7VwRyu^Fv4@X(DN2!L(R#j`^{wK2Vq9@;v@_B zMIV>muT*9$jLD2a&Si(*dTIAZmJaGbakO+_2IFG|0!V@7inR*B+ek|vU=Of2FL(TC zp>?K9a43>@C$^uL9Dm-L2Qld9Q=}6>F>WCHw!*Id&U|NRx9>b3NH_cr z+SVDL$)iy}F0mz&06ZE3APyfWaZPk-xn8(lwIbV{Bo0&U=OFt(kP@_Pi*h)=E78`i zW}JSB6uJ3|5xpRBP$>lJ!*?jNCjh&m0J$)@PeqgqPMb9pP)cG4d?#EToIA6**+gvO zbT=+P^SBqcw2*ZLG}6~d!>;7L_$jF9Q=Vq|sWukg7t(R6n-T)U8l+B}MOf?t8dU^H zZ#)7@xvzoXSj97;x^}xW5%mLmv}2z6@kIy#?2NpojjvZ_6x~Gt3ZHG`D0m~fUUBm@ zF@vtuz}iSF410je7Y@kbLLT(nDPK-HO3{H$)JovoQOn&g(q!3<0; zxw60tR|Y6ojdCxCltYtgu&g%__2d1+89;INP7^0blspFKH^*V(CHcSsm>P(4P>MG| zwJAz5+MqtEunfRECH1$S0Mc1Z_W{C`&>8($xFg{{PdH$Qa5-YJFbSj2DlY-hR7&AT zv4TfwF{xunc!dvty_$tZ-Tjv^?=%N-UGITRlK@ca7XjqM0!A2;jQ!2F6wbp|!Lu#FHPXwdw(9#slT4cbiCc?1<`Wsmm;a95w@9C#=kItYrgnP<_}NTNh<=4$8W+)V{tevkc1+V8yvi zwq*+fvi={np4R8HHNYM&J`=>UzhOpRMuizmWs)@lR}4-{A`0c zY_14z-bupC<_*6MpPtV$q1db1F>nDWoC6O*EjL}Berbq?iZDw!*eYPp3Ty+0Yu9?p z-++}c3+hly;>I(7f#Vcm#kASnzx6nAb@9&UmPQ$@yYXDxw5FWX)o z(avfQu>7rO4>V-Vy!-Y6v$>JUPO0OR(EE4wUG>h~N1N6qPNQ)noS8XhDtNkNHRB zH_kw%ZHcJlB+YYG&6EZf8}i*kvu`R6CVh&JD*HAXwLcnQa2aNS{MdV1;pxIVFvP59 z{?*hI)IXU)tXGv?Af3B`St;l?{>zp$#sZH!h#*rHS_vRs2Q-Rw#8>^x=LW1oP7C0Y zNu57%r3HRmPL*>pK&{_{5%e+keFpjCKCXuCMJe6)5^3iH`FPp^KL6MmDP-H5CInVx zu|gF;T9~WxIUsr#q5g2CVtoQj`UO@k*Nh{m4l__-HPw-(vIpRO2wWYa=T#1Z*soWY zt&R7%VR8><5O#ms46-b#OnhD74KT8DM*HCev36hJXcMq(>=a>|^D{p}!zIOp%;PS#3lXZT_6`19m z;-YmpdK;Lk`2&&O7f|TKyaN#I3LLuI4#2j#NkovsT+7gF!~ef3(lWjS7qE|sF38A+%NIpK(5rSZPUzo zcrL@%xJmQx3ZPP2QpCfe-oEYR_gy?AZ6j!4&DAOd!HeM zb<0`c)rGkOA9E$C_avcy&+< zKerIH5YDT(3?%H-Q?1&S8F9wgb2@$-(y*Z^6D}sgqyuF+MLFtF7Z0gEU`P8YWKL#M9#b9uExGde5nA`?=U!lUIpe} z++EX0`j$>9CuPOADN{6*a`GrJ6d-n#@%U{ z7nBOXl3g>w1v-)l$rDcy3kAJ6I3oXRD?nRMuRfYjDE7)|1?L&Kezvx;K`DR$Fa}Dz z#(*;&gaT_seM@~3@y=`P`5QpWdvT#<6gbip?T#?E6Hi&X zu~H3(uTDEQ?++-#X!01i1Z@~a_gATg!arW$*{=RV4{$1^d#?AwSM+iR#IM=6zC=~+ z=d?C#HFdI;Q!jSCZ!(USXxpB2XQtEk-y*&8kZvbe!*M>YdTC|YCpk4H`~&Sl(T4TH z@QgiNNJk~jKXJE;!AEBN7+n%qyttu_87qC(RT8&dZvS~>a_uHppU6hANy|{#BI(U@ z!2(i$oCgKz+XcYK{4J;Uael(vbJeTOoY%g`WtNBTx<~z?LcbBFb~v@qyT@URi?nkv zv`mzdPRa=>!fG@iuAf$>SKjQxHfd+$8ulOEYGVrsf@=Z;1hSlVmS--=87G`W^?dfZ zjBhWPtsm;n=alNR@k1-Sw7;XZv@XsUl??3qe)Y@qKjWgw{K!kQu?fJ)R`~E4O0)F3 z)P-iPg0$3@p0)9u*`JM2;b&X76(2V@+cNppuTv_8pGXQ>;mU+l>*R_FZu9OEfEaLj zqG;eU-_88$^@irqO#XjPE4c@_Ei#(V*N~?=QC~ZDj46LI0F-d(D`A%O>p=S-o6mlK zf9JJgmQC`-$)nYXcz%UvV}EZkNn7dfQ-|u?9kolOTFgc26EAf4^$pesk7_(6@bC1? zN;aRJV2?)Xfc6INMX0KvGPf_g6nBYQo*@5CAt!A3Hyu^sbU2nPg2|N2@7 zyZ)yFsdayR{GwFLLFm<^SVE&N1XD}mxRr~jqSoozwm&|WnvPDa-wn%w>`D@sKZm8b zow&FAg?rpLOj?OTuiEoU8z#Z#?#pvtUX%jLsEXl31pQ~%p8FK=u{(jE?=F(UF5}nU z&O~9p(}O>Scls?@W+vG>TIrPm9@U(8ExPrf6bj-}^Nx^wR0A z4=5B|@s~(rKeb4q+gg9|v&|GWqTLYRnSyHS75GXs1u<_|%f`ve!A+h3;b z^1We#x&4euJu5=ux$GdJ;%PB}zf8Yq3+Pgecv$dZexK3)>I#wd5YVqW2I+Uk3>X zt>l>-aH++~? zYFfV+eZvbit!9It=QGxPTC^4zOAZ;b<4=p33DfS9W*fj;tCQD#ydc&3ID?cZqjmNs zrnSz*jy_M@IVw+c!e&pq2cvi_iziK;9U$ivbYv7qinAK~U@$^6M4^blY&Q6Ppd0ay zeinv!tO2iihd|H4m`QN>N&!7S`~t09vHM^|xQQ_9dAzAohv&*s#mRT>9(9B+AH0pA z^fIH%A4=|0avPRRc-u^t(T!aRmR~xN84EeNsKya5+s=KV^(`qe8a-syTG8JN(8oyX$8ivEKHCDRndG!o%7anL~fB?@J z$*SDeePaf=IH8^Qr^F;*nf;gZYoK)K)Xw8W{d*kx=sJ9k%p~uC364Z5chaF>07tw5 zp-jm6Qw)5f6gCkrlIodaNMh26gKbKFLP&5SVJ$!_g>cCY5Kw8!Sd~yPbqA&YoiObM zgeH8cFS8YhS`^90;|tpyUmY+ccXpXVVaXTD?hT}Mq6SuhySDK2&4vrDu(1THcv!&k z1n=GD0S+H}EU>1?ZWJ}19?VACi@^mv;IY|h0i^onPV{iO3vA=)3CNEQ0`zMGkTHU4 zz-oVWSI)B0yGi}$B%2K=*PJ9|1ZT|!7p1_V z26$~l@Y2~?1mz`06t6$XRhNJ)w*!C)AHFxVv~ ztSjIhr{aA<@CVIaNkRmc-*tBpyudIPmJ^1-3PZ0Q>0Jh|v27&P?P0K6bkHxFloIVa z3}zTCB_<4isk1VU{jqcVq-A4w$mmXcE60wZ1-AN#WU}}JB_3()ER)Fv&#WBkAMcb# zRK>-DO@tL$+Daoi^d*-_TszfTI6mlgoVwM|yWSx=jCnMFq|<%4$L~?Uw!2HJ-Sx=6 zYt3C?a*c<&PXder{H&L_S>c}li%Ua$>HI$`{PVw9U{cV}l&B=e`F|qR=YR1C(9Zs8 z@DIZ}f5%7c{4eF-M!azUyA`2}MkxNf6|aj%1pd1f*hM357i0O?%0(l47i0O?%0(l> z%t_Wb;$mW%<9Cp@asTUO>r{V-jD?NbUTMfd@Kt#wq+|*?&?Sr>TQW~9%73E%+nE>M zdb|GoLiR~tN#)${s*{6Yq6~xMCrd0`*?rm(Wfj5lXnzMRgtceB;#5jpsN{LiEu~u^ zK5eo*w?CkaF0#-mvT96FYH_tHLj3QF;9W|#cGD%aDo7Q{&l8DqI9xCuV5l$Ip5fX4 z@gQC7Vm?%#_oFOvuZW@16$}y?AMOwfF8Mz?$^V~bwz9J)hCPD=+_E$6E*DRJb~Lwa zk^1kaDzvVdHtA{a@2{4}=@a zRicxVwZVI9QVW`*@BFM(6CN*WlvzZ#CD;eDe!^TFTb?Tw zKs%fABW5mfY4yd?_o-2V`JAM`e;uI(40qV_4kgSTx)!WcjN-K-x!vc6B(+&Bw=LDh zZ~Zt~^L!a_6D#<|3wKTR$?pA-&Td5B8Vd|Y`D9;|I_ueymbSpo)A5}pi#*P0g^gl| zVVZ8#ibR1@n)3C4>(Cl_DeHN^MFbx=N=yyiS9}`uE}{*wTVAYxDFP8#_i22}+TZS* ztkd)}%9;m?gA_}521xdHUwh5J9Gd#EYaP#J!ExGE?Y!5_yJ?&-41atYw~jq3kDz?c z*wyS91!I`Y-^rH9-8@C?+c%+x;K^`a}n>djR`zABWd?Jj-T zlrIf#&l}O=Tzw9TNR(C>C&k-h z4=h}GK895ldUM7lp7HcwEpBY(q6rlnH%R7eIbVkp|1#dW_mw>q(cCV-{E7g}YuUbO zch9)?wagCx?GAfZN;SW#%iffmA0IZ}>6W29!kCD^zUkUk=3XChslK>l4ULdI7U?Np z%hO~J9b+LAb_5}X;7t7nPs{7+rxK)tjzEi;N1X!ea?CvANiAc%vGbBmTQjbS z7!1vqZcwloH{B*|8WLPMywDEy`uRfOsEdT& zk#yO5)LNk!+eQ8+mBPzw@XKVliPvBv3Hu4g-qwWg<7>0BEnXFS-e4w*PTEtUTYt~(OW)Y&g+_d(W|=frKN*UncENgz3ybQ7G$8Zd z5f(iCD8ByW?-{JQ&xWzmM&6rSc#=)c*~9fD_^)|nHGetWn4PTZ!ckc2Ux*<9gJCf< zy~c$#Eb31fXVlT8S%t-wMR)C5D)y`zV6ks9$+;rALPSfiBpo_;3ZKstvVt}Tbh5j+ z!lPBf+4iqJn^4)?$D;irud{rlZ3*o%@&$R{vb^#wX+cQEQkr(lpW3Pv4&eHU&#jRv z4|-}fmGi8$QY%&Rdg{iU8O|hMFg&j@eeau`S*5Q|xn3($3b9A=JVlguljLF)BZ9|Y z>o=w3p^iPf4L6U4!%QhUhohyD0?Q=R(48=!ThP4!_+i68bZ)9HVldcQv=%jLhxz7J z*%I--qB9>*aFULERKn4QA)YSM3YR6mx7DV>eiQ3!(;eviU@=28!}yfjT`P4* zMv#??_3k{+>aAp=rL{6bRb=5A?@!v%J{si^q^ZxOTD{T6l+Q@ub7l|_&{`1LAH zEReu#tfJ7IN{jB^J+r=axqRQT4}zW^TxR`}--3wj`PY5a^^co7_hfC)#)+u9=k!<< z=~<-dc+k<8Of{b!#z&KfbXEPn7-DK_w$Wzf?kV^HKa3G8(C%A>?aV`iRy;ad+6wa7 zw9L%=+D^lUE~}OE@Nz3{WUxZHQ76gv(tymQ+vdC8-d-)%KT5|3+uKubaI=lO6Z0|k zR)VKb7?K%Z)u7+8x&o8fes`}s1RgG8xwY4)j!vDD+huywJajNm-EtR(cVnc~JcFFy zWg*F*y!Z5ES1@+%=I|dY&gsTb!IMl9F0+N);;!EH>AH9lpBi@k@0rq33_)+-_Tvg3 zeYPAeGd$cY{ykCl;@egJlf9Xx(eeU~5))yY`O8KX#G;)ygz3OTD%gVO9hxV6=uF7* z@f9>#+FIk{u}$j;D6SCL&=5#Xs>W+D6{qVlHM9zwaNCsY+&<3FLF9ZuiGR7nWfocG zyq5pSelAnJ*eL&Y(i|9-!pcY~m&s4cZ4|P5n_4Ybvt0hRu3Mo-saYC6&C?1UpR{OK zN!5e0$8y@3U{g)0^+qq&YUcN#6Q2I;x{jQWsBa}^P<?|D|uf#7eQF4;RbTT~-3g%{+w>2xjH4+A!F(eowNvlOqKN4=0aeIJNk4 zwmlYq{pm^d&gyu(IWxvb_nqOLUFxRD*wEJJ^2wsWWHj{TYG>dWd7h-1xi91n2()j1 zLrSgQfr;o!O9!<@KA6$KG9qGBf!o;?nNvl^wB(ueBr~Xe`3x3L;R$2|UJb2gd0 z)qw=ZKQg9$4idlrJT8~RbX@qURGJcuYKrDr>Sa+K!FyneZHgaeF020X(HxYJw3eyY%me27I`E-7ACy+E$4Z=#FpNXnVf57Lf6CSt-=QCtV9G|6gaJr8s=4o&k20TWxQb*P3PR7@5TW3X8-vxIGg^fnc-3TK( zvw9*rB9kOR0Rg;Cx3UNdxBLIpm6x({jUQupMc8g3N2WFT-q{LbVkC^4Uf1nDx64fu zNxv90%a)TgZB0iHbhnRD&RJ5+kE%{bMOCO_HXKE+dB>KFX-%tklnbf3&-V{4&I~xE zTZu;}%Wu!tGRM#zi+%BCjcBElt#2+X+1v-acFz1^qQ7QlqT=F~G|0oo%~z~P?>pK= zqhsNm*y5v2eGMCOraAv(eB4nq_RjB~ zl%)itz0z%Dd@cJ5b-!cLO(eZeyZ=Ln+N3n2&NyI(N*E=nDq?I*CTd>gJ1W58kymft z{~SWbx77DcuoO+{{^NBGz8jVj#!GitTRt0k-1gWWP>p+JpN0P7CefP1M#tVv8>fgYp|A5gf=rRK;oLfZJ2>y2rqed%$6 zo^|GA*Zn)pyD`M(wqJH~A$>d~9qzui$fTjYs_!Ev@%1B=YU|}Aa#X6Oyst%m{Fn=j z`Vi&)YH3XCn3Vl%odO#34{Q_QR6~ID5oZ+;y#1qsk%6 zd_UIAzc)>06wh?2KTA(w%%WDOw!)iyk4lv8v1i&gMVT^{^SyqyF{Ztk$w%W=j(rWU z(L+hDvyU-3fH&W=k1Yp4Ll7Eb&$$9@PDg1NB1yzIGBI&g!vpM#zLVoaM7@W*w(U0} zJz|2i43_>Jo-&nB);teV#5CWXxWBLRS#NsoBi2X{y!1N~F1tJ$ur_2qVtQ}G76Kqg z2y2p`;`?IQ{$W_3`_#y4e(FKQX?9-4cU z3~=4!x_G=^G<@&A4Gb|ox_G39(`eqOO4RG;??2Aou;D%1=eTzs*`+EeE3ep6-UYLd z!13>>1Sf8|E-boE4uvcbG#IU+S2Bk4Nst}5WqxH2Byq6HyupF)Ey-O_x?Cn#J+>{x zHk>f`uRS)xrPc9jB)PvnZ@*3JAB&ufecon9fdsGRC`hY_;82#_ef>Mhz5UXDC zA%jNY#b(^}IWjU5y}7L^+YSWLvvqC+Qlf;!1*t>zfHB52R!WW_Go8jAA-$_m7zjWQ`6l1o6GMbB3>ml zo@H;a=TPJme2dwR86zh(m3C#UQWQn&1(?n z+qLDd^iGWDqrsBq4^Rb2KOEAnap%cOa*UMuL|1vpBm@%BY2k`=^6!qN%zyHnD8+j# zD^&8l@zS^pDi4G@^!EnIC>g;#TOagIgc*f8;=r)@#e;7RkXqLy#amVVn7B)|SM#Th zk%Z4F*AJIs)depo(c{4Mc&qQ3%dbFsEnM#(e}1=Hnw%^bcQbH*prm4Ax824E9!*Go z_!HI2D2fDz7nfhX`uG^7d#cp_f!T3)+!-}$T|clo4wssvQyw?;P6}qNQ)~9a=}VQ0 zfTzn6JKsvmw3%)?_!Z2$wLkx9bXs<;b~o|lX!Du#tyhMFx#}*n;S&9yh0!(hoRQkj zm7G|7vRdxvF*~o=+C=R(s-T{MhDMZU(yh2Q>0Lm;^Y)ZHi{T=dxme@=Do67?tx6?k zjS`#Cnd5syWSfVED>&enDWAKY4)4Two&}{1I@$3y?wO|-|L%hyjxnK`c z(x+L5zdxNPf!_9R%N9EoU>K=yp@KfjuuyvtRY2#?EvZrb)$tOzK*$6nW?ssrziyk3 z)u$dGrt;}TkZ7^ITcUgCDScqbA!7kug@rAvwSt&S=dvs=aSlbn!t&f*)3y@oEX%D& ze+y2OYLAqtNXvaFJE9Z670$BCkkHq49M)}JoOb#)jJsg7Tt+p#D|12jI9KgKIV&^K z+pSNSVYMQ@X$$X_HaPNU_SkH>V6!au@}IV{HFu`h(TwjGp@dX?#HOvjiI|qIiGQ)m z61+1~s6G-gCx3}I-CI#faT3R@M@cE1pe}ykj%TZKa_&v#iSp2G3W^`u7^Z2~n$@#Y z=0APpVDegUMbGC3I`%|Mk^?0Bw_BIXh?^y-gXASvrrhvntoYOH{#FA#)|R>8L4ZjL>njTJ4c?9x3$(h z8bYDN2+~cFD^xv-z-z_JnWy4XY~%V@)?_%SFlO1XI}-o{qwnYB!PTMr+j+Ddb7B*E zD9-oH1USNeHj!SE)!Y9yET{niNOJWQ!4 zu`a>9^w|(%OrD-#%TF6D;`Wx|D3$9e#hT?4f=+HL%U6{ZL~a#tA=khgFc^JM*!_<& zKeF19JKg*kFt6yyg5SDaHrp?dAixX5;q1@V`e;4{V#?{SxpDBcI&%O{vm;3MCa&>R z0;?~?t)#*>wtOEeuqiO%&66h2>o6~**q*@P^5hz{&v+Hj!Y2Uu9K|LXJ!NX{4Do?5 z2=L=mA9ONd>-)Mw@%w2x2MR)KEd4+d6JA^v!m1jM%u`Y$OkU@(bd4#l8AN1U?{ zBlD@Fa;HEqFR!n?0S#tcv<&;(C+q@R&`~U{;}g2D!$Ny9I@337X#b6DMamwN_dKWq z&0J*r7r+DT0wZrAZTnUUjq76kh~TtL6Xd^kVHYsRMRpDQhm>0f7|185oOuV(!$iZ9 zk;DZQ-87ml=Ir(Fvop95Tm$>-H2!xgz{}=#d+%<`n~UL;XPTS}aDA(nDEoV>7Z2ob z!p{5`)Z+g-G0G!E9_xy{J+!Rnb9*Uj_x^tt?BB$md=^u8_M*9%$24ntZi!i;IVInJ zFF3gZOUOWH2;_#KAD{Y6lLv;r|6dp4k%yCYO@l+%CSBd9^&g+(DXU1UPm}Q8JxeqI^WtZQlWG7Al-&S{S3*`_DWX2dt?rhCr~~DDTL%jLPjB6dwaEm&v}*RfOn;^# z&9|>#D>#Ml0)sx35fB*C|Hbuve1WUUdAacm0Qj+H$ov%-G}t4<1}`*j%AlYirPr4( z!@oQij$+mvJelZ>X8m;aHcKw>Gz0`xyZ~{u9=}q314BUy92{^GsQ{|*B{?Of)OFVi z#2L+gn^ICIk91_8Z+V{XdSZxS>98B7A%eC4%}qW4+e;SDfFba$`{9l$@SHnC@LREX z*jO6jJ*%*b=kSq@5aW0Er^(VIY8sj>YLRtDu!hA=!;^oPOnzv3KD+$w_`bqW(9H)gqQgCw3tLKTXPzGJqIo?h%)G~uNiEVUC1;C?^&HzRG$1roHJU|x zSsEP#(aHd(K;){iJKw6bJUuzqsC6m5#iEtzJn61l>$2VZS@_ME`p2Ni$eWI96WW1+ zfmNp`hlrG?I8hIjzbA<6?14CA*{*`M{-|iA%rZw+*BwD89cg2XFI#u8#JIgYtPB!_ z#QeGgGtwd>G7+z_sKmtlC`MJY?{A6Y9y?~chj~My$I--2lf<&w86>glnygvb86BBQ2&*?PjzB|mL@-a?^r4q`edNC>7 zp4aIK8bNV#=^b>04VmD^}o z6mz=;uPjgZW+Rx}RDt+N9~!uL690nTDJQB(QYVPVPzfAB+RM0y<~|H7yZ zj4B*6#@e^sVmNtYrlp!3gH&0uKO4bV9U5%UxiaHZyFVB2@;gcu3N(pWw1&2+V`8W{ z=g@}&@M$b~gQoQS8scm+ttad9F&mA*(QrB1XxVO|@Kl(->=OvWRGnx1+mU3yWYRn* zuEG!EyTj+4moq+jm@%5+e^;TCrr3%|-0O90prrld^`1^<2|NWAfFWw*diMZ$$*P{t zW4#em8&@8V8q9-^>Tos_1}mY6#n2aFD3C-6>&Qq;7m0H2E)S=O_+G8l!Jx56H)Xid z!7~mMiQli`Fl@W&4v?yyYd0})H`RaVl}{7_4r2}Pd!iL9|9Z$xLe%4iuLF8kVD~t^ zWwU7%m#9dd`jq(YXjR+tQ~c?H1El2@BXavynn zwkesuspu0QHRBQZK8kSTOlEUfm;3gky|vXw0?WzBbPb&R%3I!O1)qL`ww~w+nT(d2 zN8e)Av6xR0voRmcjh*XCKxtsfD2l6JIb}O{17R{C5m}jFA`YE$8dNuaz|P)NiuWOV zF#0`lXZShl1Dho%mJ|Yzn)bEEj*bCia#o+hOq0oAj!v%U|4i+J+w^%F%Oq@Afp|*2 zEhWmY1F*!!ZXz-Q7xQmJ7R`(B=8sFyfE^OS8cyDQ>X!2MXg^BV^kDh-t{cBlg`~nH z$vs%7Q7}`|(!3MWwH@o}>lA6-oB~Xz{>lNF`@OXuSH+^0YI87`P^C2r3(-5 zXsZTfC>B}HWdA59XX-VI{x>+OZ(|EkQNLI3HhtLr;KEX1Ur?`uG#+Nje{j6Nd4F7S z&4NF1iUmDH)XXfK@2cnGwUfL#qU^<`6J1m7tU;GOU+1kZKGucs9EJym8lKwPdEO`N zesor7l=N>+ori8~NQ{k`zC9$S%w%WnfjTE{mk8+-nXKDD;G*h6aNHyUT{gcx+PT}L zS!y=$5CTcAI?HYSH2$<$%ru%yr&((Bl_;o7Eq(e8eUJ;*-Gb?6e^lA1)wRG1cbNU-7%fBGz_8lo_o9KZEym-~Q6mjxyi@&I0w+xCHf zL`B+nyj18XgW`8GaFRp=^^_?tP32$qR*?nKV-XmPNerh7 z;mP|yGl{m%2L&OwTH?n0_@g!mJag?hT4;pQMI0aWmX!=xQ{>B^Ml>hW#t!t z8IOPpBh~zu49#|Q^1yWCD57^Ks(%I7X?>gRb?NOGvt&){T7;saBCwgC=9`ieNas+# zjIQQ!(wX+3_{Pm)yaMTQ_c=I}78g&1_?MfKb?f_baq5nJE&I#D>aT&QrJ}HDn2MUi zeT=>7ClosX@X6$GXCZ*7xpI0U}0a!@#3B-vrHw`^o#wR&x^$gmw=?PTf99T_vwNn*Ny z&!{c4^vBs_u$(`;+G&BKJ{odD+lzfI+fxplr*ro6UHo`AiG8mU6|Hn7@QqUL)Sn&~ z)UwRdZXw=16^-h5D&e4av`v_9f1-1bl4p$=CZf#iCcs0e>YTt-N|umib24D=frQ|| zr2UhC86NZ8$QqHQ{%%J=(<#PW^XExow$@4J*zJH1AD-k0>el|;KIp8h_l~RIiEcBt zXX%gOq2l~u0Su@%?hRurJ79`uG(0X}yVXBY>pD=VFQG|=e?S$kKAtE*_(gny9?$z z<42LVs1(;hJSjp!rMLhb1{NVfo(2=(vL8R`0>@C7)2O4BNuwmw+&8&1wxA>onejI`%Xmvx&9V+~ zePH)8q49~8C8tDnqG)R8kDAFu)=#e{J+*ZMt{zXyBxL}YY-byPC^`YX!n&lKXk26&SYk@ zQljICjnlqgKOb$5R>Vg0BxvHKv78nDB%Y4zSkqQnDSXHGDd%fPHP@{k3CpxM#MJr@ z3qOUyXnzhB>aQroeo;-0y|Pneey~{mp#I>{Ylh8kRx(eweu6x{EoouFWP4>)6~tVn z%?~?g2dVPf2F%FjN4xi*MuhHge>s>m(@C!Ca-SvjU58n~uoxt?FA0|UT&+TReKu0z zX@-oO8Mbxkd-Xkm)#m17P;OXwU>vYGE)r1lzwRTS0X$ng_9@TY(wgC^_rP_Ebm?0lIPtD z)>-=5s3J=?H1aX$&$q6=;5qX06$O6c5&IIFXaI^cSTrZ0OFQ+pOl~V5AGL4&@})zZ zjD;*6{;GD_9nWyoZRbVQ{jy|k*9G{gtL}>0Jqln+0Kkiv+RJ6Tbz6Fq?3?3qZi=Cp zk?Fd8f=26CG0%5yQnGS4b!6FQ^V*W?OP)7j$hB6<$@O<#onIK#v)?{UWl5&I)so}7 zyE;vF!%%TyOjvsCeP+3p<>yQyU30ay#HHa)san!cSy#&I47+h2NBe-(Zps97`mwAg zBU+FXU-6Z;<4O+=b&5fTyqTU-a!L2YUxZ53KFNM0MNj&2d1E`vBs5i-ezs1?VF!4n zJW$eg4$=Bd6yICYUF)%9p`CP@W(|H!y$ZnwcY#pHTlq&dm;R@HuhR@2{=_6M%>2m= zDeb-VJLkUtB7gpyY&UG6IDQDGIs-xjjq;rEfkK482`E4W^a=p4JW{CdZ%!2x+w$Xy z4(}sCCKn%;JS=7)_Z|jN-K%^|;t56(%mT2SHje>NQwcCWM%_9$jhdH*AaDu-$w9MU zi_R*A#30Dn07lqaikC}3KmfwI*ef_B_u1JM!KroT$5J^9Cl9jWAm?b1vIoVqB)ZUrX_>cN~hjxK!PHmbmPK z_ZFC`3@-D*p-D%Wh^m1B?La)$3n&%axK!g4)`||ntswGO=*xHp`sLQHc0z#6#c`z+ zSp}MJA$RSV5aT~R+61w5y7StEw3Jj&?d}B11@AhPDniN9&ZspKP%ql7-amjhahQ3> zvjm)mN)!V^i`7fvX66;G!WX{dG%uOei^KpiZqM963bM7&peGXc7d}w3;7{%%nWK_t zXB>uvGMj-+MbT=fm0zSscNKC}m=CSZM5s4wctrQ`?#^|@ra*A+C(o10blKQs01j7k zV%-9C*q7I(#OX&(*H}$9=Q>xf|LGmf(*#VB_3)&1w2n*G#LF2R=PN>)3`(g1$49%z zyOU4^4A@@fFr_05sUnOD~!g)bll1G?FAKwOWX@yL zU6k}O@!56mha-9)jO1DB(AxOsn7?-9Mmoh|&RDjtK0{wN)x_%!foDPugS^s!aRtAw{g(KMB?+7(DtyeOsP_Fhr>iS+cPl`It$wAfKA*A6lFjme3x1`E%gQ2C5uUTT3|wOI4_Rd$8Ue{O|W) zxNj}=I91(H{uan4A?W~+i;oXEt-rN~)2!e@%2!xRH(Vfo|7Is!FL=&5pcVMRJeBgI zp!2F$b&TvlHe$PrZ!OaiHMq*uL_*aA@L-!>S>A_$E3EFl+6*aEy$FpNjxyvEvVjv- z1eA+&ZIUtA3y){sa>7eY6p@4)9oatt60T5e)alTS!&9O2(i=NaV1b^0BMr6AeKsO) z=iSwDh`;$BLWTk`27vA4K-jV@9SfKUCw`#-O4`R5Iq}n}F?vS8myXnX)`Qd0!k`56 z`uqW~vLWD(q5y*ze*lziqvUskESukTXJ`hbXp4!itA#B9=}u9})4;z8RAu!L2C-&T zcmsfA^c}KuWe$r<$Uo2i7=2hcKHBWo26T60GrayDE$t9p1{g|F)ce^RHSfU1%a!wq z#RH=1E92GCX4Eht1sC8ZS0><%N^$^2u`%!w4sa@^f%6{>B4XV7 zO8D%)=gE=F-n9StGl11P7pdT1j@f0))0&HX%QGWXS zOxv07aXi+EMjbIpzzixwPvGdqi`a@0s*Af)z)Xg1?o(1zH|4jQ##C+^btk&Fz5<>} zFa7;}fH*?JFnK8_dmzFKi!O>M?S>P?QW>kqegWP~sL=Mr-7Ls+O%FU(IyksQM0ijd zBKt(e#1D5hk%znFPbGbnMF2jHb$J*8E`Z%tD6Nb9I7>1i4nAlC!W5zVpWlPF?jj5x zMyMWwXBG+JZCIC~=DboER1*x>-NA;HhA`PAFQ|1JIMW+zd~hK^_FF>8@-M@LY?9B~ zAZniiN)%qY{mpsRr%(ON(O`HVq1A**AWC0*u5B2uW1o?@oK*NxVqlIjPwK7AQ{{qMH3LCXHlmiaNEbLG>2TxC1l3}y`T`tlSgk6^s%_x%6~52pD=;_UUk>MCN0 zyM{H9oQ&QW*K@<6TM|AX+=xb-Fu3qTbUHa#DoxQNpI^(DD zCeAxyHuU9NC;yLbd4YZUH-?KBvUF!sVcv8*+tr46YB!3QrUSx0U_SwyeU*-m&J@U` zMyech%B&~zfjnb~xq1c&wjMArNCQl_RI~8Kw;RL8{4C1pZ?jbktjdAZD-)o&tM$t` zoW@=K0Or&`T>;Nc1@O3#L(Tzuf(mk&kbJgsM##bLS^>zrs>vzE@}wg#tmua?Sb-my z)RVt{6(hZJnVaxxEc0ijH0f-Wyg2E|`{9=B5sud0iR0DI6a;q-$Bp^rrKAc^6G|SQ zF3;1+d??Wi-?xsPy3fKQ465 z?@ieKEfH#EoQIYp537NxMgX{{urUPNpyL*naZ%Z|TTBZc2U|m5^qOBkUs~^kvk~1_ z5W21NGHIm5G=;ICMhSqNKfg64sjgl*9AH zjT9?(1$aEA=_X&`kQgB$g4uXgY1flYS!c)f;Y#}qUveA)w4q|Dwdt|FG1LI=!SP|(g=1g^a944v?8g4nQG5bS(O3XDY> z1NehmlD)AF()}4HzIqBM;gaTZ5d=uGm&;?Jm?5Fhydcha)}q=}0?5)_C^yWe9`({#Wq zI8_YOe{y?)o&tqCLDZXTKkM9GNhvov=>bpn-AAnE6EG`xwG;itz;jgazd^RVq;KRA z{~8^W;n5@YwYtN6V0l;b|MKLRJJ8!qP3044~yDkXe;QJVWNHE4N3pfat> zBUCSq_Qv_vYG(4m?JdFQXSaR(%rKtu_(0B3{qPtBc3eQTsmb+bdHm(fJIE*1Spw_*h0!g+_B-(^Q^>atZ3DmgSkH2K zP!a*~vErN>$Vi_VmZ>2-I$93<#WA~fW(dgVdhr!Y6JNQ?!PNN{{Sw9Lo`1qm*U38f z$Ee)mhsIrZodNl2;D0_~z7?t-;F0@FOqJ8p)0fI8J^B!;+P}M|;4xD95~1XIK*-do za)BXvD%Jq{M>A(*`CU@4~* zIA5rQhgwyCPq?)J&A3NP3+r%N44+T`nP-RdD?bK~;hj1WV9V3Rpp8s8v z3_98a@JNkIT|rofOa4HwflcLAa< z2{QHIi7?T&wYL5Qamf5m#XEGoZ1y8!;(>$%NGe2j&3B9KzfplI%S3 zO5*a>n+hQP(0ZmroZ^Jf)z8z&RV)cAVeq*Q7~+*5(Igd^-JPyaxP7p*Vm|Me9ESy) za+KA=fjrcsTLe)2;Uv!ap$eCrXWSt|NlEFU{`c!haJG3aR)>HfEiG*k7^`0BA-jn9 z=dt{8x7o7xS4E@Cw0_s{=u~Cq3r7y=e*Y z9JNPUj@@b=vn1rwo@Ra4Badj90b^8+Wwk%^a=cY{u>(QOmjR_hxX&A@q(n){G|&vn zo{APf<<;-E&g?gC!sBw_U*eET8I@P@jK9RyAND)8?PLEp&#nx;`H&#{mbrPsIHpo} zhV{)l6#do@I{{vJzSgh+sDgNT7Hq&;KG0Bw$L@aj!EdCIcmJjBsPLf^eu*qBEHiD` zM@pN%dQ<)G9i>5&g+^(r!%f?4WJBpYKO8uc>`E{LBHIKQdZ(e`#UXN!J-x$5Qkd6s zqluO*DBj_%3XqLR{7B7dx(#xys4%?i?Jltcod-EOM|L=m6sTvNpT8XbLuF>7LT&y~ zhpf1grQrrWXOg1Ur~1>kMTh$|r{$Y%KG=j?KSgm(L3Wf+KOc)&VX0c6MuOOMFXr3b zj@$I2{x=-?VO}5M8S-S?Ym>U?X$Th3+w`vxXPFIV<5{>L%iY1(5LUd+ z-$ySWQGMlJHn%LDg3k!qLMzFo{Vqc?t6O{fC+@!sK1nM~qKXr7Z)|LAnEh;UT?DpT zot++pS`CH2B_+Y)KN0H09aXhs)KlX&K~=}wawOv_pogwl zJ%f}16)6(IL5gd`p9=Wk@0RzUYV@-2-OE1#QZUD1!|2LeK!+d(#ciPR){kP}wVlV) zN=hESBews-g82#sjF>V&5+LUYQPVo$pk-*5TR|z`^4%b?Y%L$fuo#Wxlj-XmaIAk6 z8fM8#LV7I!i7_#~S&oIb^r{P2nC0;cRAC(ZKze+r2!$I_BAa0oDg2yLi$-X z$$mic^1a@uKiOtQzNs9lJoavK(VW5JpduB-4j|4AUaQ3t3L&07K>(px+6RA=`&yWndB5R33R5$ z^VHzvVV+Hq)tpNah7c1n;bW!>*Yi$>Wc5HH$1Rn}X&l1$=3|L*H#zAI2zLTV&Lgnl zVZ%@sBp=$0PL&yDBa2hy1 z71J_M2~9+rQ-v!6$fFjt2Z}Mmp@k@`jP~P;}V?9as=)?X6vurxD3KG z3CdW?8=F5MDqXBGkIPoG z*s!2DRTu`o(NN-%finxdOj<5G^ANq9{m&P% zRXOG9yD{};AS6wZ2n7gQZ5q%^pgx@*WstipP!T;)`l=1NONj!V+A|$QU68&jpfa|> z4$hW|X5prVIAoyop6a45hm@vJ1P7d5w&3ZJGT1zIVAj)J)bMXDEjgmmA<`@r!k4Rw zRA0x1x2ZDK^97H6s1#Ht&gm<4o@QC`a1K7$SxNy)fy(0b$Rr+_gcCZbqN9fHnP@U> z^V%O^Cy;=4K!DntarcoQ2?KJyLmxvI)r-4&nRRm(SdrNVgPpx$z?016kLd|AZadTS-gAIUPkwD<_LX`Rv$RXv)?Fq;zlr0^B zkYI%Eo!5Qd*fv+?X+r@DYKLu?)aV@@JYk`msaFRBmBKfO2G+7#q9P+_U8b?K9-P!l zpi|S_7fJR4G|({aJ)^E<2x9^f9p+7C5VfkuO2zl}HW?EDKF}BL57+iMc4=ovK|v zW&I8mzgM|fk~24hMqCwMwhnHuHdK2v(6%jsF8a?zBRw1uTd}xKp-=t(w6vO*+HuG~oRfh3R@W)PZMWP|aV~ zz)}I=OL=G?@a8}n9r$YO>Mh1hw;ov~vgNDr;918xt{+lo<%H>?nF>F$%STnL>o|PHHIUEkg5D;!3H+TTo3Z=5k z5VhKUgKD(awfqo!`1wK*W4;35e<2T@1pFyQR39j$_hy0W zuVE{rN;N_V?Wq|k&=q9Xu7VTZleOV*y>UjJUe)#yOL`O5`bL0FW)c~#;j-&&KIALb z^5R4Mbsxdk%;tA)E-=C~e@-%lbX?V+<2CmLi0EMiFxg)qeb366Cn3GO!~d(bCv``) z)0Gee^|CwSnSkj$(-BA;wQ!3>C2u|kH6*vsdD}b1N5_o(X`Uewp!7Xs7vuQr07$Sh z+GMplcVFmP$?_fYN|cb!JPx4*(SHnzdSvmA>LuQwj{by^VIC<|4!w!?>rbWJO&0YF z-9vOEL(auJ>3{fcQ{DS=RO^pUeI~K=;s4Np>GiQlcM&~$v7lF`^wq+xw8Pb$YY#&e zr%~>s-@D0$GTxu4Y?LZb2NX>>KO2L)Gkrz7~Qf#vwND}d&n|y zaKcw2=&46^TvNx8&IMo2C1Kc(wT?$TBkCo2;H1X>yIm65Mf$;1)B8}7awrzjc_uGy zqKFb(r{>)4q>I*iu`3iJxu+cOzxv^iMAnceieYXbnSM$|J1Q1wX(0V|8+Yf4UoUiZ_#g1^jtnGjm9XZ1lH|$Tzamj8b zi9Gwtko{7ah@oooEMHOz2`$h}(0LYWEFolre2*eehesVL=R^MUK`0q~uclYrSLA|;g} z!nf;6P8f-w9+i+_EJ~`shQ;`RF*T+L+=L(NmIw0Srm>$%qT3*y%?9CUKIZT~Kw>O^ zvYk~niF6R`fwbfMhDlCOY()RJQV}_D2nVv1=}GZA6Ztg(+M)!gH9k~9V)a~{Ii$Np zzIm>9kAQ;nL^Ns=|Akb0%&Dm*GEYhC(KnWYOz(WYkCqf4k~! zV8HhtkN`@*A_m2S&!4uwM&~zIpXqy_JFbqY1H}#QN?7KKiJ|;s>8*&Ls$3*E2&Fr4 z0-QT+LO^j?3aT=!a(;K<6$_~uFa&oAp1K_aHBQ;PDZT7^4PATRHcP?LZJ&VHoUM5} z($aca(q#&(Isq32`x2Q-#>>tq`f7^mGz7{-lvb1iIhl;hRt$J5Y7Zx zPK>vUk800lzCIPpP1G}i^od`2(~0{8 z=ISW|N}<%GhdMhjO!N<<%gfxWdm%eGGQESBJ2br6!avfkNJYGu(ef`pSLy2A!@C7| z^|o!;qtAMm6ME>S+lKO1I-^bcMyn&W;gOY8a;7{?$QzTjJa}6jy}N}2sX*8Lw`^M| zhC@#g(3@J^0!E|^apOGIRB?5nNcYw!F-OUATr zH?>cq3nxjYQoE`u#?s*+^tvBqN1B%1%dW^udSQ%E+}IJ1EC{QtA%x{z# zs~8n_|AHfb8LB>T-Ty)|KcUYMm_6u>b5_z1dTnq8wd>(b?w`&De7V2A1)D?ch41q+ z_d}=Z8h(*ypqi+}xd1)Rhv;!pWTIPq1tnp7%zonhzFb`=oNJ_KAPvu@qkHszgn#GFsl zWTI67^b0(+RHOH0#QZX6>1H2uKK)wSyRq32ys+>Z)kV%esFb*Z+$Rsv6o%(ZkAlJ) zNMj7D7)PdMu>?S-eK0S0nnfk*2d+$>PbAM?K|k$XT^!YVHo=b8Gw45P;%VlGdR>@@ zGULkB)CEXh9!gkEqjZRj@_gYi-GKkfR!H&&X+T=2z=0&6^Qwb!SaioaKuHfrDXpg( zURNFOjE)ogB!gVX6!3Y{mi0q<~~MO{E^op6e-}41HC=bpQ!~6@Z1l z0;`UT9q<;Az$Sa^)A^TuDnYfKg(LE;ND5r>G9ZguT5A7LYyhyyP<9mwNMz8KQFZ_* zX{vP@cx+TYSvfD8cHn6^#hWhXAy6rtCboG6Hh40qGrK?paD^7<0Vrme9>vFN>% zkFH)=1yETqG_R~19GcrpCqG=|)EvOjmY_Tc#5Y-xyxG*$6vUD5K_#1h0b0}d)rX6R zw%{8Fc5tO|SncV~++KHU?zyd_W$21pFR z(=|y@-gT+;-x}4*nzy->obva4hb~OiR)e554{VRh#5b3ydO@D0g^SmuqkdczNP%>uNBq2QEmK*XLt`oYM#5h) z&iZ{3Y9CrcthC&9OcA3;hX#{{*uK=kk_b{sWA1HM>+U5(`ZM|w273||hV{s7_=%@i zL_`#y(a_K!jwi0qbwZ49D$&_o>ucD)^2BHM1NQPJ6~0}6OShzJZz}1blwwc*CNBoV z8w<)39gWzRU%J_dM2uLHgdD@LePT2hN-ib}n5Gbp0Ri3XyQ(KKLh~j{NQzvnt8DgI zQ2|kHmD!(Tit6er2(NuSr)YtpO96DPM$DH5F|nu0#5ZZri)o;DVFpp%D9x+l z-Zx_(Kuv|`>EYzR`kB}N?t3l*>5t3-?~sq#st)SRRYBr|9f)@`CIZBD(9eHA{{IOXeC3J6x%CcZPzmJ$C~ovaFa(H|;JyP&i{h*QdS`} z?il?)&7Ao^)O-8KC8gQUp}DUQ_CY8z1Q=Hlse z7oWUDjdd!7+|=@)0W@)WFGJ5+WnJu2?~}vPUHAz5xTVDTFPffxwlEzoRxKUHX5KSk zoj$afO2avUzDz*+D7wXdkVwl4ALx*$VLEIDvXy)1#!fmiUC(w)o_o<)HMKiOOCcI_ zFi)@E>Z#q>6$9jW0>7Jk5(#bV%~~F#EdurY20(s0n}$1vRF{hR0U3yQ;aEB3yLFkN zcJ|yI%ncUVqjk#c#EGULI@O1C2*!6Z>Kmc_Hv<{Ih$d$Co3v^h8pi#ITW*E0D1#^W z9-UeySRH{8nCb>O=|Vqs7R2K2jvJUij7<=fzYGh&yf0?(sj!e10!9P`6nLOtw?*$V zR|m=0W*^iSnII)2kd9J1lyci5-9*9P&kHy8DlWOf;t(wvjZX_U*M=Bb+fg5hgcs2` zfn;YMn&0oO`1ZmhO@$?NSJ}Q841sQbEsYjJpQOzFrlB(E8H}T{;aSy&+6?R`Ynr!P zCF`&7*Wi~Z^8e6!VnBj4+gm<;KYJh@DhH7eeBAj0FIqzf-os7h5Q|;b#WE>?+Ve9^ z9}0Lvr}moPoCO}k8K8uMvq;P|2LQl#ai#;>oU`MZtp!(?uKaN(r%JC9ue~2CZ=DTO zFm8Sw2=Fn?6N`599Qh~X^>Er%N2q6!o6Ak(2($ypzu&`f;I(j5Xf7FAeF271J5CqW z(D7%`+y*y9!0~(sgpyh-jZr>!xey&-z!14Mg5C01ZAmeM}cbc1$ zR6-L2X9=Z>1f-iyPLUlCJjG6_(o7K1S!ijY9IYNi__;9OEA@3P|Fu$E@Z(&NxbAK_ zcowzL*_*L7jR0qIrTWN%in!4hZUa3t7R1HBpbX#MJe(wN&TtfD0PQk_K*S)MqICoo zhTQotMhOq5*~Wk3#dUk8JXFqs0P7ZJ3=lz6LUm)wM4il7<)e&AHA^Eh&F5+9REy5o zEJ9x)DCK+~!`uQo37ylC7(ak#Ol@KuLvJZA@K3h}DTvytoVj;(!O*jO<^eG~3zC(_ z*PV(XV8#)UlVt|lfdNvDbw2z-HW)_qK}-C8z`F};QX_mIrz#s}R4A82+SV(GcvqYs zn+KG?(|`sQ*1GzoSvNSO8)pU9vbsu{~cdN!O!5c2Ztr32LGE)Tl^RX*lL9oU2yQQBUqPUvRg`jE>FHh7`Dirs! zYDt2M=7$|K|B1uxm|H+la#k{}Lo=!+Oql=R9<$NB18Lx(!VM~8V-ej-X?YAE-F9lj z7AAyKxyCwaMOo1I`%Hc!RpC7l^>^vtWAA=^YxY%d^&EZ0kqyu6_utLA(^Eq zl^1S6mQ>FqM(-OtwaC$C!C|Q+)ZK%_ZYr6c|Ukzy#|1hkJ)W@8D}G*JPt2 zBN-Xyk5_+U|A?b7GiyA?eDhy0LMk+J%iqpAWe@#1l(iYbFDGw?&3_RhS>C7OSuRez zDxpYp1H%BEc-re3CyH5dbtIMH^6`@Be3BSu*k;>^kD7r-uHJ=FpIvmHv|B?}Nq*CV z?sm8uHtWdDz{Fu^zL`CO1lP2CmTt?zIol3NSr+78K7wyiSUX3^WFFgCL1MbA=QEEw zmA~zc*Ba%TUO0X-dZ^L@L#p51I9I6@B>K*BtFcEGy`+dN4gib~+~2u5aj~#ZjSiQ) z*wrXB$Luf3{-|B$p(`_QzI^BAY7dTnkN+RWbtL~86n6FIQfr^Qx?LX@mra2jQ zlBn!BpQpTQP14ygwWono-{jT#+F!#yvg0=MRT4-@xE@u0lS5h4x^YJ4VQRs@VtseC zWU+?>-z#TT7SlaD337q;TZ_HJUn*6&_7t>#)DPQqzHK%wxh!%o)IhzS+@e?GhBRv8 zs-Joc1|xJ2$6_Egn6pksyW~UVNXl_dTW_|wS*FDY?oB_B5udyB;rjmjYt2Xem(T@~7X zor3!uo1&jx!hPIR^ldi|i~G>NLlr0>8hs*){_at;v3rdAl_%@*$s4Rsi{Skt>s;Lo zuCI?>J!pd4rleFm-W;>rX^!y(T!g~#?<$Im!pClWHyCk3(WaODo!y$-NE~|}#v*J` zgrp*|g)RC+{8WVq5@6qBdI6sOy*Wv&S1wt>HFcuSo%()aG*W{a@1Bl&2{*Oi_(^rj zXg~(Z>0Od@=IzUeaFi!?9U?6Za%eGCt482A7(ZV$h@~dpu=>*>v*mr;j=njr&f61C zWYHA7mQy5V8__>qjg#lKMzI|91K7UcTm_#Vl)4PKJBt$gzZP0Hvbcwvn8Q2NMt6+d zB6qkto7o)H*zV=}PJiaTGH?&u+ui%WxSDY0aE4)-9yt#r<`*Eh$mMnFP1hTmd6`{^ zcXYYP_|S@JVIOH14x`U^OAxGUPqubW9KV&P;NVQt^0e#J<&-VY0pJ@zy_x`rNdMXD z>Qj2zRq;nEvPaBjZgQ?X+KC&juS}sWon1QNM0o0+-Xh1=X9O!mU0wgaW)QnpH7RhG zmf)ZxYYQj8raY?3M=%tk`rp1i!9Jo!)7Iqy=IjTl6C`6_>No1r3FqdO)v4KbI1UKS zkEMk0UT||Cc>edBx*7SlBMuJ_Xu<;#Xiy-}kHDpQ8k!9YI6#PdC+`;2;hoS)7*I>A+G-Jwq;ih%rBp&2P%I$n_3BWhpGsG+N zpGqK&2~Bmz`pSD|6bs$KyH70fHHC`tg{nLjnPP#GMz|$Yn9769tLMB{xF`oMif1m< zaROdv-QHF7imt?-T%&aaDPR$fvstM!HURN3`60A6E7tx0Uw~y;9ZQA zVZG#~x#Yl;fuytRh#Q3gWen|15m1f8y`_bKA@yIpP!eZT2A50cwQ*#*g_d%>C8RKH z>y?DP)+8J&V>J?xv5?)xp9&@{}_CX`LjL zI|h^xN?7UgYFPIPx5OkjSXNx-4$zu3%n1lMxrDZRDNcJ6s>Bg!URzh!-8u#%0$(R_ zk8jILpL_?6r%zVOgdEo%$4Pc;G7xf5^X5V`-wVYAWylV$@8@n^*wPYdQN+fnUz~Q< zq0Yf8ONVja->*}T19u!ogA&+HdHX|MYOdbmw0X?lzxoo4w0~WtJ75Cnwu&{{l{dzA zhHSm*zDr+<^BTfw(><(Jq|i}t8|;GAJ-`*8OPy^<%(yrYP0w`IO0iC_*C8%xg1;Rj z3)Ehpz5c3lsa zc1Xk)c#W2ssQz5~gXK^S1>alHOJ>+w?>dVq zpjnJCU)*qerQB3CeZn@6(?t z>xV~}r7eB=I5GS<0ffnHE~pvtBEu}M5m|4Gq%2Z1iBcu3GJ_!K^DAfy4$7C++bv*! z`B+zv@E3Tvm&LD@A4U`ei%j!&kUckj_?L9VBDZQxL~~+v;Zdq%PCnLFJk_Zx@X@) z)zp*YQOZrR_cl3ufsBuyvO@EduTpF7u!=zE-CF_JUaASFJWJ|LXbUL=s9eM1J9Zm^;4-#~_ZeWB+ z`*D*?vMR;JICUN5XnJs+gOl}lI%JMRmQe3$!7hIDDXxiEBUuUJdcbPwG6%uIrhwYX z*^yKX@b(VMwVFN)akmmujBaN%2Z?NhE#jV}6BO9r zsawhV+EDeoGkuZAc~7M}oBzySPLWG@atY+U--|XiN5<7+Nq4hI$VR1H7YL zmwO0aP#jgH#b8CfcUHkaXl9}cqA*xV1n$`jbnrj6y^OXa3`TYj`bCjdq2GqVtkz^D zMAh63Hm9(Y6!tIMcMi2o1DhjF3SMlSejrmT@A@IeM7w#qcA2RnoN;3@?m#j`Ceb`S z!=J4Dw)lr`nny;IU0UBbFHZ#zpWMPTt>$vi^w}@4rTb{&y??b>;QHzWmq9zebM!_2pkHX=!cO^D{qxW_M0D z#(nsIUH|X$|GJ*mZ`~i)%8&3?<1h=)c&R)xl6`5VQ`%+lP~=~C0v1Lwl?K|xO)cc6 zcAbwG%~&*KPfS`^EyvOtv+XK)m}&m!%G8P{!xodwg%PJ>)ZV;GKDPRwUg>8zKi@># zuXd~%+}OlH{W~)vw81sM6%^_lYFaj{TM+9f!Aki?$`%uz#VhBi^1=T`j3av*T61=r z(1dYRoBZ+NCc#;*-SVj%`kTMAmiBB|EqX~>QbOoHLQ1`CCfC_2S?tZfb@(@fB6C`W z!k3?eg0wRmM-#miM(kE@;Gq52ljEIrwg`h}>((1yzZ31KM+}xLcjEq!o{k;;(D!)W z{LphLx>ApA?^bp|L+j5c82N}s9h#OwuMG~c`jI@c*n`vZY)%pPvMX;;m?*(uSc0$K zuH`P~Qd;)YD0IakH5OHSm1`4fNiW+DbxPKKTN3eq95xDMKi2NCN>;iWap~QA+D{D@ zCy2AucPirpI!i8KU#*vTZ*Iu$pVyO|w<}^TJmKMXw9c}QtURvlrh967ekjZ-(TNq> z`R%CkX+!ZYWnwX6Y8H6aFptc)(9>; z4d>NE!;SsIM&!<#rN5OB=_`i>$1sl`q?)y%F(Br>3~L8`wid(T1udyz+YB`ygoimS zxp$FVs3{xve)nhk9y|Ut_U`p`IceqHt-qB*oBV^-t);TA6YFPpV{x}I4{SPeN6TWk zynV^N&40mH4%&de{V~T1RoD{pRnMeoZm4!qW5H>@)_vw_=ezFNeRv(C`nYy^fF;p>ko1s%P~xge#p*7$DRMT{KGrGQsU05(h3tLN6R{D_3gM1Uuuy(ldG3z}31CUp4Hw&CQByVFr8@3&K*q^6k? z?JeA(eP-Xag42nA!3x{v-;Fo(vm^PCSihRTVPE0H_>l1G(57uuQa}r0#Puc$JGA?m z%@F$7ITe2>A)(|3)s;zedxP!IzZYxk{X&AN_LJOJ z6q(n(`lX3P*^4)NbbqX1Q&)GLglj~!P7;fkfRx8N?d6%b2tLst<4K6eNg(QJ_1UMF zjt2AZVaFn)5bu9jqnyAqHluFLP=itW_mulSANp12QyY@f7#v&}#roh40StyiEjN1& z7U|QyyU|^u(kZnXwl!$cz{=Taut&(%H&`&bDf@WXa%rm3ik24YPe25)7`|uZJQKob zHWN~L&8rvK#a55^36ytHhp=O;?=L8hZ6n!hvLq~uH$QNS4o>S|%y+-Eyu3{YZ?qeG zdNFT4Go2*;@gsBli4|=aWPWZ4L1q{y99yM3>&MdZD4G-nO2}#*hvm4}((|?+4Ym@@ zSnP;Oo9#=%xXW1rzwYCmN5Yyl3kIIVHGg&lj-k%%6=%;$gCNvlHvYN zqj1H$21drX(E2dGhV}-HFd^|G7BpGV&p$tb##Dx*^X;_+FYRAfLYSmjo=<`Q&)NA! zuhMtcB~XNi{x!5{_lIPi>PGtPZ~nWXjt(oh^uLc&v(PS6=1j+~P8)cTU*EKvr|-t! zy#Q-&m)D_G?Mk6}@^`UCwq<2w>Ey;pj4}W2B`hJu`^q++ejER+cXQAp((!7hL3?Pa zf_VkjvEqMy4b2h#{XyA}|NZ+V{vqAnK*fxt|8Bm=*W8#B%_#lvdG;L15(A{0*#Fbz zxGc0h>o7r4m%n?`clJZ6Xh@!oQl$RBr+l%VXnHMC{m+m3$*E+hA>jY#Eu}o_A!*T! zIsYEBtwo8P(G1^5M%nyp#4TPHp?x8w`QIfnvZlwU|BeZ)xm8|AzbsEsRPnEO_MLsf zPzYUdwQ<4Nn~nB~847#v{hRqa-LEC2@Mx87!3|jYwXrJ|7dC3OuRn$a1Tb}1k%lrC zGb9JC?p9bFNP)Xy0!9-UOd0g8Jq}C{rrN2liLCr&m(^cC90{|LR4+B~bhgxJ)||`| zZqUh{smhTZh+CWbYO$u?>*EMJwsx+2grv-y!O|7+9^~KyZIp)p9sDs<37K;^Ne9%5}!;7|d^=(A;#|99QR=cFWwV zUZy(VA2sAmB`GDHHf?!J?Q^E=yf&;n|Lr}uX&6%Bx`5qamMs7ALNqB6QMz5@xyD45 zUElA+J`H=_moGD@ypLX7zx7DQEZLc?S)Y-;wdbZ~td$d3B^wJSox?tUR>RLCuNu7& z@Uq4Mzaw?dyS*9-WRA$;U zh)%Be9ATe0Vb`d?yVNr@_({$N-N0ze&~z&?Pc>&8XL4!O&}W1xCrOOv_C}!VVSS35 zUjA4&StJP_&ox3njkRE|gq1)hmh#JmGUwCJB`0ok%!T8T`R93w-18V3&bVc_*68!wB%zWIq$w=moMRBtA!LbWvaoc7ZVv zS%E)!+IQw6lJAzBeaWH3CghM=lWL&K%@SMA13*uS+s;cfXX-DB@Wfo>?;m>e9k)}2 zFV9p@4>so;mQZ>Ud0eT;iL$^6!f+&Byaje%E}(#8NBqi`}8zMW#?C$4Z5xRr>CS_X3Y;1mh0+(-68bI z*NomB=5WoJ{!IP&Xmil-wANg!P7wW>y}a&G0M9rHu)lg*i=MQGv3YlY`$2WYH|9+Gb56(nY(>MYUz8Xto03+K)~kyw&210ns}j~HAvf;3e(&B>?!a6o)@1 zzUT%|Zg@*eOL&PSBY$=<|Kv`Bx14O5AqovoxR2ozhxL5fgLT;GSaj$1zQC2$_pJ?x zQwEcTKhr5Q!E;t*XHX+qXrwrhY)Dl}jN&`lvDV-+tYL6(qX%VFR?+zQ^xtjz+Zkma zFJDYl){ocjYrbzts|(3y9S9|N9VB7d+$Z)lz*>y^OHEzpcng^(p5AKaMvfZAax% zJ#R4Wb6^%}3cJbCGKQS2R#g%@rhh>+t1%Iu_>l0*;?KUa8Lr72qwfD@IG=<=$e5kD zvW6(u09&ZStdFXN4kpTaWtM@f?%3O!(pAq_8(100v}t?NT{_7seNRT8f!WK0TDNCB ztLVkr6Y&trFET9Bm7mq^@^q_;=;-K@NV8@iGThPmVxKN}stJr`2q{Z;ilFD(TLK|_ zRC+dkC&RA5ha^MJezlnhczcVI@VT1fa&HAG+WV26!S0g5p1v_uhqsWUZ+Z)v8pmEf z=}`mE!b0QsksVLgMi4nmJ&6cyF0NMMNnx^SVPEs4b-jUq=S<-5- z6DxkmU54g8CZpS|(V0OT@5fx&$`d zVR?Y_K9W(vPVYwgZByCn7;Gcd5!{u|c6o-44P2t7$H~q5y}a{y=i99W2OBf?9g~Oh zBF0-0Q#H=J-ZCHGi~Lx}3ii86t1QBPAD|vzOy`ZC$~mdtH6K2FaGHP5!!P!#G_4njuRC%e76jT9Tb&mUR;{5+2#j>of$ zADD>F0e-Kd(rvUd%V)reZc=dK5)f$W=p+d4vZ!Re!>1C+%~nWUYr$p1>x^V%UF4~^ zUqrukv}j8CZYv|$M^TfSfDKPdW}fjPDNU*>QT^lAbJUFO>|19e zYD$ZKs%fR%}q8WZ$8O zP)Ee7?$(uWj(>j9`eGuso`^s12h$qIwoRMe`%xpCI{pqk`=|$7R@yd+t`nfW()%M+ zG;CMLMxawZx7Kb(XqoqBYdYCoP17;KMe9@53cejP1&T3U1-WrHSR_k(eX&Ui`tiF* zG+9?D&MgxA?T6@Sg6k}}`MtC-*fU0~VBgpMN4u0B<~vlL2gR6P+>X~_zI8ekmZWop zFc@5ti%;JG+6eiV$i=eyg2^lRc6D<8jJ3m+YrcF zo2sqK$jk(8-*LjGYIQXywbIP~E(ziJ*=}FW!MK$Tx@Zmn&LXx%#ML*%_3Kz2MT`UE zDfy&{CX3}cELtd(^YisR%)bk%vnqe(<8k(XOqDvv4P3!s7h7WiqNt|R-4X53{o;6; z+x@rkdkU^^8ncqEK?I|~GG$3qxqsD|Wnj@PauVCUpZZ#bg98m)G&mS>%`dX!lYCm! zGje37<%hLyQKGuL@~bWcM>|J&Y&Cm>a{K+_1bN~?_%-`KboUqI3@!VpgvuG^vunH1 z#LZH@Dy1T*3Rj165HH(84w&n5C4z}hj^-ow2c)U_TH(`f^VbUv8>bB6$-v0V%mHNV0U{?2k8bw%) zms^b2xtA4Ye12p*`EzwUW0(F&V7Hqq;gQ7$@AG|4UC|dDeYdA-T}N99gg3e=185%C z)ea+H<(YEnihu~9TI<{GsKqDv{Eq3{7-)>V6yg}v5f`d)0mY-`oykeIQE~{a(uCjrjwm^>g3=L%Dezer}I0n{R9x6+v*2z^aoFMV3LxKJt45IyA!*;ZC_zE z+M7bV0&F-MZB(d<6X)5SC&^&{A%j0YM%rxru?dwOSzcFcJ?-Wgt@CN4cx#Av)Yt)~f zfS7U^&iAg=`1jMslho8c zg&dEnae6v7c#MiJ-w{C>`|>njMd@UlV-@+S^4+tgZgrDDx&%co>N1|?0==7B+J$sH zdlA?2%LDICf{y*hrHztftxGF+*^nD;-KkCHp)$4WRiG3>kvUWMSf*W_^ zN3s>2Ex>%v|MuQv@t^7G@8I!{fpi$L+I+q8I2Q}0g1x(GW20=O*`>SFEPq>^$xFRDT7ssf4$SS;)A-eae?DT1l zQ-$HeZoBK?=zJFI`q?t6Vyt35Lkzzxv;OoJi%i?yvr!ad);j+i>Wa*&17xKx3%j!j z*3f*ZWAnE5cCJ_4up2OjqCm6wIa99or#!-DxE-uwbmU#}clL8f9Ep9Re;jS0t;Zg} zrR6HwGFW0pEiH7*QtLd#s8DmyGcHH=SZe!pkm$=Y>$X)z>`+s8t?^pK*y+~p&77uT zC&Cu=jG26%8*e$P-GSdj3x}`^WV`%ehy2O$gMx#dHeIHf`_qgngDK^wMc>R9L zG-t;2DvD&LbtoZ6$`?+J5niaiz!6NcC4Gk(RNSk6ky-m9K@j+U#X;FG4Dej@` zPE6qg^^h3LM^WQWaYc6+uAfNM%#sO4X-!@VXf>{+t1rYN!L1gS1U zAL^c!s&a}B^an~-q%Y<5@&SxSn;rUY5qV_}@e6Iq;_@S&mJhbpCY07tz>J4TdhQb7 zhIGdg5rUS4%}A@ijbwd+4+{J6SA??M=`Zbd>H&RPAQz*H<0Mf_9O=#{n?MA$^lFTJ zkW{JzP0U7i1Gj_qP9XQG;AQ?BtJt65dJ(dNtfw(Xo7f<1=~!&Rr`kp)U!uYsLfe%i z_^aXNj%9-2V04H%(6#oU`U67^dgel-5)o&(S+MmIIvW>U(YKX!Yx`1;;f@S~2jSh0 zgeFuT7!laJ^=f=>{V8Dg(+C5HGECBl+$mmDVGxZYm37i^=2%ubS+f_`(D>cZo+xSg zKVC8D)CB)sH(}Y`Wk#rjk?i6_&3jrQvk`VyF?VW`-XEo=!;rf#l5d3W7z+@qwFoGM`la47pT5W8H^7pBFzzwbv*#ut(FQm{8W0CwTOj?*xou}>NqG8-{3Fe# z%Xt9)`V+Q*i~rGHu)o9;?7wsqGXIVhL8RtihN~%2gDr|Ka|8Q#$X~V)_V*Lmzn1^Y zh;0{PEz#rL_}k*Fet|6+`@d#9HQFbxp#ioC>M6*d{LR4q*Ny+*+?ks)p4<#32JjOxB3p|Hlk8Wiq#y)@Z~2^~5eD?865VaE|`>R5fM3e7T8&`Y*BN7ENJm zS`dDSjJp57=aNdJEbn7!bIM#OiYyy<<*YMYlCuZf?GDeVkD}%PsjexOQA6H@*L@t zublZ!`9&0VP%r=bgJckRS^}Wk8Ov%_40}jSanI&1eJA3x6SXHE*vC3gTsEG;IZeu6 zA3KZ`8_sB;z}|2=tvtI=6A~7tR`Rk0Z)#LdaSOi!!4 z?^>f&i$W11*w}~Dp2Zm%8RZ}V-<+%-!d@mJK69*#Z(6y$Kwe^j@X&-s77_Q8WP$9@ zoHk+m$`cy%2Zx=X9$L*bc=eX7KH#J!p4A~zK7hFc)DE?3A5W8OK9F(H%|=J(_mJ+3 z;iA@M3Tf|e|38OfmbWyqBP|pwr4%}3Jb(9Mknt8n26$7YjHzpOnFvH`Zh*)eDb(d@ z`}&pf!Go|u!m1yIy6Z)?TZ5%0T^n|oZ}z4=k$IZM2KoB6F0sNsm3|Yq9+{^#c%51v zY>XXLUE`T(@Tv{OqsVaV6CBm1e1MqABY(VmX&dk3qpg3~qETurYeun(N&Wg+;$s_! z3n5@3D5fMZ^d+{FJ{o)aPCmzeO`r=nmXp2J`GQCN#fHM5JDQ*5;wm+j`=JmNpv9G{ z8SkO>;>M!Wty-lB!GrkvkUAMfMUBggb5d&R;wQ*DRfsoj3nAT9zY*wjaonzre^|Yo zq8j&5e-DJOjQsrL1_6n$PgZkkRHMnf};TemH}C@Seb}rSAI$X|EQB@F-TWK<8`b$t+nCeb*`HTaT^d z3tL#b6U}x_H^QH6*{5hl@hm4fh6BE$xN6#?>-YxMR*CzrslNMSOuk-q>9qH$jc$PM z1O1v|?4aq_y9znD1Y0lpcWPXbMQja6EvpYv2?e_6i>vJ}LB!A-q;F8+vZ=GoH|<2? z9(BxKuU%$pInz+@vA6O9fo0i6{*=owZtK9NgH((zf-@DzZmLFIHCw)f^vnBI#bX2VCx1X#?x{wq5u5yYCg&S#@36#rUZNQ{xs1_ z)G9b2T_AqBP^-ibpN&RF;Cye$V{bq@nYO{{guEzB(Px)`P~e;Qb~C1;G^^jwHMiBm z=E1wEKT#b*B0DlWV_0(fgfI2Xl3oQCHofl^zI?r``l}Y%Frg8tO0H-B=3)JwN)8L| zmWkNA_qTc0-t$aT0x- z&?_O4H=gmM%*72S`6M^t+xVi^Zmz3EB`RY#bww1}UsYh9gC*;|`69(_vRFA&DkLsF>K za#}Hn$Zzto25%QYrv!kna1wG33kfMD{i0r|Q;{@7?qD`rq_0S$Q}5xd`$l)9KznFa z?~P}HL4Cq$xODt!1ibr}Zxwu`sXM(VH8EqMu$v3v7hx7^qYWxsy{@|*!9g~O#0NdPWl{qp-fkL9@?^Mmwtsu5O4jc zw9#eN`rMR4%P1N9lHyF@kL~pp&;lo^j7RQU>l9$-3qY>KGcZjJ81S#=;gf%|W4;3H zp=ckO)jLy~d%E?!mJS1G$S4+TRkHzMd*iQ7$HI>>`UE)`u$Wi@4{cO5NpW#iwX~S_ z6JkvfkoAErJVV13SOiW0XH27>V+)s(QAbTOCZ8bHvsDwtPcjK(gagH#Ojn}ZvTC)M zCzd1(wLPX%Bb8u1?{P&Y=?kQATSg~BcKOB0Yt}<*V9n5mWR2-de%pc=Gu^(>U9z}G zkfx$m*Oez4zuQZ;uef}auw2Y8Z<*QB@p!RDV93Qq-{PER7Q$%D6d8m}YpWKU9`!Q!Vw6ah;Ht-z+zNURpG@jl>98z2hIv&+lR=`N|4IYso5-ex2sr zU5H>9D@M_K?;h+B07h%Mc;vd5Xg9O=%hOr9&$J=at^RlS>*ZU1x?t5Gy=X!6B-_wg zPazN<4uV&@%T=u+Uy(DfH95Se;855Tr>TY960n~Sk6M2eBJ)O%2`s#y>QC|bATEyG zL!_o%Gi~d3gx)6+=jtGVH5+8JlYTiKU27+j*--+w8da0?t3?ir(CfCPDecMGY82kRFI3#0kaMTs>)6 zTbanYsC(9Rc5l{ytNzeH0nRB2oYN2PQ9Y9K7XxR~TSL+lA!`L3Gb=tea^q`_EeOM6 z9;)?R&H>MgjVgLwblAcOIvWEE-?7^S+WzM%bUlPM9!Tj0g9$RbFjhF1W**-$o$@F} z)=hG+O_k*C^|=Xlq5TlGTj@{l6=GtN1qm)A^FT=pi*d7q5zCHAbl(j|-O2)p=>Uuf z`YWwRnk3UaN`%QyyFD@1o8~cFNtrf@achMsF*fJ`GK{y{mrc^pi_yvsm7BG%Q%mNx zPmLmyR9SM?ky~>J_BYOq>{AjDZ%lXhZiUa~MI>&hi_MwnW$lW0k4m`*LEYFirtb#F zlmrnG(Nnoy%r#MRvh$0WC7Zp?31^i!dmn57qbIcH9*kazY6Mf>XDdc_(&B%(@a>bSCIy!3eQDE8^{O2zx0y%odI{Tcqs4dqPfh#!zw0;#hx98NBh zZK2bRvV#r7Z1D`S035}tfx@ck{Kc*~g!lQ$L4I8PNRN)?Fvk=9uGO=W#+9zyRuhg$ z&Iq~WC$2x5-dwXmKkhl}CV!x1&&bHx(%PE53k=~C(T&3yALL}O<1dUn#V+NiE1b%! zL#IDqZgV!Wkwhjg!#J1KfQ!OFXqlkI^Pzq}O_urHyCmzN@HY3|oC> zrKtsOi}7ZPe`SM1IP>&l&6uqtgLOl5GlcgpvLOF}?IM#|TW|N)F1;}W9Poxkg|jkC z3R|ELn{Y!YeE`_e{f)7q)yQpc8Dk9|E6=0IQU#wCL_njJr%t)z?VXqgug~x6CfQ$5 z#XW2|dYSy{8%3qxnQ0ADqd+VD8YceFkkr*)7M=3k@hUsyBw$)5fl6W<$QqC|^f*Ke z^g8ttYdkGvkv0tUepTIYuKV?Bc`66pp_N&}KC$w=?q{s|t|vJMEOl#uBUD88r@s|! zjRO9&XYbv+cjAq^fI%|z*&or&xzE6m4JhU*KEsCB)#o6E`B8}d$Jta(mQs04YgVsP z<50E1z4LISO;2Xs<(CCPV4WSes3~-fjg39j)YMKQX~hStY^T;X+fzsG4(h@iN45J- zQ#kxm-MecqFHQl|!-f;M+#IZb;ibs8ME0craP8ZKn->+`QbTfz(445JUlL%RZq&u} ztykE2oo;h#Kge61>5PvJ8IItN!Y+6_evLq2)`>r!mJ_gqf*<4KbH7L5ei_}X2?+@qOcQ-u4zPe(d^UV?d`NMt0QaTW>9L{t zx1AJ>9|GwI0~I5tP2|6~Vb(DFnE8iqs7VTc9k}=+;3GYeEdCOV_OFT+BDIf%4yNr& zwN!>0+X!qHYtc!xFu8UaM$d}gN8$$g3V0mN1trtMMal6g2gTy_^d$MW0}MQSr~^&z zZMBVZ`>4=Zb(QmT-TbrIj!CQqy1a7Zm04W2D16HCr;UeSP z<@`kZ!SE|iy1YL&2}xs6EWkBmDBjO5=al#zRs8;)6ZO7>l{qJQ%5nY*<(R>oHHuxT zsxHR!(Fw=$Oy5F-dVcfPbn(vpK~KZ$8bcXf`|`C8`GeUx7=pVs20mV2wpIucx5yi^ z7bO!dw>9nZS-KWL7tlZ&1?O2pw!)cKUPI>3lzQj7u#N}UrxBytoE!tf^Qok&Bl@v}9u=jXsyN_(7c5cDwPvs=lp{SS2!X z?l``0xMY}e8uHmc$#CMXJy2gBH?om=2gZ#GycN3H`fZObaS|f+fws6i!gQRS`)i-d z#N&i-_^c0QFGChiAsE7H3wzX#k>yFv`#!Ea@x>>iUk4JjueKdY8sclvrrq)jo z@9!QZj+AHBLqR<%$Q7gKOco}T&D1p+7L%89l`r*g9$I-&3o$`@+bibeD%k%g@DbBb zUA>^K2X+b7H&WuC`1D`6OGxal;^b8BvNdVZH*30dXzXp+kqi?3Pfmx`%9yDpt=q#X z&vacWQdsKVo&vFzJubjomgD7lAvc&Z?#ade#F?}l$dI%g`1Q5xeEug$edV=_h#028D#5Trg=m`ro-l`n8smUtX2F*k594rk+yYJ~bdF@I<%efCAdjk6S-p z9yVTDfE3;V4$e@e&BPwa8S_WjEvI-E8F(L?c%u7i#yrp-bU#1r;h6#Ju?C=g<|zel z_*Jw_z&Y3NbvTs+)*;VwB)>PXbm)es0??22LAH5^9Yc#|(0FE47DHH)kf_R%QUFjjyhXC&3^_vk;*Wk{R?rb}X4IlQUX81yr48?U7KmUEAbtESYj&#-2xFndOT~*;4Bh<{D1y$4R#XAt(z;EzJHNjtfm?N=(#E-s zRP!gZm>+iV^sNVizk{zZg8fad$F6-Tf*@n0`NnzA*olY&#MO>eO{)wLy@R9q7UOzS z3}+8!jc*Rn`rSe#&Jl8TZvX(J$kPW!;?EH>f_weqioC`fGmSIHW!gm)Fnc<{(j0)4 zKTR|i14ADOsP1rD4l`~})sFJv6A+BrR81}2S-ww#0e{xvFHRx<+}Q6f3>KaP6h?r8 zgw2}A7@eOAKKK!(>Mvm*|9vu+RoArdEV>SU&qMfR<*x2`YIyBC&VB_n7%$P#`7Ltt z153yau$0;$ft6mJE^EJy>hqc5m_GHdl~{pvT@bYwH5QkMIM=QKhF?)dZKU>n+hq+g=%WD?6DG-JqqEM5;Rq3a5|3&ebRox0qw z6>dq zbC&$UkWCN3CAaKN;sXSU;1tlKHWgdrk!UUh<}_Rk_$B*Hu&bZUJqrXi3ucmvt=-9o zz+_OmP{LsT>_f6wtR*lNyiYY8fpYj+d}+e%J||*0tr;Bt8T3(vqvXQtX{k?yH7$LM z@(SQP-9(oZp@%ZSlgX~}b(6yZ*_3<4Q5Pn0%B_(JVr?m$LGZ2AzLEfTw zj10xSKoNT<05suC-Y*L#CLG~l6WiQ(^)56>bRg#gG(8CM?||d4EH6{;xUA@j0rPz_ zaCJFg5FpX2G!uZ;_;+}pgN3ob&kvTP>D7q!(o7kicjXnKs>Df4lnmx$)*ld96A&Bd zdmlb$`ls~}MhgO{d*H6BKz+8S`}1b}ms>EHF)mAz$!&-s*rvaF0=A^Y z*tI``+JEn;7qQ+e!Snv3aaGEI*44PnATZH{{Qq?y=i~!OCJ6d)H44QJ?Wr)J<^{O~ zpdSr}CNz>2kEiP~gdk>Rp-#fkuDH>E&w<94Lw|b63wFc5OMI;-0PQ~O_IGfR@2(c6 z=}KgiVjP(G=TW()sul#%nr2rz;6KfYRNlMy^V*%ODw;p2uH4qTq2TWI? zeys*D!b2cg4=t)$*P0uU4MOBHu+vF}POF1Kn_SeI1zO4=ba$x)x$|6kIOl;9{&hfI zs)P6>DOF$8vOnz&ge5?jHUW%8`;QuDD+p%P?0mZo;%GvdIw9$PElRd}ZY_@m65Xbf zFOTVUYMk*`BMv=BPAdZRsa6sUh)JQ2^haGd6GjX6C{Ul9#Y^L!-3I6 zx_O1CiOPJmDZ&nx=jkudE=#h3Jku$%G5L8r8Yj@Sm~p0(vl&c!J6}L7Wcu^9jvgm= zQWg#Q&G8E05tE$;B+2t6L&+4^Ye%7tTsJ$cs^nbr&bE4yOcw=)MqJ!S^av=!3;UPo zIT2A0v_6XfO@=eS14O<;01F5yPx^c=GEKT-`I-lShBli(`0N>wev}WX*rLKu_Scs^ zMU3NLm_Zt@qJ|U8>r?_-K!7_0bfD!P`vu%O6bvK0RM8?*qTKGcOe2yspfUgK@FX z^ou*X4S^C2H#m&66l4a07j;1t6{~YNqI03_eQ9 zrRDy5PuKe*zoM0ZTlnTLA&?4=4Vq$uzXTA+mI2~=u0Y6?L6izG=Uk)x5QPGO^@MIf zAjmoJw=P3M6f^I8T&tDX-H>eLeu|q|tt+y!3YZ7J7k^JOAur1HU;ug+<$q6>7)e7( z1EAs=u5;f_dZE?)MeVgBfIad?-@*m}SlH|4>f;sP?%u8i^1E?eV0kvKj1$dgRAOR~ zlTih_V0(=tPPw6C?J}vm(&0`urjZpa#dRvU`g5J%>;u7D7tToYLHs6W=J;7*W)DbpcP z)91>?Jxmbtsv)ta`TVf)%mJ|aN**BafaIs(H1`+)OH1+ZrT~d(28F>-aR&M125!x8 z@%Gn#L1zPLqSwrd=(w}Usw##0OFgyDQC z4d(~C%c_H0Q?*ZaNx>6@|4yGS?ZAxBWg#RU1+u7nG|bNzJ7b16#>y(3R#nbtF3(d7 z!M^!xM+tfF;|0s#J|xxDO9v)%Ej@^;RQ*O)eEdzI#qWXld;BQSuEc?fm~$mdTxlh- zl1Kt2Ox;hx$E(1}SCHNa1dzmXZ)E_=0o`-~PL$x!dN@x;t^oXcOX&5N6!#^H7(k9| zC~IvsoZ3oCO0EJDuM{l07&(b16zl(ZC7uB`5zuPCTpO=I6yAuHUAv_r{r1;}1p}zS zV=U;UF?q$r4(PgGj*E>JcJqE3Gh4+}!HI=X=r666@~Z=hSu_whS~R}m$l+1LW zix(=1lB(Fqm%TvTQp@=y#htLyxHLg_JxskNw~GK>mVsui);jI{L~^a#I*|A*POtS$ zk<%Nf!u^?dU*P}grek-cIgrNY>r~|LqIOdfKgwU6qZBc<;$wF7=aPLZEqg5|Tn$%O zIdwJRr%7NSFVi#J_j>T6y;ZNX(bqbATX|ZZ)(sa^6e@AjTn*E%r+L@7^j(8MJjB}w zvI1fh|4l|mx2I7H*5SL6CdtYtj6uxk3gceWe=32Agc}x=*Vm#S>34T!U{E>OThG@uvovQ)VJK`Id3LV)>XwuH()!kC^8q?g8gYUR!?NjyASIzzJ6)~DFs{aBsxAuke5kceI8N7n6b0BKzM6|D1Z;@{f%3egI3Vi`gSDJlC&A`HWP z4l7!zt3gV($rc=3jvPbWyMjH3ild$KGXlG#O4NKRED<|qRK_LGrUl^c3)9%)CP)RDN3W0U0luJdf>7fdBR}f0mkYoRSTEW$ z+^Jbguo?z(ZK2N?em`G{)6D}*IFKb9{mApc8t5n4Q$HqPE&@^`53CbpkyapAgW6tT zuUBEIejg10h|cuS=0n*Ey{C~tTWj@u;rlIqr(9J`P!)HR7*qhr+?5LJSJ%{E6c7RR zdYJQo)~kITzI<3{TRnb6gZ9_CS~l1QUSFAv&+pt7Yw6_|{nWOnTBtal#{ zVC{}AksV)<4X4A9-7Z}KMt+PLrxTRh6auuM2NowBC=;wn!E}CuYGodfz~D3;KO21- zK{R2%!Yd$f_Us*+n<5Y-mrnd(bSza|H;2he6K@@G1FMfTwZ( zmP^O}>({U03`tx_WqbnorQr%IO~{oQOM%&4hyYJ^BBC|_I$Vj#n*!Wtpu4iEhQKMf znA>)eH`!&}0#e}DhfK1k`r}gzO&)8f06B@GmN5e^pdYoNi1xRV6uSgDk)N1K#*OcE z&&HwWIJ4?ucpx8cEj zNz$OUB7lahgQ(^m;f;gr@oPykDPnY)AWrZA3}88^L1NXfQ3G&u5Qug`;C90k_f8i` zpg=fbCGfVby$1W~ZlAC-;4~&c_IB27g}#%oY`X)HN9%ZZIfR8PTP76wSLuOas?$a3N8Zc+c_nV%5 z2J!&2lyo357@^QG)p(OA=vfH?>HG9o2jeh4n$c6fYGku&X3O6KO=8QKAE^)&=kA4t ztg&nI8h7=$i4rA8YDbv&K{elEJClHgmbO`gh*;&rxhHCd_4lesMsZLhl1$EE+MCfQ zblMF^bkvD(Oi7x?$H2?^xVhaJqBtqVFTsL2?X;02KmybQ1V2gP>A+#tgJ`sO%>=~K z$ZkE7Zds?70PQG4@ev5`#&9M(@KPTY#|#Y)TB956ZhbsdJG<;0=lY`ThWHR7Q1Nk> z>ISXx1O{O8Iu0Wl%K(oGfief70nX?>IJpbJ?$4?n7L(w+JxBeZhH^la?dY-H^u}vW zGlrDMY)#{pHtSBf@L;T-GkH@^yCFf77EWMEd7X$&l=SqHfb{((D0C<(DFGyZKZp=b zS+aSdYIRux-p)9H^qubJ(OGI(QATC>78emF?v@d4D zD2hSR-w+=-z3K`Hk7R)@7y#*qq=!sHtiT%m#!QwNE3+J79?4a11*wVOdKtdK8Q|U+0y@iRdBkm=DNcI9|r1t>8-?97|5EX3r zvzdOF54?UmANZ$`@NgHudqagr2TKCA-F2d-Z6!cUaA&+2klRpbQ3e&K_7au~dLH~N z2KAQuZgT-p)&Uai$FLbr8;BaP12H$v{cedy7L9^_-~+7DwK@6_rUo4YnbH$Dlbv-% zl>APN#Q_55AiG|ZHW83tmswrdROk|>sL`r~u$Y?+074iZ$AZShl@FdaDDCr|kt;Gw z=xM7999{ki^{WD$sUh$lG=6OkL@vCa@h&g3YIYdOo-zJgfaOi?ym*IJ0liuHfTv8a z06Un_4UjUvNjC-DK7*hy`>KGnR7_?8a9h)oS1+_HtYv#%s(IHU3diPxBUdE49il1b zl)lCC;dSN)1O-u#yfW6f$<+>DkBW*qc#;W9RZ(CLzvhCdU6w9@WlAWd0eRGEQJDom z6M~l;ep(ko(l{oH86sTzVy1)UB%JXvL*4X0O?xvz>B&=`DW~W%ov(Kz1Tvu5ST5{f zeN-vV(7T#Tty})lRDm|vNRj@8_WLkj;Pvd-Ni?~xxWVkOMWoTobI+t_&mfwKW-mS% z@ivY2Ry$W7V%HOYo&P&oIIV5uTKq(S^9Z&r_AKw9s*A;F8k$WmWsY;3_rN%N*?Imx zhg^k4KiQ_-90xg7bjg{Q@kgHsk}DZd%2z-k5He!MJhraB$onj>D`lgefb?=MIWSTG z9aDi#H~Cs92-KRuOo?{Wid+HRUz2x%{1#`s?N25^^X!H z4CzMu4hiPUFj47j>np>??~=Y(TSeZ^+qg%BQx3V)g)G z;>-@tHd2GNv|VoBb(3ycf9tDn<4FOqN=$UgekF+7+ujl&F#7|MlutJ5Ye5Xw5zoF) z$e9g@I{7=0s=v^6R6ltnHCKuDC4s_L{dBq;Y2CnrKR z+j+S8WOhPYk|`sg5e+S7K_buk9{A<~EV<>oyk8_hKIPH>=>q}Fuo|OjpbV;Gz;Ob_ z-%3eoFF@2<`HR*R`wT=ovMx>oU-wqmjQZ-b!7&Djnm7_dkbiT<`BS}DzlKZ!JX0b- zC>AXCxLi?3Sxk0_PQ{3OtkD;P;|&v8KRZLTwH4ZI_~JKjCKm*zY7Dhhu(gDqo_-~SrD)ql=7xb(OsCZNOR@vx@DgjS zQ`0=Ha=phs;9nfQfc;nGE%&(`C~JuK&9xpYJ;1Y#`tTv+h*Zw+A^kXydGH76%?dNP zWbR%@cF4i=Lm))O(*BR66mbCw6mE#d#S+-9(*c=EyC4auEcN77M(P*Q{2_;r#C~bf z=0Iw+Hd$Q;1XuG;U2s}ciWgC<5BN9BhxUMz<6pKX7&>?=kOruWqe2maao z{AB+YFe;G97pRx`fY-a3fKBh~Yp$s?C+T(iK5x8s(6F=MNc_4wceP}8VZ+mra&nX^ z-3ov3r4oNs&-UpBEp+oBKl2Lgs{m=lS8Y>;vZ?X?aa*73SY(JenTiDP^%Pe;Ic)YN zyp@jYkq?mFIFZnbgfLsmhlL!6A4DkjSEj;)(M0K(M8^}E+rEyY{{4c9ZQroZ=KE_S zm8fVUq51q4&$FDKN4S(5=JynDYG^1cpL|pMWKg2=#0y!EGRh@4(?0xxF4G$259JPX zdxss$@3LXu=Ua!PderePU!W){#G=?`=6CH6$p% z=CNZH{?YVfGU3{c&exMN>aLH}k54n*?qa(F)+WYkf@A^h&;~T{MKyKxsgjcL#qUF@ z&?p@X+vT}MB#I^@Mf$r_C5^UEtZL3kru-D!${+ca)d4S;k_$Me{)U(c-%IhS9 z>IkSCFdE+YbWu?(Oj156V5X>KmC3qH2s zlfWB(T2LD7D&xX4QDPKSRwr0@pPygn)OD-O%)V?d8B>kFCQMNL*-Mi$fvZFV)=Qu` z(ENX@JJWco*LRJp&A+I2X3=0MLzH5bip)bo<}n)$EK-JKik)O5siX<37MUYsWJoQQ zcBmv{rj$yVr9=a9u4h^8bI#|yI-hgSi?d$#vDR;V?&rR*`+MCXO;r8M9`;n3wQC=L zKlUK_ijv2TLW#YdWzJ>T{hEX_vOP{yhK0kd-`fU<(wPx?;XaU|EnyssZuz`7fHjh2 z12FfR;-O-*HwSFK+3l6-9kq6MxrhyZ)70Sb#S1P>uJ!P|VZ7}M?Ao4#9mUrvbk5OY6!|~<)Mp!O&#%UheQ6mp>r@yP9icJ0t+~!|MwNDtm;Ii( zqEKL2*Hpe)vEDAf$CB~wTwzUvl9Oz=nZP-BFUe#;zFOggn$iBx0T13GCu2kn>;NxC z7xQW_+*>j8V`xMm&Kw@r-;#tiv zBy_#mMBRaG&|F-dKqoH8#wL@}4s|$!=h98d$E+)_-jsJGo}$ zMZJ32&dPwJ)TH!_oz|ANHyehRY)$YtU3<^N`g=QK38lml`&I9F9=(=x9Yro4 z91Hi2OHK8yVNwhhOofJxO|u6HiP}0bMWdRY1cm*>!rZ;)O8N>VBb;-_dUVn1eR(|E zdxHNuM2e=4kFW1Jk;)Fr2mOdx7EM0&$<0ajxhKoUwkp0+*SRXi=lzql>(&`b8eH<0 z%Gxp>+qf${IsTHEN0%7Z$RgJC0=BV@&AQGXRz{yX)!2S>|7O2IOI;luW`Nw}7Rx7i zc9rTCPYL!iQML0|uF1h$#6iYDki`|40L}okyQHM#%F+uoT5b>mxUub~J@?uA{54FY zudZJ|vs;;Qhv~~BU$~!U6wvVU_K|aU>W=Bz`jVD57xx-C!-^f_)s9*ZhAbWD;b0A2 z3*Dh7pA?o-s+bdka#^adf1nngM048 z*t|uX6>d#0n2lBBTdaEg;=Lm>t5>83%k(f~0J^?!6i+k^O3oOkd=>qAQp?0){jupY zw>H}i_NY`I%=H~V60ZGShB;Ir;s%mD5g1T|zK(jxk!$dIV&vQndj*+TU=2LGvO%f)ot%~H8v`mI9M7X#tj#RNxS!+CFHCX(yJl{_Xf3T2=b1mqsL5bt zH(mZKqgKYg?q7WCB&9nw-2S>HJM;Pqk6Dv?d@N@K93%6^KM2bDhU?TaJ0XykN<6xh z`gXcQqp6Q;J&dSCbUhF{*^mxo9V));ovN$B`(cS@n_tsT=?-;HoN}n9et4*2x0>j= zPXRLt8hwH0O4D6Dm&7yU_*bsBDs|9wk^Am`bK4@i>7IqBVx`ew0~>Ftr4?5EyuI!_ z7M>M=c=S098yg$#{-sX6cK8o?kw-d;`wDw%hbf}2!<3nqz;14Mc30G2+pD#@_)&GW z@)U}a&RIhoU(A=ASKKL~P)1rJwSVzvF)fMST1B>Grg!2lA~y1&|r2&f9mO$Yzyg<1I>E6(Hm`4@XKLHT|r$!{FnhjTGFQF+chHO5X<@LjCZH`1+L@ySv}Ok=}&^XnNL!6Z6Hds-&3VJ|?D+ z?Mb5$!JasgYMamo%sIs;JqYE+GEv!&u2IXbjbFEcL1;Mdt_uPzaNF4IZ2RU zaB=W!wZfC2GoX^O^^n#w8GCXvVOt1UA0+TY8Y3NCzoERcf4S5=1KGBDfAwO<=O=PM zehd}(kpdfl>mXuE<#~#*i z*Ur3HTc_gN;S#?sCo&?M5K4bX@zh5jAShJG?9TvV;HI6KIwhUtZEZEb2nXR!c?;z>9URQ1N74pMaB;xHUHt3=}-~KMQm&qDx z6iNUN&RkBtA3E;_sAS5CV!P^)H&qeFGGS?(A+Zx-l(=`~^2@b=O5a1<>0@r(+;=zP zyYtXShDZoCsinhcD|sb?1!^pA?$c#}G^uZzC4?a9&IW&E*g&}~BF1QvIdEf=2xa@= zm4o?*mG{;?aX2ls!9UVeyss|(74^apX(Gd9(|F)|;)liEbC+t1udJnTP6)fwQ=pa& zpv~Pz93Q}df(357d^kcRL)^4X3*&9N*N#on7|bjrv@cHPx4sOCdBlt7DvsH0c6k^J&*zERU5KSF6p@8rBnqk z_ZD)pHAt|;-%~OCsm|Jr8%jzJUidCMspGI~LEFYBv<#Ph0+XSX~VToR^q3SoD+>#-!yr@PT>U`v>*;w~w-V zajX6u(=rm_6di~6Q_qg zq?MYo;*?|tk6f;BqrF`kq4&`}(yMIPRNVODb$!*~vckSmv>Ny%rKCD3%nJiUU;7aB zSWDqvZRi(W(e@LKU%vS6`nca@>8a*qaSFeR_YFO2@AhMv2lvIZpA|X8o1s?mBw)Ks zkvf0$X{XF~d52!PZ+(>LtGR0j*9uW}SgG)H+>MQVytj|Yr>X`0xhI$Ur9`{7=#aSL z+mcP1?k&S(m#*7gv<>c6H?|e|s8Zyheau2@l>!MiOXOgyl?_tuu z-!a;>uh&53&)n0S(hB$l-&04E1sTDz{?&J`^s*bAZOM%okiU`=AieXGVfVI{IvMNS zgz*68LcT8t@4`AMDLo9ynykzCVH8l6s{7mi%drYZ!?9GwUD~tt3cW&Jou?IV_2(ts ze9Euh@9?bO=W<=t=4OXm>q25*Iee&3p;i+#6zoRVf4Ft%C!}NW*8#-#(zk*;^0lau z(ULNgSt)zhZ~ELQZ?Meo`(C*#6Nx-IC(gMV?P<|^CL-z9k|iAN(NyPj;6?4%&1tvl zGGGSBKFXS?w><)n1i9h+#Rs8!7aV%D{)gL-zvXA^ck;h5PZQbI@FF(~TeM6UpBk08)*G(xEMVzNQ-vi7VTW7MWXEcyL5`kWR}*#d*w> z?7kuH>*xhTc{7aYnYcIm^SQNY0y5ZiX!ureY}_In6hPGzv9<5&wyO~f?dE-dFLc#i z&!0c@b7}}Ijuk{PbmPd!3pS4VjNq>?NB~@=8YHuR{WEK`1|w6~>f`rN8L(Dv0OG|w zaDy&S_&vHSS~<_aS2kbAg&E;u~LNF%K!%avNN-{cZ_J*5#m)35-$ z0d$%#m>{QoM3Zc3vgYA;c*)(k-xcV(JiTs(Zn5k07x0N@;IRyViFW;F$Mz>27B?Ij z6?|2sVSz%b1hfV|V@fz9xMdUwgoIm`6Y}lN0)nw%=v4$Gnr?gBC!@l5;H{CVM`S!L zHVb9mukB!mKL30u*{Mz;-*uO69}9)cOwV=I%E)9F6Ca-<(x@PW47mA#DhbNnTnzD< z6l5Ng{Ul+y&v5UFq%+2<76nazs%b^9ki0d_a?Z-x7A_jHW5B3sOfgTx;jmS#Fxz1(YS z7q;sHB9g*+S=M}%{9526@Nt_k+9^1)DmE@I6XZ|T_p#ehxk|apMUj(G?#&2OsQrkg zZFnUH*d?feRv7=p&%?9VOW>tqMWmE5y?;8R-0wdB(mb^YjOtQCZnyc|g%+ibYZ*);Bh>?t5A>B{Ya4V*S0pNR_=2~+*ReT5U}JB(E) zEZdgsqP#1lXo(j)6*-@RHO%kT(Y^r?xveho4w(cTf)@wB)dSru2RZp_sXuAp{flX1 zl4@$NvfFN0J++gn#G*PmNu{h*COEezpBol#6Cn35*a5fMSKsWo`nY`8Lgx>*iYMYa zj8#T9>FViq7Lf28It>K?=ctu54EMTlg-ew%pBT+J?eD*JTn!Bjd_4DurJ@_%!RcnS z<=lYsle;c05X#=<&flX%>0Lh_cbgg+^Aj|B{ci=|lcbUrk4JXw+rK}NAu0qn$kF%J<{s5Qcz-@%uc}4ddHN3<(!|e0Iud$%?I}cn7SRL@el6c;I|uz_5)B zo1kAk<#3{E$DG?J)I}=^u*bkT^_i`=obLGNDIIF>Vb=!kUsg7410jVN-d*MFiqeZW zINmJ>;QB6HpUTwqTpqFOlIa1k_wp}aKE!S)+=qmqq-_3Y(YePY=1eleD=Go`IMwS2 zp+iWF{Rb5k6v%v75_E}w0}W4Er^@LRMh8I@UMfjrzfCMe$4W7nPYd~)JJ>b@eSPmz z#B;RMjMct7W2}Tz-?ihF@^{Cy&QzBP6Gf-++Wz2ydwU+>wi0An#>Q~XOiXYN14R@n2fo%f?t-bf(P zLui@#MEcS~-(!OK;ffF#7C#ygRK^&$*0dc<9WdRE^u-yM%Mi{?3GB(Y3}zFG5PDqA~}s>FcK#Ibd>2VX+ znN(o4kVLHUh8+n}qxP@#-p)j)AeRwkL1e3UGJ;Q5m*<^l!c>#7^tYpXb3V20b3Pq zuiG5`kJX<9e(-nc6$Fi<$1E%Ej2~DfA*NhOG!dtJA;ww$QzKG%lGifgVgJhAZj?d^R_b3b)HG+{}u=Z3^=m z?OYSz9|9bbf{kHsftWf!L`mA!+Qq7P;(wu?Jt7d!%bXX9;YBWF;>qV>>V-j=VsrF) zek|u|LjLrA@yHaOg%zq|dtDipo?jl#xwdj@RK+!lHsG!K;10}E^qsj(OOU3FSPXOT zFRvzM=-i^s9-W)!r)qsc`?{Z$=2#(aatoOT3tZP9;>cEM^dOAC5ZSmV6a(@Swncj~ zCdfq@W9b%Ku~V4XDjQq=9_6UIY3+cQhfe|*n;2-`L58RrZeTdeE%awyv<>lnksOTd zqS0MO=52)=BWQW`Vvjo9^Nj|tVA9TWqdfs=+6@6rx+TD_GMDUYq#*QN6R8_K=~?q)$1O*RCi{GDp!cr=61FXSe3g$d7vsN{xYfO`NaM`G=`$c^%n@wq?h zV|n$mU2GF7jD2p1Sl0LpcI4G38!v^n(<%O``G>w4{OHT{faejtCuW&OAFlr8&lGx$sxueg+-l$P*N~t>`e&JbN~9 zjspGjmfDrkaKp(KZIJsPr$e}>S>pX`n?56h#O_J2BY^Gaiz zVF~7gzIO3f9Mb)5>ChUV$Shig@NT8F zk8j3#kLsJ7U%_s%4eGt0lUIrPM$R!dIpfo0gR$k$kKUBmM{TQR-Sp^ECOb_JJ%5#CuY4S` zm3wzZiK_O-e{KiN0bQI?)aOYaa-MBFnx*}}2h^t&in|xNrB=vjT1Z`WOj%tpWus-k ztw~SkSiZTCE9bPb|K?2riVqO#hlrkKueouN;TBadvOL-Ni=g{x6D$g*G*TwU*?Tex z_y-F_|NVWrFMvgd#90+H&$D-4lq!v`DnfqSnr*QIp_)wUIVAAwX7-4XSB`Rb092FJ zd5OAM^91>dehGN@Z06?rs*E0H9=dIrYS1khOD52=?&RWn2(EuLTpK`mYMvNB6JUoq z=`vByY#jV9W2+F_?DguUwV5d|FE9Pt6nayMM^m|#S&t&0a;SYH!N!cYoTgo0$nnr< zMF??I0Kp^in3}UtfQfmdSy)d}1&70r1c>HI=9cEvno!?*kB=)s3+v|&`t^&OsCCPh zEZe97eYOoZ&O_k)-dA^z)^kxoxDd#nUr>-*Aa?0jq;n@a4wU>n;%WpCU*)o^##HY10~PgBD_Blx6bbEy2p;_SYL0>z-^u6@;Qih*&w{ZK?vc>C z7Km9YuwrQt!nj{twHMNeBilio26Np0gbE@HL?h|1pv>fq>LL6eK0RvzJ+>hN7GNje zx_1Y9Y$F2nC|Ypsx`X%N)H^Gx?nuB|#(dVT9$VHt@fo{)KVi@!4IR86aO8&i&j+dF zEtOIE?d@q;csBe*CB+V38tV!!66l>^KV%o*ear1l_^NAvem=$EdIueuC|CuMPvm4} z4T#l(Xm>>0T-4*ldJ=)Jh}QyzcR$2N%fP_$V&2YOTe{Q1V7A+b#~`g5KnebW7#=p( zPOl()lU0`KgIDuwS<}?S+~65?BEl-#T4?n3YJ41(Z>S)z~(81F3ZhZ`fT> z>1I%Jhhdo}L@;@FUK}farED^^jBZr@9z;N`_xVWd7^3GmV{loXUhf^Kjww+6cat;+ zHXnL^%5u+g&9ZL)tHes|#o_$xSNdrJjZ!8_xkw?LmT&R2#EMJYc1E$3c!TXLY!E)0 zC7rdz`F^L}+d-|UxWk^4DgmP{D1c)+MeQisZ|Y<{sNdR= zoV}Z#O=zt(GHr#TD4qLcVL{zj4on+mN<(Zldn#gH6gU+?^Kipt{(7o%kYWr)skq|G zz4eHnB|Ax&IIA|GFI7IlHu7VEgh-YAW~1O4_Mwtdp;`C+yzG|~-=C z3Uy`^>jM0S<=b}y_;JQTNkSBr_k(N!{)1t9PwpNH^(o}ip}~3hKenx;rUMFfogVpj zMoNip4TVx>le<#Z_;46gytt7~Qx&{*TF$%=WFSCGAViN>P4-2~4-B3C#(A+px5R zzh&-|mB@bbO-pEv*iC*c_Z!QdRsrX(XSr7&Aq zSQr5jk*S1j+DuENjK$9!^PPz-LRPh=1R;+lioD{9iAR}=DgM(wEa!}UhW^T;gbyk!|E5kZ+joQGAkzg`T6^|;E5bkVd9cWuKzKuvLD|6vzTTxUQ0kh!SQFY zpV8HxEb?TWzQ@l*?58C)%Wae1va0_G{=)h_n4I;!fJ@Z*OV=ewE1i~^4o#MaN|b6n z-H3V2Lbn!r8sS5w)}t&qBs`%Hf=HS_DyA$k>4-JKnw%(~zLc+7WFpm*F1O57J=-Ng z8R@n;+uRb#x{P)BKtzA&z+hv#*%?D`vz4<>5{`>~jr_YKAD@8?K_+mv|B5|)^N#i2#*B&6 z8P~Y&*{0ZA*_wYY9B&@1*0rurHSXo?-7T@`Yugboe-(NTg{rp`a9#>M+}j)$a@Fig z7B@cFUUtUwPR`ffUK*rVPM3wDsg~Os2%F;4PQ$U`B~SH#c;jm-{vtZ;!-o$(1ETcm zpIf@uKJ6H3%EljEL=jCbC6?4#=NeTX@z-0P?92%-YQD6)PtTfK^NHgw9m>`ERK@kO zXlPTQoil`p>&0ajinhzx^Nl`boYOm*Q`D;Eew60Loi|qKn|!6KM8rcp`528yEH z*V(ls(Z@$=uIs=2$bB2}k!i0-w-kpms4qsG=kkamKBLq=@%efCRFYW0bfmf-^%6?( z&B+0A%hfDYyBb|Jk7eG%rvlX+MjSeX!kLvB_}sUc3@|4Q?qR=Lf>4UO!^FlWdy$BP zO)LPng!VY8RqN-=m)FhtrKCm_ut7`^sk%NpIPk=oSgO*YY2LF{!$C<2OD7z5?j<7t|%^CHDym#)6nI0h*Apz zOBy$%(pRKCFI&@<-I5_WtJKQfA!tZ}&5K$!tb`P~M%WUFUP1PQppci?yWO?M6xSJ1NHvm+t; zQRVAlWE1$>%x9hFv!5>Tz`902Kx1cT=gcYPf0=lCx;a8AO`6dBXHHB6wS-O^7qOkX z^1{(F#jB1!rSC_=a{Rll1_YwGtFPX?c}sH3VxY$7LDM89%**LOgQh*WEq~_R>=+Ec z&7OpJ`HrKMOy4I%3C%k18d6p#&x3b+tCvSMOj?zF*zhO% zHZU`L{!|)TIT%U6bG?l0AK#E5V(tfzA3tu}oVHEzI@o3y=`^I5iQ+M=C33mzyfWhU zy>v(8qmF7}Y4P&Wr<{Q@(F?kZ{ZcHx0jX=6GUme$U;o#k%*DP=HHO5^arl$=1?0$l za{u;(@v(8oej1m#DP{|e9lfzNts!jY*5NpV~6;g`7r63QG2YaT8@T+ z#DprOL!}}Uxhl-R;ddoiU?o(y%DLHP+{;vALOj2AKg;jM3#mMviY2VW*)R!;uzo#{ z_La|pJQEs~j+rCyIcJQ#lg($V195ley~|iw)oShVp*`NJ+h#kj@fSaAF3(+CIJf)y zHzH#QQyYhy9mB8{E1ec)=MP#~^Cdq&JHPxl?S$eMoA*3O@L1t9A1Fu?JX~woSS}lH z=}M7UR!lvgo7eRy<=*oPT#oY(V{Ti;PIn}ZQ@o&rql(uaZpiHY3gm2add0;E>Qk{s+V^4?6e{t{OA>*Eo#(aMso<>CG< z`KNz(!xj6~JjmwFJeBu{nDna4-!dzIU-_&WciW0f&iE)xIYU0(M||pg(DKVVKR>^w zAl@;voluICq1Ay&)B2oUEV!y!p>;{12}L-^-N3Iu|bg zLv{1!P3P&=*&pv&t%i#E7WwXK(VUh_l5;=a&;04vkN)*75Y4{SX`AAGv~Ld^TPBF) z7M;t=$Trpl`@hn@f`IGVhv~K$<)1m4v@@;IWhp4%-tIadpR2Y;KjJmHOxl=YxQxTk zp1=5RwThU_D3ndJuqldN8;fs3Qw1qRP^dQ)Lhh2KPX?#wyHf1uJE^a7NJvP;8IrgP z9&Pntkgf5YZUx_@GyWHdwVIRUx--G(M;7cl6~sFYm1;EPSm}okuV|B4L%A8w znBXd^maAo~PoA2tAabNKRA$4OCLJlgKAyPTVnxWJ5*kb{(6TgGw48m8Q^0n@cWbd< z!MbARdJ(^rbbcn~?IU#F)=_k~oyZdiGq+lA2p=pJ6?*JgZ;qcs=|$+YCw=_on^@qN z(;@!gfph>axopN1lnzpZg~s#}!DQP^dBqWo3N7h!aYpc~jn9~rk{t;`#+@JTZ8LFv zgLAhHEwifSgf>$8=pYbcZ*#6pBJBF{;if`S{D{x-CZ+jcVcMI2Zi?E^v>1nckx7?- z&jKMnaxt$;UaQ#5K=eyJfsu|TWbQ(Ph6^#=ronCTd_A82Tc&&{S29;++0~Zi;W7mVxmY8K ziCbD-T^|)`Hz6^Z3%tH`3$V~h23qJ&3#XU4E^v{vE8OGg{Nvt_iVP#qUFNUxp$mCbw7gEC(~by*PK%G0fyZom^M zrj@kp>gqDF=>KHcNJmHaHTX;5)>+Bb-QVvYppMh)^4s3s6sz6;&FXLtHI`JDU45`p z#jw`7hHag^{!zhdta`95Y>G5vM>R)7F*!MTiGsubn5x@H!j*K@X|=0gObqud?rKls zoToPm-6Je;l|eQXmcph-B_<9r*H@K>fEO=fF5&@nYRLGRuWz%mZ`2yq4t0Zc6q~so zr%rrB0AAePe2q_!0X8}P=~ItuIpf;+J&1H~Y1hx&yO@|6<DbqhEFL(7@7kW7 zU(4dLvl7XyoIZeG?hl9MaWhH}^9jACU%k8QdT?1UL&h-Sj@_4)&zE)&cLTh=U29N2 z0`}7{5BC@I(giv%c^PlL?ibRlnSr-yG>^lUXqSWb6q$u_3)vyxd{D_V1U~wlPQnZm80 zePsDi&1ks8aOQJMU#iVpA)GsSl{xnA_+?whnd+&j#q+$XrL$HnLV7;>V?Jmnx8J3Y z3k}so%oPh?9(o+gd)!7%D7~@y6HUs6E-wjR-?l{MQ%~QG)#f!xW|Q&Eanr_g%hB!o zYRYOfU2uN(pAoe}BPn75=bTXoU3RyP&5oH(U#qc}qe3?o?&j-t5B%{GXhuT5?~w?5 zmXG+Lk5&R+90*5l%OymdziFH{_snZ!u3L&L)szS}Nyg=vYxKjn--JgE?lcj-k85r9 zn?i+Jh}vHdJ$wE~=}aWswhn@PL%&~dDhR9eRF$0KEKCdx&-6bi0(tq0=VKoSPCVostYt!l5>vnXo!y7VOW)sb!TbbHXK+7Q?ylB|< z>r2-D9sLT2xu}c;cWKB-^R@#w)xRIB``qP;4xnIp)Oeg%KjmPAPKex4tP*v`K%r7i z{m3N6?6_uvZf;~4MU;+Gh6nlehXR@&p z4ZXUO=(cbjf}aP}2gIl!A!-hgillXPl&F?;2G)mNxNOvaO$D{58B2Cw0R&!wffS{a zv<`DWB8P42ba5#J%_KaTtX~(`{l?wP_iOGIqm*G4$Z=V%BrMk)8&*}laQI0_kI68= z%VNGW=_D@z0kVvB*8JQz-Z9sPmG|i`A2(-OO|yh3ymt-$RpL_oxvHz1=70bG@Mv8# zt=t$|vvygjW#u5+Ti>E9`Nh`C=y33aeUHy3+`oj2{3?=?F9-21UE;p?D@5ej?8oN& zkG9Opw4%w{!4ZDuCVmO#1tXRbpc z{wj5VLdBY#<9JgXJ(|`bt=>?ir4*lcsEh6r1t-m)v3=!>8MbXUTX7$6W3y?O=8%8Z zUl1RHK)IwBE*rzu4D?SL+8;Ruhb;YV`9qGxc_N04Ge8KfJy;PJH3V{irZ-3 zbOsHHPhJ!d%yI(dvYcyCty#VEHoLaQ7nK7-?>|G9`Sd(b20B+J^B;szyuU(1;{N*< z9ya#Pkev|+g)dOBU&ST6^Ju$2N7JzGiw(_H_voMK(kSeyr6%IXM0A4I!9?<|OA-RJ z%E##1X%X?j>$eg^rrBY|U_(-uneWfn|5EF9aCmfNIyK=JyFadqZvUG2&q~j#8;rNm z19jN+BJuf@R>E=2Mu_&p*sHqHUDCS5s-OfiNz%o!w>#dFo|l_rzJ#ktY0KB7ksqYJ zNja0*li)T>?2w@;v!ps)YGr)1|A))q3x=}AYITm2@gs$z^iWUUsj}3Y6M}C583O_~ zPq3VM0L2%bpr8)?c%1HL?x3X4+9etrCGV-T79=Y&9P(6-Q>I2IZF(r97N1gK0t2PM zw@6TU-a(4NgJMD)cFI-7)gVIMJEe{xtI8VTEauu>btb=vd8nLX^imfrbGvoR&*&t> z#l|x0{&+!}p%U#gs-{7AOzO5;lX`=ZUeU&j>Jsjg&~lv_x&ZQXD4p0M4(h52zD%Qz zbJZ^)2tRsSEh1laBPz<-pfAE->EW+Q%=@c0jU8UvV>;117s}?(4+`y!MAS9}m8Wg| zy1{PA!X~G+#(M5Y$OS+CxhnlSZ(M)UjM3d+H_Rhg^}Of1?z*!JK9Nuu-m~I07vWi- zlghh6eE6oLO645NSLI&QQ&yWHZLZmluZ`Wy(`>{6k_jI4If}NwA_%$c2cD(gydxG} z-fN<;z&NriK4v!jQza*UC{~~Kg@X=b!xl-dv0wGXDn(WKm)q7O^H0j{q!YF`7F@hi zrPoM^oee3NJ*@<=DYu_`u6+*N&}isZsvh(xWGH{VwP#&i{5VDvXk)l&b&Ysg;+?dw z48p9V9I`*6?B=^;0d^7v@g0+G`gg`Qu#-GV&2I@3Fevt$ji^9RSlD=~AK!d(Z>{bbqbe3w?}t&kI6keFzA(BIm96Hh8KXB!Ued*6?&yl_L1%|U*i z^W(75*S)v1iTr3k*~R+z{7Bla7x~|*58&G=`0dgXV3lDZM{=~E>OUiA{7{OW!o|3t#$&vTf7NbWUFDywFxgk2`) zYRa!Ww)jhg)a+M8w|*1(ckU!P*)`uowl7Q7_}gnj`;BQSfwTF)HqW8%{-&B<%Y?`z z1rTAns6)7jb}bny(NOW(AM029i4dD zMB&lk`aqy!=|DQTJ-&$ARW~zZ>T?jbJKVL~bpI^pM<%=tWJXK<({siUl%OW-0q!eP z<5TkCqCUEiw)~$C;e(tCEZ60d{w1vHboG3_Lc>N}x2-M-sAs8UqS(6g^+nt!o?;p` z_~STV(<`*>=cs^^e|j>2GKzp+dO#87{Z=Qa#QVs76Khqg!afb=aB$`GEjaVfELB$G zTNZDNtw*&IJU65U%k5Hxo)zDA`mF-h-WxJLdq07XnICj2>}SVS#BjaF7q3ydHUMl& z1!`vF8U`>u@^`V zSm)?l|9tcEt|C)~m|K=n*O-;QK9MBVx?cNa zkc(Njvbdt?XyQ5E5UnJRyW$lJ3hQ)pa|IHD-QpAx{^9`N+y2YFnGw}n-7+v1>FlKA zRrGPk;o}S!Qb@E`ArsO)_S=a*$C?NMi)bP|=G|W@&P=#KHOw3Nv+ig+?i!0qQ}7oV zghbk#j!>B18TW|>wt7&p+%L4@=FlT+Kx58$>RPt81?J%~)ihWflsG#~m~sO5?%h+$ zRHAQA6saSBng~eOk1()1RGzlm_nfcCR(BS{4?8WY5#N052b9-$n3o<)x|*AU)+2Yg zNAqY6ZL1+V zbzP@OqmG2p;N8GH=}eid{#Tw_`W7~0 zbOxoDtV&kpvU~k^g#I% zVW`>B^;iT$)uYsY26dNTqUj6*BP&>=1YE2I!mrscjn|E@&@YTsY!c7GYDhb;W@q;2 z!6Q6os|2}Qz;G{+Qe!Gz<_Kp6UVbfnnk5)f3j|iHX&Ds~-s00fXu{zgdE_psh#Y>kbNhZjE^QoA|whTSlmUi-06>+Md@r>#gd@F(Ej<|ml6w^&=E8sW`q=S z?E+LNS02X3#MG37m0s-93mRO<9iS?^i9~TznbHzqepA!lx{I092gqw;ry9V}BohHQ z(6GS3ysv0918}?h_wOaL*(0Mkx!G@lkqz?t(-wk$RXsB?_DT96k!{FZEPHd+g1GvIq((8o+#9Alt0l>P{bQ2?;Cv8C<-UYOD==|JAPw5DP2A&ioDUsTa`&F7Khq351c?t% zAf?`!y1C{CkvUBzQ^|xCasiNiJ;&_}4UqR{fIH(wJHrA|&DAQIMl>csUIX~3yB1jx zE)ZJm%a<=pSQAzWxO{4PI?TXY-7t8tk)Gsl-Ta!6l>xMvw~$lP{?Wk@ws>f_HQ&Yk zETq1%ehzfr8$Jq8p5*L#fZ}ZU1^1|mXO{_LKcejcr_YKIYjY5fA*f)MSoTK+POc|^eFh``2D&r?=yeRgOWgg29*jidRH#ipKJ)n zYyHHs0;c`kdzTg@{~(wfT?5B*DnQgmEXP4H z+?tR58w@o~s{@}>u+P?_k3A45DhP2~3A9v?bnR!)pSL?kqK|j#7}l`x@OTNy_g6bB zoh+~V+RkC4d}UIoF+~(0VimStw`bF>RDmdJsV35Oj05~}q*sP}ta9d_TuZg0S2p-@D)$K*+0?TPA$fU4;GEi`DrDBevN3a-j zdZG0we+;ipLd^HcUrO0TSwJ@;($!#=YxPD8>o%m^UDnf!47|wa$lUw8FIxs; zgz-?Z`Ro_6%tb^iggx8T6h@l{h_=uN?d<_{30=xb)U2EcH9Xv1?@pH^MM|6n>Lizk zwr(mPAAa8Y-N}&0JL(wm_51fBS_qhbFX~~_I!O2L(%*sT9|j{FRMe3lnwo~qe8VLZ z7-Fk^Cy1YPr*U=BgU zYcxk_Z$>;1+9Wg79N}{b9zTMANwa7ae1H=E8xP%kC@g_vqVnpI#y!ae$QR}}3ZP<$ zLe_aO6?-pKMgF+t2y<>c1WWtXX-NM;Y!B(CHITEG3F_9tzlLPvOJW=;MR%n}!d}`?4a*rC6uZR38#!hZI(wN&eC*`7p*-YVzUlmlvbC z&}%LkFV@yg-w|0K-1{E-)ksaS>r z^uah9sks)eo}{5pO|f7wM!jo-0_ep6W~xvnvyF{43%{Uh@53Gy18BU}@JF z5&}g#o$gOx*$Z9FUj>&>sa#1uBhjc@v)nHsU8UMX&%Y3AI&T?%xDRPwZ=oIQWK9(o z`IBjvSx3@{zka7rRZXo$V-c_UG)X(?Wj)s8>aAB-7KGehs+7@o8^pe`gnyN92STt-DG=l$E#jz5bcF&y3YcQ^VO6GSRp>g{Y0$<@sZCZprOCc|tTv*z7) zaCf&rx0)%&6RlTv(!CcoBSrt|wyPAPnCN}`mIOb8^;TPdbX1G#a&4BLD$7uYo?`NS zYy|hjl-l!^f+qD&pA5n?*AbumNmjo8_5<^0k4le4q8B3i;0jhZqE zg6J~RGjd32`kd(Bl0>BHUYw)n?os5~Vj4YI)u(0lIub#Tnj6D{-2g<B5X z)ycYYfuRZj>W&$=HO?_D4Gr85s#~fbAKrsK%V=O=;Eb_WS~Ql$31NI`q@rhK&o8s` zWmF`3AWt+SW#IJ{oI6YN%*?kQtp$H;yR|UvWj6p6mhZ z{5%!s9}e~&0R~F99F)Ry?H)D`&Mnno z$d9}(D>@Z>vvKX4P`AWdRDk%hc?jX(z5$1~2}*`GyZXQ%+2LY;mIixx-kXnAS0Fe7 zj=Z-!6*7|+tr!04DkFg{3iarw?s=3_w3>riXcA9vr!VcE8?e7fE-;~7%i6@{D<*RU zh0!F9P`7dm$d+v^jxu2Ko4s~M84>gVMMoDRyg&rK`}-h+N-U$z66>t%pj!YLi_h`l z#?j8W43Hm4B)x4j_9SG&{?*Hupj^}%>I2waskQYM!A2@}^_(0`(+^1; z+rUkD@fy>k@M`ce4$w-4h{T^14aVG$TITPPqOKSgd+D{VpSa~9m) zX7Lwf(mt902)Y&^5+9dEFH^Vsda?SYtwlwUwVD-aGd zV9E(=r0|fn=>2FAA{sqT&TAcy&^U!q@$A*14@BHHni=U~-?JS*y^<}m%5Y0Ft6I{c>U=^lAy;m^&xP(8iO@;W6(6Q8345rRQ*bI-d-Npya|bk znXLqhBbH;FrPAg3=nV%SHiyyi}zdey0OIcJmvviwW$rl-3VPI(v1qG zjq$FB&0-aE!{C_;Xr&Zx)A(22VfMZygw^I~d=ee=+?0#CW0#D82LR&?fT^BSfmedhejQoX+QW|4p1!83O?D?5M z4w&Ia4gVJIGc}ia9vrJmVp3Aej%|_L0asY!Gf*f*chw-&erW2b!UVxEQ|o}dQFKt+o+bKs^Y?n zxID=w{Q2*sHg93bO(Tk(3^MzH&B_Ww^llr|H{W|WdG~^oVme!21E@{ItXsu)ACJ!} zmRai}LDZZs?MSMa*m7rORBix5f)ZYKc08qSR4v#S;52D2kz!(E#*lTKF}#!Iyzm;o zN~dQnI9SvslI1fMGFf~YeQufO+7u=mEnx*k)`H?ElXj9db_c&tY>5HD*8l)9|qq_@Cvpmt)3 z2n{bNxWTMbUVzYmp!IL<3>_aG#Pwf3=7OYQ?(V_O>{t*>{#2cutWqp5MoZ;-yDk_h z2s-@9eA4Rb&FEin6s3h|?IpR;JNDeAp|5-$=ugr7S>i`LpWH)y=!k$slHkRV%fqZ$ zX!JUcqbwcaQzW$!unPXtX7GS6V=0NA*gB8JPu-oHa!qy|l{(7yu3^>Z{fV0msi~=b zvUfY_b^f?bxI!hdoCx8gItv``={tR3pIiFxM{r<37@>uZOPtk@+?~C^jpvNPOnsu{ zp=nNjl%;7R^|G%_T98DA{#5yTZrdVRuSGTaE~et7(u0mm7W8v>uGVYPeI<)(nCvPn zQhEENeYfZdcK0&Tpqg#k67D!_qv3ACC7Tl^qV^l$<4`Sm>5=+d8>Y3Yg}jdwzb;>E z*5E8Ns-U&AyuxBX|Bft3gHvGRh{Yo#zCiz+E8Z!y6csA&o{qEov^R{(ZZg}*v`);P z>rS8%I{Edrpj?jgbCF@yiHz2pEHYsOBuchsxXo8683R^zXfczQqR&#Cn8p$ACsktT zU~)Fj=61;4td~O!9<;%)F-)V#MAY7npf5&JdCV7I4$oBQYwqV(p*#LaHvdWH<-17` z<4(D!yY9(J4?z8st4H<%@P|c0XLVj<@Nv0j%wxQrz?6~vVTq=&iN8)q-9hxWjgMPO zayw%7#CZS{jWA!`&+BasVWFEmS)2Ggi(hVJcR;u8fDgQ5UX{u&G;Aw z+2&kFbZF?6SAl^=5)oO^)^$hDND~LFYctw`^$6jpF9DuW*WRGTN*zZyl`2E8>8Pu4 z4H`uMw^e^i+aWQbdh>^XGaj0bpI-}M!hHhB5TpM}oAZtHjJVASH39TvbJP+Q_A{wk zB^Db9XtkaC`l`-F2#O}K#6g(C2XxK)^Z2(;lbzt9`XIht+sb*M9K%%UqVcjtu=qw! zXuXN@zx%UJEI4Y4&R|G0Iqb$7Mc(?f6hXS5aKo zt3p6fqEI1S(l|H*2!D<2RFEblzrP`ta|)0*?7Cz@r8@FXO!V1RN|$dfpPZz`o^lDf z1YH|c6nezUIhbFHc?R#)8Ysw;Rv;#XKHNms19b(RjF+zR%u6!wRmtvuCJd3ahw^Pa z?@ta3F9M1f<@Tp41Z;!;L~q}`>X5%26m=xCV1n{FmHIqs_?89$ZIPc*y7!01UUjvN zW?f?DQB7pwTn%lwQg2uRtJ>pL9mas?RFuB8Qz^V5Ku%&(_|!`%x$}%} z>Reh{XDv&(kC`_%J1O0I;N$70>91C^_^%YI9ou@T>ZT71ldthy-eni+F@u6r8wR}1~6&GHGteTp32?v31nclE zQ~axK2UshFPF;eW#K7dvCH+{-CiER6Z|kd|#-%XU)w|=l z_8WJr$w+D&f>UiI(!V#YaAl`1g@toj?z0J8Bsw9YLW2)?>d=v&pJU1ZS{SiyzzOGb zF!8`pAA-D!gaqJ0Pskpaev%9*4j0Ri{QB+NAij=y zC5c3P>@B#dX>vY0OBIDRH<3Vuu!L?2)M6JFfJ{a7{G|-u&!0c1bK>`Gb%T)w+1s{X z-`zA!wd~IWFA}x@P53QKHPD<`Td&gUen1*dz{-{kxz!Yd?DxPYLxkU~!Yl`K8}b*j z52|DW&WAN!W}cqa)%(A*fg}WK$>mgY_dTbS^-D6{%k|^zUH8A<^fkWRU**7QEsu?# zKYv~dNG~JMCAVgMdjQfPuf(2EvFH~+`|hhih-o+6;OeRzFSj#vpqSu7cpyknjm7=` z)_{|^4oIAJJeEr~Ku2hW+)jmn24J$Jq289I$NXQPcifjk8kj(KgH}8;gkOEjuKkm& zXC1tvl6Brk(@>eK*w?$AgbCDy1JVHpg`7;vgP^4*^JeNM(65%UCcwstoPVw2?U$gs z?gFufEA_^wUqRJl|L4vBg_H0vn>k972x-w6_u6?s>d=9xRuHzj3k<{ro)shg8O&-q z??xMDPEst2Y83m@r3j=@FEVLgdZ`T!K+}*zBjcHs|I4vnK5`nF zQw2!uK^WEm($_-5x7P_ovE~?VM(Rew2mfiy_Nq zT~^1GvQ#paSJ}PBja#FZ-|P&ks_Pn~RdiTR<5DfsBk)(5O>`eAFnFG$UG_r|%?OqQ zA=>Jf;IL6h3pe> zeJ~8%fhGl^&0?f!G>T2LE&cO5VUw1(Qh+MmAJnI7OY_V#DW|s)uYQ{L@=BaMJoQ-1Hnj0zB=PzEnF{g)x(;q&r-yA}cY-UEZOEFw*9&vOr3_MMe z@WFPE9Jm8WQ=10{m!1AfRU4oNvs5Yd7DJNLLZ1tyLG5l7lAw}BOT*YXBw2{#IQD!%gz#uYpS7-9F6BWBx}Ha{Aj+4g#A^6<%uPdoq`yMt3AFi2 zf>53c9uJeMh4eV2Cm>AWRXsCw;>oL=spZeoi}=J{I?d6vWm0r zu=|NtWXipm3mDLHUX&SJ{_gdg;$&4yeV?New~z%>lkr+FhWM_Xch*{}ZxN==c^{FN zp+0-v(;5mqp!AsQ6pjOL4fy>*w7zkdSDoahg@bg>W*$*W<$}sPpv0v@D1_R+-QwWP z#c&4!(ir66bgik%#k>dr4lU#^Bh)a!BGbL$<_Jb(SbVcbX_G@xL$<5r0dwCB?H~+5 zoP07($2(1?dH*bn+yE}s4SY83qw_Fp%`lx$(v!>OIctiwPC5q{dNSe`@JXCUJXULv ze&7yKi_S~OMEagxvf^Et^39(gfTXcZywXjebx=8Do&!HmNxI9_wvA zw;94B8fguUcbc`T>ffdEi&tOzTj+bPzsP*t^-%6yA~<|J{5?)rmd@>=_#%ZwVJ`4& znS*;ebEtEH34CAMZ?@#l;l3|TAxhSAS_7ILsb}g7i-{yzjd(f-N-U!VH=1Y}ZrB^Q zC|h)zE0bi^?2LJ&*9Bd;rzJjv_*~$XDIeYR1_*M42LBj=M)%3Q)|y|53oXR^tEoXU zAp2W#^l}@w7=_T#*B$R?WBWUngh7Lf8u%W5$1#+c-y<#X25}fEh>MB~{Vnt444WTO zB5Qz3)y%y5wo|XMst*X|+~O~Mr$&k;0_4j&nJ*08Rf@jR_Z#={{kC(LZHnF0_jH7S ztuUcqHm56xBZea)D-!ElAQ5j52W(8Ekcr2mPW`&G<4UWAmZ||9S7XP7wmQX3NI_`! z1j=-4wER9|0QKVMdFweFV=AlqM*h|&_vySwPa}2!AK1|wD^;tpeWHb?9o8WeN(<6F z`rdnKnuKD}gTTTnEQf80lfDKxqkf%Dg9&JT!rK#P+!+PILa> zwZQYf9}N^u3#>K7E$4hKQ%)T>2K*73k562hX8RvlpX>M>{ZUGl#0S3Y6@soP?pbu- zmGh`a?4fMD;6c&y_^Ph~It&!X;$6OmfRi?Wjf^#CDL;(j)aQT)HQYGj?-t{{h;yg- znRxacodx1aO!STq+EmS;tD|&0_QF-fx`Zl!gfP~Z|G9DZI;UP+3$yw_hY0$KdxGco zplNznc6Kl&P@KGd3@Jn0G-4MRXmq3$1lRo*N>W(q%vW*iPH(C0z2evpK*k_!A$Jf; zJwaY~p)=_@IP_(awjqhpWTHWS9O;aYMs4r9KvC+}BL`xZyH)hyyy8DF2;a@?z=MDZ zB?|oB1h%P35K3D{UB<0QY%RV$w?sP8AnYP7L|5RCAVbA6vuah$5S`xkAH!f>X)ivb zYfWG-LmFy5Sokf+Vk#V%XScP_m}y|-{-Kt+D_-llX9OJ(=@N}_lBJJjr(op{Cng@n zTL=))UtBHfgMrs+j)7Qat3k;*G4lTQ(fXXUnh%0T8_4?$#UCMbwL+4xlBf<^l|`oT zM=S7`$b%#hd&>}hJ}GDJvuCM&u2qX40139h$}k4!j`LSEARAiUO2@Fa817;Gd?|PR z^9yPWI>}4(;>6>>yU}l2WzS`RC7>0g`{kGaH9mxqKNFxg@|n~g%z%&*Z_4adJ_2Ne z^hBMsxUGL!Pi)%iuA%3mzDMvAC+xTLfU(P{Q#2F;^3c{`DN!AGg4^o(zJUh;&MxG( z&Q}{*lWkq9W?%Xx=;Im}bAsjfbE_XEUdY6J;3A-~4b(+baH_qSw@l8?Ex-Hx#7K$& z&6j2GcBC4=`Yg_4WrpoiNV|(bi&RYg&ZE$`*q&4Gc9bqQ7QdeAO?2AcvC`^UU>P#g z(5K8lC2wryk?v-fLBMNT0>5zFy9VuG3<>4p+j{im=%hpaj$C|2#qZ}6EIB!{14<&g zyI76IyE6%H8HC?wJhn03xcf^pQPzgp#igK%LaEBx3NZ*>_2P4Md(4?Xr0mtiFZEBq z(pNQm*~JfMBye7Ryz`?vBYaFfjh_D(E@@~`wAwA2)L-SPhS=CssgLgmrP`)86#I%; z#=5TMI$bzgT3nnueUc06hm^WnXH_TE8>O^kMjWEb@uD~M_V3@9X|>DXWXQ&gVXKi* zi1v2Br6nXgL@$i~Iwr6GiEDiXOfT*mzVeD@Ze@&|_cx)wp@90$isDFi+_V`jbo@}) zKSw6i&pczCnBhiI2RiS$EcfKg(LZ5O)$BihL3kQ?=2BbTf4?`w;jd2J4?WY}El-ZM z-?|mfeLpu;^;L92WcH9(N~KD!S>n)Kw%R=9qwL#yS!`+Qxi?g)r@-gHUZe3nj0xnm zSw(%?Isxy)@&MA{gwafM$&>gGL3NgbJ!yf zXR~)E0Y{?arrucHr=d7r8FZyIu=W%>E-1l@^wB01_b`=|RwZigxo}opr9zA*S-ZuT zx;Z*sHO+oufdC($oiLjrNHsTp_ZB|BQdhPy*()fGX~5iH=y9B$odprEEoXL$()9Mn zz6U88;E!0rJfGKcmHsM&xQzML|jQ(Fc1Iz3;^ysUqi(D z|8w8S@1rJIALR&j_M zDwrzQY4NAr_R1)0qStl|`TAd;WG)w}tC2?sL6QZhg9Qjr3x@09)*r@4YlDLn(Nm!@ zH5Jk6u9+J{qBO}u>cJUko+?Qh6F;p#tHCYcVn1wE)(rWG4LU1|QY0?{GUw{SRLj@1 zdd3(%0-4>!{VVd!BVw*jV`}zM_r+X$5b0tBT=K}*Z;!E`1ZV9C2Dxc{^nNsG0D6cb zCSjKb4``XoVf5wO#~U`5Q_RJ@84Q z6}#-tn@#n@6Pr%V4PXK@Sgf>=YUT|l1fc%ovs$yWgs*e4CX^EN`--CDRUfpr$&Ywuq|sNRhtkS1 zTa^va0C2E{_A}BR7}287n_*`(S?1R;fR#23U_w8|I^*BM4sq9>w4c1hr%i>j+(Z}+ z0{@bt&PUK6;%vn-&Mwqt%MUh%K5gaACF^d90tPpBjk4S+A-{B-SI5|4l@`S8_dv%tlC(5+ zF*0U{$_s*bXHwGHBQk#XZ2R;)WP97B6Ymc%Goo+LX13`0eyXF353U3``tAI z@G05I=D&h9HB@9v4Wc!xP2Eu`@F$HrZ6bh)Ok#9(=@9~VJ7>#y@n>RE55l1T)3?M zs{jh<5C+c_cMWFdB3Pri%)9B7#jg<((u3bMd&I7h+~h?RSkDKGMjW8YtH;m~b~f_d znb;eO9@RWHV(c3HN_l_n;ua<=K4X?JMU`8 z9WTE2H`QuCaYw7|-#ZDLRP75q&!NY7r5CXG?M&^mJZwS7{m)>W;{^VH`-u(gy?2`H zVw|^~wBfNl3s;lSXs4b>prw*+KS_N7zNscZ?5oq@4bG3LObXKb<0LhtQXPx7|4ZNw{)M{i_p%!`rK@IRAu?n^qD?LEM&m2QW)` zb4WG3bBGUl&rbR6`Mw24pX0rZJ#@;`gxWF|^*qn-9&%`% z)YFHg`P!H-ct6@rB6>+8jiD!~H~*W2Cg+&P_)A3erex7M&O zi#WcP*$_9`IG>^Cc{W-)+NQ6bwxXM9&Fi}be>BlaOaUoKbl<81JYn#PKc#=*4LmL3 h^f&)QZ^)=N(CdEg-*iyziO7Ma#O3eji9UMv{{i&DE#UwF literal 0 HcmV?d00001 From 9713dace5ff724ec0b49ef7c108bf9a5b1e21981 Mon Sep 17 00:00:00 2001 From: Sourav Date: Fri, 1 Sep 2023 00:47:32 -0300 Subject: [PATCH 035/486] Update navigation.md --- src/navigation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/navigation.md b/src/navigation.md index 260c68a26..ab6db7722 100644 --- a/src/navigation.md +++ b/src/navigation.md @@ -50,6 +50,7 @@ search: - Fundamentals - [Minimum Stack / Minimum Queue](data_structures/stack_queue_modification.md) - [Sparse Table](data_structures/sparse-table.md) + - [Hare Tortoise Algorithm (Linked List cycle detection)](hare_tortoise_algorithm.md) - Trees - [Disjoint Set Union](data_structures/disjoint_set_union.md) - [Fenwick Tree](data_structures/fenwick.md) From fa35cc41baa9034b3cc0de2cce7b88d11a4a44a1 Mon Sep 17 00:00:00 2001 From: Sourav Date: Fri, 1 Sep 2023 00:51:39 -0300 Subject: [PATCH 036/486] Update navigation.md --- src/navigation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/navigation.md b/src/navigation.md index ab6db7722..e11a9e06b 100644 --- a/src/navigation.md +++ b/src/navigation.md @@ -50,7 +50,7 @@ search: - Fundamentals - [Minimum Stack / Minimum Queue](data_structures/stack_queue_modification.md) - [Sparse Table](data_structures/sparse-table.md) - - [Hare Tortoise Algorithm (Linked List cycle detection)](hare_tortoise_algorithm.md) + - [Hare Tortoise Algorithm (Linked List cycle detection)](data_structures/hare_tortoise_algorithm.md) - Trees - [Disjoint Set Union](data_structures/disjoint_set_union.md) - [Fenwick Tree](data_structures/fenwick.md) From f60fb44f9b618dc4068fddac9f89034ad00312cb Mon Sep 17 00:00:00 2001 From: Harshit Jain <117633610+harshit-jain52@users.noreply.github.com> Date: Fri, 1 Sep 2023 11:23:19 +0530 Subject: [PATCH 037/486] Update fenwick.md --- src/data_structures/fenwick.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data_structures/fenwick.md b/src/data_structures/fenwick.md index 01a49040b..81142bdbd 100644 --- a/src/data_structures/fenwick.md +++ b/src/data_structures/fenwick.md @@ -486,6 +486,7 @@ def range_sum(l, r): * [Codeforces - Goodbye Souvenir](http://codeforces.com/contest/849/problem/E) * [SPOJ - Ada and Species](http://www.spoj.com/problems/ADACABAA/) * [Codeforces - Thor](https://codeforces.com/problemset/problem/704/A) +* [CSES - Forest Queries II](https://cses.fi/problemset/task/1739/) * [Latin American Regionals 2017 - Fundraising](http://matcomgrader.com/problem/9346/fundraising/) ## Other sources From 2f48179b8aea09df8aef31c8524571927a8d2d51 Mon Sep 17 00:00:00 2001 From: Sourav Date: Sat, 9 Sep 2023 22:43:20 -0300 Subject: [PATCH 038/486] Update hare_tortoise_algorithm.md Modified the article. --- .../hare_tortoise_algorithm.md | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/data_structures/hare_tortoise_algorithm.md b/src/data_structures/hare_tortoise_algorithm.md index ae1844d31..c7e93f440 100644 --- a/src/data_structures/hare_tortoise_algorithm.md +++ b/src/data_structures/hare_tortoise_algorithm.md @@ -1,20 +1,19 @@ --- tags: - - Translated -e_maxx_link: hare_tortoise_algorithm + - Original --- # Floyd's Linked List Cycle Finding Algorithm -Given a linked list where the starting point of that linked list is denoted by `head`, and there may or may not be a cycle present. For instance: +Given a linked list where the starting point of that linked list is denoted by **head**, and there may or may not be a cycle present. For instance: ![[tortoise_hare_algo.png]] -Here we need to find out the point `C`, i.e the starting point of the cycle. +Here we need to find out the point **C**, i.e the starting point of the cycle. ## Proposed algorithm -The algorithm is called `Floyd’s Cycle Algorithm or Tortoise n Hare algorithm`. +The algorithm is called **Floyd’s Cycle Algorithm or Tortoise And Hare algorithm**. In order to figure out the starting point of the cycle, we need to figure out of the the cycle even exists or not. So, it involved two steps: 1. Figure out the presence of the cycle. @@ -25,15 +24,15 @@ So, it involved two steps: 2. Both of them will point to head of the linked list initially. 3. $slow$ will move one step at a time. 4. $fast$ will move two steps at a time. (twice as speed as $slow$ pointer). -5. check if at any point they point to the same node before any one(or both) reach null. -6. if they point to any same node at any point of their journey, it would indicate that the cycle indeed exists in the linked list. -7. if we get null, it would indicate that the linked list has no cycle. +5. Check if at any point they point to the same node before any one(or both) reach null. +6. If they point to any same node at any point of their journey, it would indicate that the cycle indeed exists in the linked list. +7. If we get null, it would indicate that the linked list has no cycle. ![[tortouse_hare_cycle_found.png]] -Now, that we have figured out that there is a cycle present in the linked list, for the next step we need to find out the starting point of cycle, i.e., `C. +Now, that we have figured out that there is a cycle present in the linked list, for the next step we need to find out the starting point of cycle, i.e., **C**. ### Step 2: Starting point of the cycle -1. Reset the $slow$ pointer to the `head` of the linked list. +1. Reset the $slow$ pointer to the **head** of the linked list. 2. Move both pointers one step at a time. 3. The point they will meet at will be the starting point of the cycle. @@ -76,28 +75,33 @@ slow: 0 --> 1 --> 2 --> 3 --> 4 (distance covered) fast: 0 --> 2 --> 4 --> 6 --> 8 (distance covered) diff: 0 --> 1 --> 2 --> 3 --> 4 (difference between distance covered by both pointers) ``` - -So, if we assume that Length of cycle is: $L$, we can also say that there will be a point when the difference between $slow$ and $fast$ pointer will grow and reach $NXL$ where $N>0$ . - -When both $slow$ and $fast$ are within cycle, and the difference between their covered lengths is $NXL$, then they are bound to point at same node, indicating the presence of cycle. +Let $\lambda$ denote the length of the cycle, and $\mu$ represent the number of steps required for the slow pointer to reach the cycle. It's important to emphasize that there exists a positive integer $k$ ($k > 0$) such that $k\lambda \geq \mu$. +When the slow pointer has moved $k\lambda$ steps, and the fast pointer has covered $2k\lambda$ steps, both pointers find themselves within the cycle. At this point, there is a separation of $k\lambda$ between them. Given that the cycle's length remains $\lambda$, this signifies that they meet at the same point within the cycle, resulting in their encounter. ### Step 2: Starting point of the cycle Lets try to calculate the distance covered by both of the pointers till they point they met within the cycle. -distance covered by slow = $slowDist$ -distance covered by fast = $fastDist$ +![[tortoise_hare_proof.png]] $slowDist = a + xL + b$ $x\ge0$ -$fastDist = a + yL + b$ $y\ge0$ +$fastDist = a + yL + b$ $y\ge0 -![[tortoise_hare_proof.png]] +- $slowDist$ is the total distance covered by slow pointer. +- $fastDist$ is the total distance covered by fast pointer. +- $a$ is the number of steps both pointers need to take to enter the cycle. +- $b$ is the distance between **C** and **G**, i.e., distance between the starting point of cycle and meeting point of both pointers. +- $x$ is the number of times the slow pointer has circulated inside the cycle, starting from and ending at **C**. +- $y$ is the number of times the fast pointer has circulated inside the cycle, starting from and ending at **C**. +Knowing that $slowDist = 2 \cdot (fastDist)$. $a + yL + b = 2(a + xL + b)$ $a=(y-2x)L-b$ where $y-2x$ is an integer. -We know that $fast$ has already covered $b$, so, we can say that the distance $a$ is same as some multiple of length of the cycle. +This formula can translated as that basically $a$ steps is same as doing some number of full loops in cycle and go $b$ steps backwards. +Since the fast pointer already is $b$ steps ahead of the entry of cycle, if fast pointer does another $a$ steps it will end up at the entry of the cycle. +And since we let the slow pointer start at the start of the linked list, after $a$ steps it will also end up at the cycle entry. So, if they both move $a$ step they both will meet the entry of cycle. # Problems: - [Linked List Cycle (EASY)](https://leetcode.com/problems/linked-list-cycle/) From 92fe69ba517783fb58c3faa6a60c83300f0bf7f5 Mon Sep 17 00:00:00 2001 From: Sourav Date: Sat, 9 Sep 2023 22:46:12 -0300 Subject: [PATCH 039/486] Update hare_tortoise_algorithm.md --- src/data_structures/hare_tortoise_algorithm.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data_structures/hare_tortoise_algorithm.md b/src/data_structures/hare_tortoise_algorithm.md index c7e93f440..30b90cf98 100644 --- a/src/data_structures/hare_tortoise_algorithm.md +++ b/src/data_structures/hare_tortoise_algorithm.md @@ -91,10 +91,10 @@ $fastDist = a + yL + b$ $y\ge0 - $fastDist$ is the total distance covered by fast pointer. - $a$ is the number of steps both pointers need to take to enter the cycle. - $b$ is the distance between **C** and **G**, i.e., distance between the starting point of cycle and meeting point of both pointers. -- $x$ is the number of times the slow pointer has circulated inside the cycle, starting from and ending at **C**. -- $y$ is the number of times the fast pointer has circulated inside the cycle, starting from and ending at **C**. +- $x$ is the number of times the slow pointer has looped inside the cycle, starting from and ending at **C**. +- $y$ is the number of times the fast pointer has looped inside the cycle, starting from and ending at **C**. -Knowing that $slowDist = 2 \cdot (fastDist)$. +Knowing that $slowDist = 2 \cdot (fastDist)$ $a + yL + b = 2(a + xL + b)$ $a=(y-2x)L-b$ where $y-2x$ is an integer. From 428fb2614f105dc858ddd297cf4ba908a0d98fb9 Mon Sep 17 00:00:00 2001 From: Sourav Date: Sat, 9 Sep 2023 22:47:35 -0300 Subject: [PATCH 040/486] Update hare_tortoise_algorithm.md --- src/data_structures/hare_tortoise_algorithm.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data_structures/hare_tortoise_algorithm.md b/src/data_structures/hare_tortoise_algorithm.md index 30b90cf98..de69d3a62 100644 --- a/src/data_structures/hare_tortoise_algorithm.md +++ b/src/data_structures/hare_tortoise_algorithm.md @@ -95,6 +95,7 @@ $fastDist = a + yL + b$ $y\ge0 - $y$ is the number of times the fast pointer has looped inside the cycle, starting from and ending at **C**. Knowing that $slowDist = 2 \cdot (fastDist)$ + $a + yL + b = 2(a + xL + b)$ $a=(y-2x)L-b$ where $y-2x$ is an integer. From 3ee02152f8a1fe613af4d6cd5066c785e22fa82e Mon Sep 17 00:00:00 2001 From: Sourav Date: Sat, 9 Sep 2023 23:03:09 -0300 Subject: [PATCH 041/486] Update hare_tortoise_algorithm.md --- src/data_structures/hare_tortoise_algorithm.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/data_structures/hare_tortoise_algorithm.md b/src/data_structures/hare_tortoise_algorithm.md index de69d3a62..7ebdfb2db 100644 --- a/src/data_structures/hare_tortoise_algorithm.md +++ b/src/data_structures/hare_tortoise_algorithm.md @@ -75,7 +75,7 @@ slow: 0 --> 1 --> 2 --> 3 --> 4 (distance covered) fast: 0 --> 2 --> 4 --> 6 --> 8 (distance covered) diff: 0 --> 1 --> 2 --> 3 --> 4 (difference between distance covered by both pointers) ``` -Let $\lambda$ denote the length of the cycle, and $\mu$ represent the number of steps required for the slow pointer to reach the cycle. It's important to emphasize that there exists a positive integer $k$ ($k > 0$) such that $k\lambda \geq \mu$. +Let $\lambda$ denote the length of the cycle, and $\mu$ represent the number of steps required for the slow pointer to reach the entry of cycle. There exists a positive integer $k$ ($k > 0$) such that $k\lambda \geq \mu$. When the slow pointer has moved $k\lambda$ steps, and the fast pointer has covered $2k\lambda$ steps, both pointers find themselves within the cycle. At this point, there is a separation of $k\lambda$ between them. Given that the cycle's length remains $\lambda$, this signifies that they meet at the same point within the cycle, resulting in their encounter. ### Step 2: Starting point of the cycle @@ -94,14 +94,18 @@ $fastDist = a + yL + b$ $y\ge0 - $x$ is the number of times the slow pointer has looped inside the cycle, starting from and ending at **C**. - $y$ is the number of times the fast pointer has looped inside the cycle, starting from and ending at **C**. -Knowing that $slowDist = 2 \cdot (fastDist)$ +$slowDist = 2 \cdot (fastDist)$ $a + yL + b = 2(a + xL + b)$ -$a=(y-2x)L-b$ where $y-2x$ is an integer. +Resolving the formula we get: -This formula can translated as that basically $a$ steps is same as doing some number of full loops in cycle and go $b$ steps backwards. -Since the fast pointer already is $b$ steps ahead of the entry of cycle, if fast pointer does another $a$ steps it will end up at the entry of the cycle. +$a=(y-2x)L-b$ + +where $y-2x$ is an integer + +This basically means that $a$ steps is same as doing some number of full loops in cycle and go $b$ steps backwards. +Since the fast pointer already is $b$ steps ahead of the entry of cycle, if fast pointer moves another $a$ steps it will end up at the entry of the cycle. And since we let the slow pointer start at the start of the linked list, after $a$ steps it will also end up at the cycle entry. So, if they both move $a$ step they both will meet the entry of cycle. # Problems: From 662c6e1b5029306f6fc6e5190512c49334d995c6 Mon Sep 17 00:00:00 2001 From: Sourav Date: Sat, 9 Sep 2023 23:04:48 -0300 Subject: [PATCH 042/486] Update hare_tortoise_algorithm.md --- src/data_structures/hare_tortoise_algorithm.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data_structures/hare_tortoise_algorithm.md b/src/data_structures/hare_tortoise_algorithm.md index 7ebdfb2db..8b22297ef 100644 --- a/src/data_structures/hare_tortoise_algorithm.md +++ b/src/data_structures/hare_tortoise_algorithm.md @@ -85,7 +85,8 @@ Lets try to calculate the distance covered by both of the pointers till they poi ![[tortoise_hare_proof.png]] $slowDist = a + xL + b$ $x\ge0$ -$fastDist = a + yL + b$ $y\ge0 + +$fastDist = a + yL + b$ $y\ge0$ - $slowDist$ is the total distance covered by slow pointer. - $fastDist$ is the total distance covered by fast pointer. From 43fa0890efcb61862ec775deecdaed578644bd7e Mon Sep 17 00:00:00 2001 From: Sourav Date: Sat, 9 Sep 2023 23:10:52 -0300 Subject: [PATCH 043/486] deleted unused image --- .../tortoise_hare_algo_proof.png | Bin 26102 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/data_structures/tortoise_hare_algo_proof.png diff --git a/src/data_structures/tortoise_hare_algo_proof.png b/src/data_structures/tortoise_hare_algo_proof.png deleted file mode 100644 index 46f7c254bb2371da5d710cddfd293957944302dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26102 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 Date: Sat, 9 Sep 2023 23:17:50 -0300 Subject: [PATCH 044/486] Update hare_tortoise_algorithm.md --- src/data_structures/hare_tortoise_algorithm.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data_structures/hare_tortoise_algorithm.md b/src/data_structures/hare_tortoise_algorithm.md index 8b22297ef..83fad231a 100644 --- a/src/data_structures/hare_tortoise_algorithm.md +++ b/src/data_structures/hare_tortoise_algorithm.md @@ -75,8 +75,8 @@ slow: 0 --> 1 --> 2 --> 3 --> 4 (distance covered) fast: 0 --> 2 --> 4 --> 6 --> 8 (distance covered) diff: 0 --> 1 --> 2 --> 3 --> 4 (difference between distance covered by both pointers) ``` -Let $\lambda$ denote the length of the cycle, and $\mu$ represent the number of steps required for the slow pointer to reach the entry of cycle. There exists a positive integer $k$ ($k > 0$) such that $k\lambda \geq \mu$. -When the slow pointer has moved $k\lambda$ steps, and the fast pointer has covered $2k\lambda$ steps, both pointers find themselves within the cycle. At this point, there is a separation of $k\lambda$ between them. Given that the cycle's length remains $\lambda$, this signifies that they meet at the same point within the cycle, resulting in their encounter. +Let $L$ denote the length of the cycle, and $a$ represent the number of steps required for the slow pointer to reach the entry of cycle. There exists a positive integer $k$ ($k > 0$) such that $k \cdot L \geq a$. +When the slow pointer has moved $k \cdot L$ steps, and the fast pointer has covered $2 \cdot k \cdot L$ steps, both pointers find themselves within the cycle. At this point, there is a separation of $k \cdot L$ between them. Given that the cycle's length remains $L$, this signifies that they meet at the same point within the cycle, resulting in their encounter. ### Step 2: Starting point of the cycle From 91bbeb2914471c8e6f6b4d1ec57d372d31f4e198 Mon Sep 17 00:00:00 2001 From: Sourav Date: Sat, 9 Sep 2023 23:28:20 -0300 Subject: [PATCH 045/486] Update factorization.md Linked tortoise and the hare algorithm. --- src/algebra/factorization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/algebra/factorization.md b/src/algebra/factorization.md index d6b102e87..4a7625e3c 100644 --- a/src/algebra/factorization.md +++ b/src/algebra/factorization.md @@ -271,7 +271,7 @@ In each iteration the first pointer advances to the next element, but the second It's not hard to see, that if there exists a cycle, the second pointer will make at least one full cycle and then meet the first pointer during the next few cycle loops. If the cycle length is $\lambda$ and the $\mu$ is the first index at which the cycle starts, then the algorithm will run in $O(\lambda + \mu)$ time. -This algorithm is also known as **tortoise and the hare algorithm**, based on the tale in which a tortoise (here a slow pointer) and a hare (here a faster pointer) make a race. +This algorithm is also known as **[tortoise and the hare algorithm]**, based on the tale in which a tortoise (here a slow pointer) and a hare (here a faster pointer) make a race. It is actually possible to determine the parameter $\lambda$ and $\mu$ using this algorithm (also in $O(\lambda + \mu)$ time and $O(1)$ space), but here is just the simplified version for finding the cycle at all. The algorithm and returns true as soon as it detects a cycle. From c94db367605921cd74f1cdc6c00a1a931b5cefd5 Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 10 Sep 2023 10:06:32 +0200 Subject: [PATCH 046/486] Fix link --- src/algebra/factorization.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/algebra/factorization.md b/src/algebra/factorization.md index 4a7625e3c..fbd05ff12 100644 --- a/src/algebra/factorization.md +++ b/src/algebra/factorization.md @@ -271,7 +271,9 @@ In each iteration the first pointer advances to the next element, but the second It's not hard to see, that if there exists a cycle, the second pointer will make at least one full cycle and then meet the first pointer during the next few cycle loops. If the cycle length is $\lambda$ and the $\mu$ is the first index at which the cycle starts, then the algorithm will run in $O(\lambda + \mu)$ time. -This algorithm is also known as **[tortoise and the hare algorithm]**, based on the tale in which a tortoise (here a slow pointer) and a hare (here a faster pointer) make a race. +This algorithm is also known as the [Tortoise and Hare algorithm](data_structures/hare_tortoise_algorithm.md), based on the tale in which a tortoise (here a slow pointer) and a hare (here a faster pointer) make a race. + +src/data_structures/hare_tortoise_algorithm.md It is actually possible to determine the parameter $\lambda$ and $\mu$ using this algorithm (also in $O(\lambda + \mu)$ time and $O(1)$ space), but here is just the simplified version for finding the cycle at all. The algorithm and returns true as soon as it detects a cycle. From e788fd61e9e7f14b724a9fc11165cf4652939d57 Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 10 Sep 2023 10:20:59 +0200 Subject: [PATCH 047/486] move tortoise and hare to others section --- src/algebra/factorization.md | 4 +--- src/navigation.md | 2 +- .../tortoise_and_hare.md} | 0 .../tortoise_hare_algo.png | Bin .../tortoise_hare_proof.png | Bin .../tortouse_hare_cycle_found.png | Bin 6 files changed, 2 insertions(+), 4 deletions(-) rename src/{data_structures/hare_tortoise_algorithm.md => others/tortoise_and_hare.md} (100%) rename src/{data_structures => others}/tortoise_hare_algo.png (100%) rename src/{data_structures => others}/tortoise_hare_proof.png (100%) rename src/{data_structures => others}/tortouse_hare_cycle_found.png (100%) diff --git a/src/algebra/factorization.md b/src/algebra/factorization.md index fbd05ff12..c7527feae 100644 --- a/src/algebra/factorization.md +++ b/src/algebra/factorization.md @@ -271,9 +271,7 @@ In each iteration the first pointer advances to the next element, but the second It's not hard to see, that if there exists a cycle, the second pointer will make at least one full cycle and then meet the first pointer during the next few cycle loops. If the cycle length is $\lambda$ and the $\mu$ is the first index at which the cycle starts, then the algorithm will run in $O(\lambda + \mu)$ time. -This algorithm is also known as the [Tortoise and Hare algorithm](data_structures/hare_tortoise_algorithm.md), based on the tale in which a tortoise (here a slow pointer) and a hare (here a faster pointer) make a race. - -src/data_structures/hare_tortoise_algorithm.md +This algorithm is also known as the [Tortoise and Hare algorithm](../others/tortoise_and_hare.md), based on the tale in which a tortoise (here a slow pointer) and a hare (here a faster pointer) make a race. It is actually possible to determine the parameter $\lambda$ and $\mu$ using this algorithm (also in $O(\lambda + \mu)$ time and $O(1)$ space), but here is just the simplified version for finding the cycle at all. The algorithm and returns true as soon as it detects a cycle. diff --git a/src/navigation.md b/src/navigation.md index e11a9e06b..7a1c1961f 100644 --- a/src/navigation.md +++ b/src/navigation.md @@ -50,7 +50,6 @@ search: - Fundamentals - [Minimum Stack / Minimum Queue](data_structures/stack_queue_modification.md) - [Sparse Table](data_structures/sparse-table.md) - - [Hare Tortoise Algorithm (Linked List cycle detection)](data_structures/hare_tortoise_algorithm.md) - Trees - [Disjoint Set Union](data_structures/disjoint_set_union.md) - [Fenwick Tree](data_structures/fenwick.md) @@ -212,6 +211,7 @@ search: - [Scheduling jobs on two machines](schedules/schedule_two_machines.md) - [Optimal schedule of jobs given their deadlines and durations](schedules/schedule-with-completion-duration.md) - Miscellaneous + - [Tortoise and Hare Algorithm (Linked List cycle detection)](others/tortoise_and_hare.md) - [Josephus problem](others/josephus_problem.md) - [15 Puzzle Game: Existence Of The Solution](others/15-puzzle.md) - [The Stern-Brocot Tree and Farey Sequences](others/stern_brocot_tree_farey_sequences.md) diff --git a/src/data_structures/hare_tortoise_algorithm.md b/src/others/tortoise_and_hare.md similarity index 100% rename from src/data_structures/hare_tortoise_algorithm.md rename to src/others/tortoise_and_hare.md diff --git a/src/data_structures/tortoise_hare_algo.png b/src/others/tortoise_hare_algo.png similarity index 100% rename from src/data_structures/tortoise_hare_algo.png rename to src/others/tortoise_hare_algo.png diff --git a/src/data_structures/tortoise_hare_proof.png b/src/others/tortoise_hare_proof.png similarity index 100% rename from src/data_structures/tortoise_hare_proof.png rename to src/others/tortoise_hare_proof.png diff --git a/src/data_structures/tortouse_hare_cycle_found.png b/src/others/tortouse_hare_cycle_found.png similarity index 100% rename from src/data_structures/tortouse_hare_cycle_found.png rename to src/others/tortouse_hare_cycle_found.png From 4cb750d759a69d199464efa5725f9511fcd59a93 Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 10 Sep 2023 10:22:44 +0200 Subject: [PATCH 048/486] add tortoise and hare to new article section --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f3c76cabb..2bb00d5d4 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Compiled pages are published at [https://cp-algorithms.com/](https://cp-algorith ### New articles +- (10 September 2023) [Tortoise and Hare Algorithm](https://cp-algorithms.com/others/tortoise_and_hare.html) - (12 July 2023) [Finding faces of a planar graph](https://cp-algorithms.com/geometry/planar.html) - (18 April 2023) [Bit manipulation](https://cp-algorithms.com/algebra/bit-manipulation.html) - (17 October 2022) [Binary Search](https://cp-algorithms.com/num_methods/binary_search.html) From b296cc4dbb58e88339e887d9db06194b6a4de93e Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 10 Sep 2023 10:31:19 +0200 Subject: [PATCH 049/486] fix showing images --- src/others/tortoise_and_hare.md | 7 +++---- ...ycle_found.png => tortoise_hare_cycle_found.png} | Bin 2 files changed, 3 insertions(+), 4 deletions(-) rename src/others/{tortouse_hare_cycle_found.png => tortoise_hare_cycle_found.png} (100%) diff --git a/src/others/tortoise_and_hare.md b/src/others/tortoise_and_hare.md index 83fad231a..ba0240579 100644 --- a/src/others/tortoise_and_hare.md +++ b/src/others/tortoise_and_hare.md @@ -1,4 +1,3 @@ - --- tags: - Original @@ -8,7 +7,7 @@ tags: Given a linked list where the starting point of that linked list is denoted by **head**, and there may or may not be a cycle present. For instance: -![[tortoise_hare_algo.png]] +
!["Linked list with cycle"](tortoise_hare_algo.png)
Here we need to find out the point **C**, i.e the starting point of the cycle. @@ -28,7 +27,7 @@ So, it involved two steps: 6. If they point to any same node at any point of their journey, it would indicate that the cycle indeed exists in the linked list. 7. If we get null, it would indicate that the linked list has no cycle. -![[tortouse_hare_cycle_found.png]] +
!["Found cycle"](tortoise_hare_cycle_found.png)
Now, that we have figured out that there is a cycle present in the linked list, for the next step we need to find out the starting point of cycle, i.e., **C**. ### Step 2: Starting point of the cycle @@ -82,7 +81,7 @@ When the slow pointer has moved $k \cdot L$ steps, and the fast pointer has cove Lets try to calculate the distance covered by both of the pointers till they point they met within the cycle. -![[tortoise_hare_proof.png]] +
!["Proof"](tortoise_hare_proof.png)
$slowDist = a + xL + b$ $x\ge0$ diff --git a/src/others/tortouse_hare_cycle_found.png b/src/others/tortoise_hare_cycle_found.png similarity index 100% rename from src/others/tortouse_hare_cycle_found.png rename to src/others/tortoise_hare_cycle_found.png From eb09530f563e39c51c9c181fe9791f8166270083 Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 10 Sep 2023 10:47:13 +0200 Subject: [PATCH 050/486] better proof image --- src/others/tortoise_hare_proof.png | Bin 27733 -> 32308 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/others/tortoise_hare_proof.png b/src/others/tortoise_hare_proof.png index 69e4fae343b09f38782bed2312c973a4f1d85bb6..bd62b57a26d44d9300904509df0bb231d877289c 100644 GIT binary patch literal 32308 zcmeFYby(F+_b*I$ceCm4?%D_a zd;a-d*E!eu=h($jAg@+5D{2?N(f>Q@c*(OHnv))Y9IY>faq}GS_UKGa6a(Rh>$K<$7bOA`Bm7 ze)y=>N>?A#3cQ;5W-=aSEbT0y)b+iSGx5IlbpLKUG7m+y_Ltz~TpsRBHLYzxl8-+n zYgg1d$Jx~-xv~sm`dwhMG~%e&)7t&yyylv5zq`fXks-f(O!lrlzjgiMf=*EUNXvfw zkm=0ulMVd9?+guQ=d>rkMSpS}KP~I{F#Apf5)}I-iPlPSHpB3@_Y{x8&FRt8rtgIH zCsI#^g1FgMLKlOmetSz7T^@#=S=`_K81=kkO*I*(jk|p|)x2~2+s|>)X5zqnM!odb zM%(16|FY|nIYyo@(yN)mlPe+;;U(=Qe|n<>_)SuTn1!&ypI8Yzz}5B-N$Kf9Otq=bAm6ef9X&z7?o zf1vFiSG4_kk-r3Sn@)g#N`*(>shfJZyirp|3sp$)sa<2^Ojg5G!x#?J<&0m(QITk| zGWO@9xQ}@0VxLM26QnKU3oM?`AlL~XvWx3@s&8e-OSbyC^<;BY*X=zwyI`{CeCDn# z-G0<``%0?m$nINg5ABSaL*~5Xu7*lU?u(x(0*SdkY>iKQE1Q=BHxnzo?my16RCfKk zSDg9GVt+H7X2L2{H)xPjP51K4!ynlxHB`^(H`dwm^Xs=c6Lst_M}5ZM$_Eu&k$jW1 zc_nFKS(BT#pk~sFc{5gObM!mC8FG=)vH9D6E41W@N8rkD`94j^oqYZ@T}`O~RfuGA zNJs$pzCgE&wy*1Ub-~s8u!K}NXSVfe>XGW?ahbz8H@gHim)jvu>y_@UF1wk-t?H2w zd?rO)fBHUOGU=6U&-z?RimqLA%D7*z)9JWlMnnZ}<88FhkF}QX^p%yZgu6wHQcmwA zaoo!IeCG8tauGid$aj!<#xw*9HW_doJ27DtH_SeBuyH>=T}z@9dvbMwK2q!d*yJjW zJsWf7@dKOmnRlGi>LI$yL9~0w{Bqb@?cxvW_!Hn%I|GvRoxjQTdv)&bl6T2k<#GiS zdl1`y9xsCOo9(;{ckY&IRmt_!j#nNyaw9csrgX^XQZpE}x+UV#%YD6j zwkN;)fTL2Id-*XoP5$>BcPE4H>59;ad}I!Z$`r-@Np?)Zm-LsE?pdbLh4PSaPpJf| zF@q;JGMv7fz_-M= z6p9r{m~SK!>UF0~iNw!R5qH#X(7;2)MK9UGe}{iY^Tqi4TD-w8A{2~hERC_RZ-iNr z)Cis%kjk=czMN)}-;ewyYq66?lksGniWkqxY>7oVWk8#m>+QXI0p&M}O)UBoXcM*; zHZjuO$mfwQrz(q{1QF6t6LN-wp7$PYe96;jBkao9l$>Kr7Syk9=jt_@gY`s<+S$_G z4Def8LSJYre$b1h4&MmKH|LvU4?C@A$^P7tsr3}qR;9&FazJAOwT{&9rBzj%m%&Nt zktVBS&NzlsUgw@@lfJ`@F9g2K9i?f#%qBoYiRJM%i$$aa^wGoWMblO*B;TLe5*Vys z@-k?s5rQuv_zB4qH`xxa{6jK7hktJ$Qdh=cwXi`y8i;UY-8#o{PNg`;z9ajv>{6tB zT<)nU&}aHubP}x|I#&y^>XXbzw9X`)4r1x7xKKangvmr5!C#`Ff4|Gl zfY8o3pCE2%5oX%<%4TdgL@eT&<0d65f|#-H7Qz zTf1?lB)$%07ito=9K!YI*yh`O%Rja>QE@w7jG2hkDW01|aH->MjG0)>^Y&do&F95K zHV|q{h)^ygr@kFV@Da-&6!GjNWMsBepSV<$U>EJm=nZBk9PQL@qK2q6+$w9m#KryO zi+*I4atgKZV<$&Z6Txt2_~k+2&bFx-qtPG|LCtbNe_3>AkmT%%@apLut@EV2M@$wU z^DcyZ7}>P3p00L19?cJh>D?Fj;MjtIISRv`1fHl@@48neD?URTj8N#_qs1NWvwd2| zNJ7u*ArSk%mG&m%NC$;|vZH3kcu~1hTJs`v>o!W(kDyj#J72D#Kt*;%7(FlFqOG5s zGmeP_(Lj0ez5SJ7tCGqUH*TeQrs9pHf(?R#6~pEPRSVW(odzBicD`o^a~3y5xK`V5 zG2r}JLYI1xZQJ+c5py$|`d3LJkdHcM9>vcJMAKREd0s-k&RPuVR~zm z<~cFbqZ3jZ1v5)1<?`+C zOuKfm%?nY~mv6#kjo~7RHUcJj{K!7v74%pYsF@V(2@GEjVdbN44CES!Bg~Gs(J-SE zT0P(H4o>Nu(yp~C`66!p=%XCcLpwi51x(NL1#FgnR#B^bHZp$6-_)6C@u)9UcSldQ z=M-4;#xSkMMi8*jw6oB1nztovo{+^46wB8#u_|xvk&ouJ^WDJ{)D|oeC1+*FiW2%} z(jqyp#&jMC8fK{D-X^>ji4rbS5~8Y1?vj{PQ9>ah6}Gm!Ket-TTRhGd5*Uy! z6=lqlPRMTjkWa|1sOr^X_kgmHE9k*SB8`$*8T;$Y)TkSFmkwf0S$vlV4k2W@ebnJ> zWG^vU_m^Cj$mb$LOQ2UWI4nJhlytqA<83j<^h_}`INIO+ZrEc_o=kt?EgHuzGt6$M z9VK~%TCG^Kra9NZ6!k&$q&8%NaytadF(Y-MquEAn_UP*nAJ%g{ghv_;+!Wl-^{Ym{ zagUn!ID0?*{PG|L-E|8w?iz!ld&?((Md9gHcNKLHdOI?`lD1*yQ4cTk2-*52vgJuTK>O%3B7J{@jF)W0H@6%P;#YL6Sl^A;kpRI{V@k9gnxde0vJ z<{47_OuNsIZn8Fw2)OZ1jyxyz8hOex2*y`__i{hXw%(!44z;<#pS$+@e1nh(2)W;v z;FMUR(vTF1lZlg8Q^=0UpHW^jC}SLI_;?dsMS8qD+%Xrjh3Dku=$M8G?`SV7FziJP zU>^vnPvuol>9)U2o>&VAmbuLTiOdx^yWP{#jVHy<*C1rVLV)Vso)d0y{h_Y+mGT=O z4qIhIVJiDa$fie|I+)F-Gja_w6oo9F3SPH@UtNzc8gMk;*3Y!TIc_(mI5buKTF2oF zpINNulpGpDMaqV#+cCdv`^qlKXByxVx{sQ-ksK7+kD$~~DWONi?)qDsg~lT}&9_@6 zcscnkd*PTr%DNr0vTs6s$rTe_p4Up-n)A@fW750FO3`T_;$rhDG38Mc?fZ*rq{aJ> zE+_qFQJK>sZrmeE!sHin23F{1;jewNv#y&}=cEuE z_~v)y6)o?A1Z3Zod6KNZnh?3{!qulcS$cr9nK@;}?Fd^Cx#akEMMb@jW@qAWyCztZTc;Ew;LaMmQJ zmWM6gITqv2hhKKa@?AA=&Us`>cYmOwigiqQm3uYXFx#@-&f>6)^if>VGIN7lDlKQM-bWWv=t_ z>X`i&cj%;9*o zCfdb~I#dUc_2dF^1H3LgqXrDcQjO;kdeo}izwq7&GO}?ehT8Y^Bn^~@#no5gRE0vW z;n(-pi+1Rl?s?c6qEA;_XpfJij+Wu&J4bcuEs!*XMwD6B&4rukQH-Y|@Io`Y8~RlP zgws`e-TjyPhGyHzCeEaA|?vE4RXpb zYn8DgN=i-QZQcK|Xgivr-@Ga|naW=R7yDL@ueHCw9Bzbvkm#e6FYk7@8g$bBw4PUZ zk2zvPc00~72n!+PS-xid;jzVnQ#Rba&8mw14Tq=cUh28wqc|FPsfF$V&qt|O!6Vf9 z#}6~GhEwhYBjn+|WeS}?!FM*x+D;!0gB({y!t{MtH5 zX0*U<#CJ&35yavYb|4nlS5pw z2Y-_Q-=yemJv>~*d3e0MytustxSic>c=*J`#CUl5dHDIcKo2f=A14npZ!RZy1{jII zXh5ypE!^x}JnWpEATXL{=FXlTQuOrTIpiPfb97Nt`zLuP_rJLS_`&0C=EB3r&CBEH z$n)^U zm4lTd=;{t;<@=8*l^&{T{Bs111vYk$E`LS=X8%V|4?F9BG3!6p27B^nJO92AF#Ml% z|D*Rm_Wq|c=%uD64t2Khge~tOREi!pzqqBdg`K7NpO1W&!q(P&R)SpSeAdETf&xMU zT;}GYqFllvLRNgDynF)uBG&&#>Ye{KUj!4ARuUN zCdg$bBqYQoVs0)XWFc&2DI#kAhm@s-_ycD*M>BAoc8+E?Ry;0FHh&(#7%ncS@lcAM zpPTnzEgBAH9@b!h6uqjQlc)E;9_ZLPT4{Tj!MMpMEG8%*Aj~TwEWpbrBr5Q)PI^{u z?m!Y@H2HYB1^%K7I~H-U8NgUGn4AIve@1}4h%2~RnRz(7={P$(NYTTV1c8nGBi<0n zzYay&&K>mdfl2(|GOumr`q#I=u7HExpGOeLAF&lTv-oQgce58(mVYJ!#+Vw z-QC&R!^_OgO3nuC6zm2F(4XBvSpTq+?LXJzWorfF6ED927q1u>AFmD{uegw)xPUMR zFTXf1FFnuS8|H!C>VNE5lIQ=&6Ujdv{!I;laeuV|^#ZgN&p*}G-#mk{@&DrM@3Z*7 zI0GR4-%0*Q{QWPx{>!fa5eNQ9o&PIc|7F+zhy(wl&i|FJ|6}aJ_*cMV@=|<;Mw<7ru3un1uVXn9Vra zd%X($U_9ub*K{BK2O54d!D!g4be`7~44=`-=!wW(&>d{Bs7CdIF*mvC+{xCiVK9b4`wv%R#>b&JVs3^6~L$ zl<9DeI_l`@(K9h2%iLcxJV>O9`4Dg`&qz?qd&MRoKXeJ*bdpd@8iF$+)w~gj= zi0z58G8F2O_cApVpNJ?NhgzK1ahHMu68ISC!ubDAbaL{R@u8)LnD!_RGt6Pmq&8X5-_n5Lc^uBYaTF z{aLn^M)fqw08>WsdG4C?eK<g212YT-yY3h2C^}N~-YxC>+%G8-)wvtd;0mVX5JnTB`FKN&13ck8x+({}h6MD} z#G#A?a+P`;g-O!#Q8?5!<^vdj$L@{X=96G<`UTNV)WLJvmVK+cwp6*os+fcX#i2xM z*PrKh@ibBth$vXypNk*4?tU&7=PQogV^PlmgMOmwRS=WJAM|JmXG%zWUu( zQ76oU^gDfp-U!)S+nbOvR_BI} z-!9#sy;4%eRm~ElQIl+yA%`g!G=RN$|NeD_PfQ%a{j9CKudgtXnHlrFo-Cv$2OYbr zswz4$F|v^1n7lQs+s}P6U769v-979SCI+Pi61($EJfkTP}^>+0*_o-N{BV0Dad-D)V(vqL1PQlMbeVR^TgQbaPs_v(^0Ka~o`=sE-+5t~_PtjC zxA?{JazYp??pycm@k~KGg7uA!0*2T+9DUO88!AmBSBjwFG^;TdD;r&uc{*z1|N*ii(;Vd&j ziqowu=k*jNnh+g!E6qPwgG>;Rz$w;>3H0 z`elvcOY8T$$yww;4B1&S2Mw7P`;QX!=#rP0pKSBAM~m?E(!HRTcmZKxK*WeZz?C}3 z11FF)Rj8y;tYvogeOS0QLCc1x;b0Lpw4q$amq{_gy#{99a2(HpcR9a=oA?3FpaxG;y7qUZ4cGa)?p|9G%{ik z?NMJELrS0! zTG#G5)&`=Srosel)QI_FSVxB>85YX*%}p&CV2a1nNCofPZz8o_a~M(A59eOK3d0<3 zueDGjz{wfuEmq@U(6dwA?eQV2hafZS#h1=E+D;(=o^;)vVS=?{x{(5{Uu!c#11weQ zRfkR(JR-_!{e-lFt1DleE9s|CpH7BZ^77TPgip@S%z>sKVvpGqeWXd3Hg;R^#1#3B zYG#c3vIvhVcZgTUEN|tk8`jTvNH!u)y%Do-=#Bc@@O4?h6^y48!NDZu?hipkoqVf^ z>FwuNj~GDdjQCg1TnlX4)oiPz3m$f9Tu9fQE_Sdrz@TSRXm4w4=tR^2lMZIEh98CGSW|e z{^DSc&tc^Q_4Y(wlyPN0 zEP2jbMROYv{j|r|RGiS+FPQb;>%r*}(R_+P4(@&q-!26eQYzDV>vg;gQz_@ZzYL>1t?L*t{uIl1=&nbP)M4oXrQXulww9(M4k;2tMPq3OD*v2Wufe)yf zIeM|!wEm$2z8p|^h8njoN;^mF*CTnKbzO(mfc@~T0Xx^pc>URB&jI;8UU!)ztw)R6 z$6zMJ+sk($m`((LIh9M)Az1vojV@+Fh@=Bc0k*Z1 z2$i!XIfkcu&$@Dku9w|z$EM(ppIA*1cT|W|`0HdQ86D1k%BN_{eTfas4X*fGiI;^- z;lJ|>4bdL0S$B}pM!u3l$v3%r5siMX^aWq0&wcPYXYL$v!T^H4XV-eVdd}2wZF6mE zvm?yG1y1EJYS+T;)4uU(Z!1$wq!G;I4j<|!s!zd!mv)@)3&q`Opx+@Bo~J}(dD0)t{oT6LH)#)#y9vS#%7IRM>{>MFk?Q= zAs!Z^2!Sn^p1$0e_O}OB*Fk$fP&|LUSlzrsrO)^aA5$a#(M8%Y2OY-^9a9e4|Hn-Y z@E1yKdHHnkUn2&4o)=|LSkV2g%*r2cU(4Rr{pSDI5OaAcQ{FeO>ss(}{~#lUgkY+l zq3qvwkMwuj)t;L=Tlu*^FZtBr`SWSG40jc=^1r%Y(O2uol`JoY9|u0N;)`}t;3QaY zm7dZ+88ZV?O%fgrGdK6co7r0Nxn0Cz5)m8iIoqexP4%WSu{+gmjcAcZ?1K~SJauGH zD9}^qUa=z=-d7cU-hn+YIwrf=a`y=n9+!CZR4aYvTR$8V{j@0=<3xuCM@SntRF{`n zP^vlS&E6^@?AAoQ`w%?Y$&5F8~MQD zV4(kO!cokymecrjeZlg4XFK%1l5#zP=W?TybiNkyXCW6E1Lgy@aW~2;!~M=|^Yf|2Q9CtEJVy`4rcCWJe@?dJO3i2F`5dy;t`7jvjlDLG@W>K-Qq zE*kd-)IXDjy*z%-kDpRPo4;l?%Tn;f^?^|)%X+UQ{&Y7re@wJuiLU}9k?B?{I$6Do z1USak5?4#jKL>sASTP;nriy6Y!w_G+n0WO%0-=46^F{`K&*XKt#+!%#Y|D2|rbv-{E{LPoHmpu>Cy``j{_XLQMwJjmvKt%w*E9U}jd%@{ zCt$~s(9sLVkAYaW3wT4^TN}TQ6HPy@T63boZe)rh2m2Q~fi9}oH^f1AqZ~u&6;>Kz z%J_Txu^J|%4N2JDJIlB|D+fv15y78HZyUFp0i=6XhJJ zrs(TLE@_mGcH$A5H;5icp>+M6YOTaIw0R!h9A5!#TB;h$E|O(sG5o@hr(nCU!vusD zVB;iq7tG&D?NhXMVn**UET7>L8r*DtWG@X@Ve4Fm@0vk({*lb%FQkrkt~LESJr4+l zVA6^F5438^Y6DI^OJW@eLp7Db&1~S2M0(ihotqKY`|!9_st-qrCqG;|@S%5t>MmY- z-O~?^E6iedj#)PeI4Ndn3YV7sB=;=|g-|kuPKh-d*QjjadK`z#1<({Rh zhQ_V)OJS%~Xz1%jyyd4pdsLpE9JBgPtNZC8oQ#*!wXY~0_b6c?1-j+;l1$?pcKB_IiZp zHppMg?Yo}1kQ@7U1J#o$!H)m?=Gf`Z%Wb>MaRUm|N*B=s=86&HXmFFeYNcPvH8rg| zPU|~92dm`Zr|Uk@*@+Lj`|v5)t#WNJukt;={Gop(;lUPT)ZoSZMC3iUa`buRyaCSG zMIv7b+EVVIB6>m`0T80a%U>@sq+&mLuyR(&%RMBH{p9%(NMTunJW-kvrh7!OIGL(- zi}>(bX>zw5cSx8#!q7?(JEM!%r+e?ipZhpx`^V2rnw~J@pKckqu>gXm4qap&9p6Rn zj?=3&*jkYUVG<_gvNl$2YKQMWp>e!-(Yl+m)A{(@R)iqs=p66WMd-Y+UhF13F_?|YB|2eMhLAs{*UnR zVvw3Wwy3|GM~BZU^qPqK5ujCHT^7BR5%-V}flI_dLGWWCjsuEVHf-;i&m(6+1?LWu z;7UCX_J*KvqsnEp)Nj5F-}RP=+&I7_Cb+H4Un-Avb;wO?5gyc&e?t}rqEgyoS9GwI zXI;NJGex@Dc${eH>3BZ6baQ2A#qZt1y0*?(zhLLxbP#dRm)Yh(x)tDq_a%y@=8rx< zw|S6?{0*7-<7l<)3%P+tIL&fJv)4Egv&RaovlOdEX}wDZI2RXe3N+j*;8xI!>$o#0 zi!PBd;ni;_c+TXNXp2dFq}l0mZbaCeMZBej?+;!FH%q15g|8h6b^Lq&iSG^%Yh|bo zXXv~^;Ndb!#(qe@BK%`graMWhwF=jDqP*wKL}({JKSuHGEpc6&|FFY4rWk$;v+ZAH z(#0A0f3Q0ls9ao8x<2B-KGBp|Y>_kAcpKhTvYkNb^i0>SMQqpr`W6)mfzwghl|l|< z@7#SiHOT%w!{}-0s{e!2gyW83hgPd}9+?D&JIShF9$tEGjnzSNbc7bCkEl-;?;JHg z^^?t2;m65?duf)3F#?ueaXuKf%x#rHUy)Cx$KkYV3XOU`S!fluPmP6)sbq;ty)03A zj%@VQNsOcGZcs5QH3PGD*OY?)2Zx4MRanM6e26i7xOY3Ge*(GS12<3~p~@eT+*q8{ z-8jit;3vjcFlv>fKU6CGQB?_TTwTyOZMz6j&sMyWFBmCrG_lH{;dr#9g6HmXz_!si zuAl*>v|KF<1#7k4*^Z42tP1j(uxx^q)DYN-S+!(73#C^2e7gIS@FQEPY;Xw%zMPXS z)%V1Y5Fv_dQ33zEn5YVZM}uDd?wC#TbcBWWKOiI#Kv@?awPb6@_Sv|*G76CbOQOI^ z1mRas0K;ZzjgS4dgoi_siZJ$Ov3ou^ka(St!}eO# z`;tAI+A5m%3YgIISKkr77gyP7GiT#pyDO;YDAtDp zbA~nRM@cvkI(5jVC1M94Z+#2Ewk>Xl@=H~p980$YZz4~1Hy-|Pj1hvXE3HmLCLn|G>xM)PO zDg5=hkYR&uh+G&-4*)5bsa-fpFq@o~Vgbyzc6ak*a{t1CD2P5?WvWz@!Q*I=9KcWE z%8cfkM{A;KSy^$_UH249iBxiOa`5kkPpG2K&pptP5FF-e3TB!WA$YO?WU%}4j!f8r zY;kds=Gs-6z4b-vb!-C5>DR2RlcOJw_#~^JP*h*ANJ>%#{5bwJ#F;`uxk|sR9Mm{-L41;o+Ew)`YV&w`_4w3`!9vFh(*&I^gHm ztkyTLU%&P~?z{r9=TyDTW58?I+&#z4F>Bbd12W0OmYKX}2zS4HejLc~y;i;6Ey+8X zeqvGpas%Ew1ySBqZGEmg0MwtWv%-wTp^gPv5n1|_ub-L@#8MJwWmcj{Q3Vx~USYSm z?|jhJ(Sd+OMsaa*kb!ZN@b~R)3m|1=GJ%rv3JUfCe&Oo%{It<l^> z#{5R7(6G1lvNflFft2KuXk{2koDg$NcKUgp?|zB8YFdf_0AKI(M)PlVR+&QfBqeWV zzPi3*YWYprVO$*rKx)3Dl&~;Fc6Ro?0UIGQEV%9$Zb|*-d;p331D~RHJytWlZSw+9 zwPEGVgU}?nRGK8EV?8=DK4*bEM)fO?M6nkKWa6HC{mHJl1cZc|hK8}DqpBd0)YtU* z4C=rD)uE<2CQBR++u#d4bry9Ik3ud8^0>eAQ7+a3i8Yc98j#FjCBh&gBC3Jmr%>pH zLOWT|DD47Dz1~4zA_F-m+EU7}<$Cm17eMU6+ncWj<&*~7&q`=*=!v++!KXM|DLbJL z{;fjVOwVkf<2O1+mAs4o4H3|-@Ze+=jfXxzAiAiSWNMXQB?XF zZ_aK5klb23a2y=DrK!FlVm{tk-P}b$hfDoHu!(|-_2!(JS!#hc#DPQj+aMB1;k0~P zFz+8glv)3hB;EIJqt)fd*KVzsA@p(zlHxC@at{|sXcDuP0!2bQb52)=bNF7Yy-0gP z&fDOQ6elly{5f&@`nmJ`O2>Zu^?kr3TQ9972CuC~j-}k?D_zlOw0PVYB%5RfH|pV-z|%I;PhrYv6JU2P)(esfptbJgvr!z=ex@n6y|l;O($1VLK;E z!sCIyj+U7q7IZHOGMiB#OF;*LbiXTkm{#mOP^9@qWBxfK$**c!`Hp9%mF$BdCa+8{ zD|i%23?oE*Mb^|iA1yye_2(}Z807j%%(N*ELz2L<4|`wzHromfaB;s1KI56_JrAQ3 zhd(42+(W)(I!L+1dKJ)y{b6c}&wE~AhvXnQXC)xvtID|C`&#fX!XRaf*75uPHaaP3 z2tdWITchMz_j?>UQuqWki6|MWXD6Ca`7{UgZC{q)vQPV0eR}AurO8Nvhj&CUPxe{$-qI3)S9KRYt%ABqe@5; zv*%#SSIN=aGd#|0ZFS*st`2PJd0*rw9SlR9|ELA1y1SXB89gG$UDoW)m-Bo{EEaXO z+WfV`_Q#w{xVT8~Dm!OD6EVfhx)lF4?(*JD2NsBnA|o|Jg7LnV1_RESVzRTJ@di_zt&@CVw7PYfKP%GzA=)qaScu zlVQ}j-&z~-H}$*>fyaYK^E>cq2&~}IbDj$^9*gW&vzE9y>y5z7ln!WH`nqDt-{T>iE>4%*rWz$}AQ z9tsZ+PheN29>~P60}J(WbhIC+qLahsmAASTdQJ83t*rPkut-|GfA*%k3svOEGY|S% zEUc#|d6~_`26zYb_u*j}*uvss)O>mt>@KI}5dNW8*LFt^cSzmlUkkJf29}*?*G5~G zZ8t0Ha#G*PhfGdtw3qz`HinKQ&Wx7~LWEJE!J3?$4Cn0ZOz8(nM(R10I=QP)l0}3A z0h}dO-}a-S4YeVw%v)8Kmidn@O|p>St}Yn_M8q3pR1G~nl(+%6LSbWLW81H#_`v;g zD6)&8!$&jadu@s$irS8%%tSxxSB3qK^HFd1#FfRMHaZ>#nefLZTX!DwvAS=fK0k!; z3aC;leG8vNp?x#}pi#Ns=cMX^%P$W^+p`BhrEfcRIL)-nrgdSP9Jj?rp_Vyp#Wq$~ z^W^&Ov9*_WesdVa*@9NgvX+-*D)5iQH#sQY-@nb>aH-ie)GAu(M+wDkQp$IqHf>OB5`RGFZO3QhG>JJ?Jo}V z^(yE}37=3VuvYWR(x=PzmyrpVG&B%_gsVKLQh4_`FHs>1$85gA&h~Rrj3ZYCC(d9n zU1f5s7xsr0Uz*4)Cx(xbZP@g6qN7@XE=qJmDf-w^77S zDUSy9MXRI+JDRb7-)=HKxLmF4frTT}V_G4V6(8i@ea2*1Xb$^1;itC~%H1h0`)k-) z|M#W{S@H>eC^6^L#(e=P@;P-#6#DH35IvvY75#QW(O8e))=X84{OP*YKXq+G$5)1n}r zz@U=?Xz%Hj1kJ~48LGPS^4NhErS$Z47q_~u0bz*&FMctadY$F!XFJ7-%-O_Ts@AfW+}oLDDP`k&VH#n0-)jMzNnn_KPhaQcbLlc~KC49UnKjdLqOY}JU?t2A5#o;57{T3%l6P4zQsToEMO z1AkpSDSG#AeJzT%X=H*84^AMGW%aoklk|f3ONr$~WMpKyis`pS;a8iBm|;D^<>lE!B)pNT?Kf zLICpLHNF?msU*GerlzJ&uCBJz@)vk15@6=0)?#R~!^d3`L}@R?8jG1>RWTb$GLfLJ zptrYob$z{;!?RfohnSRf1Gw$1oSgkTQ-xCvcG~Utql#AIk{2_~s+99oT$Hyp_;Y1L zG=5k>gcnB^oE$uIDi)4+7x~?O^oPge5c@QZJ$I9TxKw+gMrl$EzUU1+)rafRdfsKtq z#dIB{d2MG04H!~E$9WbfxHf*;27GYew!~eABz@tvO{yU`11Q&v+UZ3<8152M!%13|q=;X%Ucc86w3Egy!c%vdD!*$gq-?8HG6FgYRmGa}Y{D>D%D?>xbd=lad3i$}v2)%uVoujd| zEOe?_N&3}^iHX-hiPFcBk@^_Q{zgNtS3D+(e~0!n%}SgkeY3NqKpVNdcwrr8Hd*tV z122_Xt@kCSYy`AHQM?vu^^lN>7Pq5}lU48xO&2}CrTVP;eL4{crP~3y50DWOI@`?)< z89f;+Q>;?w?~r800ddF1525JNL2!ZUc)IQgKrjYZHD-1P2-G^SNRvcHAB?vje~5GL z`b7eQKnuR-nkCn=NIn%cZa>IL!a(BuV0v>TqxShUJ3t&jVy30Fb!~6D0$5%g3`|S| z2z?!8g+k9`A6QWvBg7?s2U^B%B(P=JTTlkp)u zYxC%d#%F+4P5^MSoK=EmNk(^DmE|hC%UzOvvL)eRty@j zChMu5Ec#eL`_@$SVn%>M36cASo}Q4$r%d$i^`O`hz)bIrS_y!%P?DEN_;9_B2`hR8 z-otw71Frp9aUwR-v*f4!KXCDNW%wSMQc_V_PL0C-e%=_;B{1;5Z!k2@B zlPk2JZD6%qKskZPic^bgpNuwIilyEF4Yus<{2tT`P^S?_LS8g@GfI%jr3W}wPF$k? z4Gq*tpor za~25g$cEvm^Fu!snDJ|qVJ-m_+DI#0dW4UG48!9=&Vd;#wr`p6+qKVxVn_29uWy4x zu-svv=qEW?F#=S_k1mXX!ZS~qRd(Ojq#^NAQO=I|!z~x_+=w;{P$mHta%g7>_xJs~Ih5V`ipl_1_iL;z_1OQs+g@paVcXxW$q96RipgPR@3B%blZ@M}` za(S&dq!#T=t5z0zu_oG0fCtXGo490;B}F4R7gwaax%x`pJdG#Uqy`&vma)*t-qiK4 z%C>S`P(z!*cB3o!3JsDhI9M_KPMlg4rNJ>;sNPSWp2U38e*g61vc5)tj^?isM~F&- zXmHtSTCi|h`pq2r?c;6Jxy1xgU+JU>x;ljpC6F1XVFd-Va7eyoHMT~62jZ_HW@Q$l zAkH?b)uW%ubPmhD*3=|d$YO6871OKQB zKKe);_cLZv~wfktN7#Sdq;U#(&O6yi`_D(`kz_OALm#mS})S#dkj10@AoBb zTpX**SK9#)^I(L^hte<058<(_y^uGI! z&+*jbirL%l6o>O>jWwPba{*qH`mFm&4*zRaRt^pYP}&CIFAW2On3pdJfDZ<<55QwvH9-q*A=M5<$sL@-WU<!s_NGtc+V!T)elZ2Y!5f+{Mjp zomhzetzqxR@h_AFf;4Z{!M4pp{F3Vpt1@TOj?-bNLreg+(xayJdRl&7f1~^*qlX7X zq`{dQ*jts-;Uz1};Uc*Yzo!nwkO?}83mbBN{PYPFkVUzitjfV^<3VjOK@5_4Eg3-M za&vQm!vx&-c6_SuZZ}+A86%rD`kc+!5M5o}$>)tQ4+nU7$!TdwoyNF@Q)sEfNUv2R zYifA=2M1xQ7}WJ{EVIy;BU4RXH#6GudyBqdb8_d$J&wpVtKQgoD3y317GLffQd6R6 zzLZ1k?WIb2S9eVCU}7cK74gkmn-LTT0_X*wEda37($XMYT-di)$3sU;?I}RxudbRh zGBU1CDbYq$RP1xf$up?q zNlD3ktupV%gy>R~Q!>9UWRHFYH3ho1!*3n%y$Vct*@ALjH}rL*vJ5G|(({!@P@H$=GT$Q{D@Z#{F@;{x+XAmSThtZd_VQ2x_%r~g09gy(=U-X-`}-wpG?B`5 zFuX`&Umg!kp(dbj6xx%7LBYRPl z1n-#&C@3yga`G%S#75wCdJHuqF(kNML8_GFo#z1R3iZHAE9L1{DHNn0t!^Q8v-zNQ z8Rk9s-`{KlFG#_`ffE*#het$!3UY=2ud=TIs=EEw#X=YM(*fi30*N^YqneRXM&YW{*ezOO4v-cb8U28qhde$pT zWoc3tfb+G@&HJkpjjw?z1`6H?(z)HmViX|_&8yc8vRMz_Fg5JUNU3*|@vboEUZ%f# zbmXz{<*wwJrK6>rB;iPD@Gw5+dBXM8mN!vSQ}3@#{(F}%Q$@u4P0!JruT%0v-$Jpk5cbBA4>u8~&SPZMzI0F6tK_51euGNL)8L z3v!%llB_x^K8Q`4Wlvtl#uA^uco8W@AS?^x)dy*uLCP#a#l`H{SEybJalfR@HK;lSWN$j0w;BW~Cr@TITeXfOwnmQ6Pz$}l=KS+M)yE}Oi%(j~9MwZ`8iD`8D`?%;-Z(JoM zbi}t5#ryGD=iHwyc{5U$5PEL4-S!bxF*q0|5M2LQv@q_l_D!SVo%vl*9Q?F>VJ&Ko zB#Dayg)CfLUrKZ;q7xIfQDKa)L0@Mej_7|MS6hDsAOv; z_usL;FI7#!rDj z2=qsQT`u?{r_24x^bLvTk*mlmL%`Z$vfE~O(4(YXih-B_Ri+4NGI$E- z7Q}OXdcQZS)hR)0FBUv zu%9<(yI#L(-OG@Yatovnv}B$++gc|x1&Yb1d)&;oX0sU~Ez~B<8ofjTeN<3jl!Dfi z-%CqR?w?d%Kk(BHkVaF7Ozv2`(Zn6P2v z0lNSChMA~O+;tl?!&U4zdhyxw-DIcf-0*ylNJ}2owPXq8MW@0n+>miN$nI_TH`6m~?;Qs;ht^;=?K&Oo@3 zqanBIcauqp5^nJI01trm_&Nm5R~NkvX-8rR4Ngnnx{&*;+1Y#=&A~P7XDrg6YR092 ztp~Tnf7oO7e)SFce7y^gRDcz8Mud~}{NG#3I+a8jrCl;LNv(t^qK|qBkxH6&Ex&7I zjYhq~&*%~H_V>`apt(|;bzeALFqq0=B$Ahj42+tj3sW=^jlOvdsXXvcP%CsZ*s61! z#eo)v$Bc*o{Ki$BHTQOVM!xNj2nGFkgQQ_Y%4ye2=)I5>KM7x@E@x^g&F2J#m+{$u z3@5|&=t*B%@=-Wg_VWPg>1B2rFH&M=(u zMtwUGemTE{J{wX68d{QTyS-{HfeNKGl-gke;S0wV6_<#&D{HwR7MTM95(;Q)k)0!Hu0j~|5BuBpLk zJ=;f}?w>M38-wPa!98z&^3D0PXOIM!)4iUTcAs2^?Y|=||ho2t*9&#x?e@TAHceJnNosG-BLhAQrxbtUcz=nf1S?_}-*g03 zSq*1FXOF$Jvxyb-0+ind*wH8Q1D9PeecUSm5BBte#6 z3lV-%vB_1U^ab)@jsE(#3RW%Iw}&RDGhSsY0QRy4*I)=r7AS2AZ?B>W;M;)Cn*=pQ z8`Q?3PTd);k`ah)zg#$ss5=@wHkDOXKRq1(Y*{r0yda|J;Bi?TxLA3*w}VU|h<$Uh zeY#jj)Q~TQ$No!?_C~7;_ABxA?QNNS#k4ihLm2*@@B3NtjDYD;auC9tLem(McELB9yeXzD~B%o+c5puWz zNsYeGmIg5?>F_}S=wk3tjoTE$&h!2gjb2UmBhJK&IJ9zO5#U+pITebU_pm28L!DDN_kNR=w}?V!a9F4pndh~RjBX* zNo{~24G?%lcg=2P$&qqBX#w*=NLYnrzRSy_Re>M^!qDHSy9m;cpH)_*@Qay!Yf0x# z{D^sZj3_+}l@D&cke2jr-V}*HcE=0O)v$Mn`8cklf?AxMnmSvm89rX`hNOt*W7V9` z0tUE;>h)_h=?D#5{Ldgo=^~BdHOSAiyOy(nF1InAz}JpwYeQU6fo<| z3h5%`mQ~5EC!i#A`tyF82pkP&LVX#cWHb4UB5-}r485Pv7ObNhg!i8ZEk*(sdzMy z1xd2p!-tX}VF7~C#wg{pDi0O$m90Mk9yV8@sC;|H2xl-u>1rqe?H3rn;VrUWfHiz} z6I9^7T*L~KyUkKXJg$0eFMR~T2#B--0COVhm@|Pd=EWe+8n67Sb%(V_+-UuQcUxQA z&jyd%ki-Y3rcyy4^+tmOC1}qmBC#DD9LR1NVm;B*!}Pe()!^NIWj3`oQY;jw3B5ZE zXGJyE`h_I8uCNc|BNflU2|tHwM>c4wT)6C^ zj6x-3k7YGfBB7!}1XWR_DH5QsV`3E0NYk(WdWu5bI;66a509MpJeaqjZ9r~wx}B5L z33?)}T~-5qK*pyO~MPIGhef z4^i4EkDzuulcu>%(N=HtoY(g~O$#t%OH0citpwsF^YioiTA|86l^r|+J1rZEN;X-E zc})Z!)RJGO5M|N1GFI4aw)C_1evP!Mcr_2R)I_@kcNxJ%tqc~_;^j%_0dL-yBN2}tm;<5E*g07FF5 zi0VR%;%a#iH6FIclP4u04=jB5PFXBN$+cdOoSZya&@LT{`Oq*w!ij~IZvq8q=ow`& zNuBzM^uR*dW*Bsby^TAK~h8 zB_Q*Elz2-bGBUCVg&GEHgSf|4s{LLvxx4=jNonHoTGQ3Og|lD;XXe;UyNrO9fe3P>zshV`c4Q&hXBH;#lnyE^zXSfCkiE zU8_M?1$&g(h~=+nNG222Kz0ZfxK!VDZaGCoO*OSQy1KfTD9`}h3yF?U#`-=< z-58~&cMkK}B_-2ARb4$6KrL`IIZ$y~_#w}&!9x54LV<>|awddq3#frunwvv0PQ%)| z#K_oqFkgwb?ek|ACMFrK1oN&ynn9(OH!^|`cO_z8BB<)ZvMujR3Q~mJO<%l&7T$B^IkW+_0_Gbxy4#w=jYl; z5`2&eFHed?=LzcrdNu9ITcq7?^_lA$9M{8TqG(E?OPQVON*89U6SGwWk#xG}(W6Jy zZ{LF5(nRGmXrB+1fSNokTZdT%tFW*xlmn5k*3^toRm}foTLaUWb*+bDA9KxEX<{N7 z*F3iWrOT9fY-jv49b}Ta&A^ATa&akwg=BawR~Se#pB%Pv=e?2r(zJUGi?Ejd+_S`H ziHo=d1w%syb7^VExe1i)+nDUA#!i~Msz=jC1*G4}TF1(iAEZcbJ!R$SFp9a;&t-MO zl9YJJU@p~}KxCkR)!T|q_su-@&fvk;ZWL;GtWbRLwK#e^HvxB;tGD^+fa}N|!*=9+ zXt)@Bd;PLjL8i(?zNqEcuOj=O98Q(QWi|XwtC!%vWJqPA68cnl z2|IAZU8H=(`k{hC4&C@POTZ|)RHOBXnfPHu+`*1T`K-2S`9qn<+RsTyEWHa9-fF(N z>PyUgEn7JN{zHd+H;zvc*iHIi25{>|rR%aT2{G~fOXhSsbLWJf>ikEXJ({e&RN0^X zOuEuHf+gmTl5l9bU%Pn(j@mh~cXn@8oX5ukbF_!rrRdHtC*4}dTyPwJy9|z1LHIzN zS0D8GhuPlnMN==jX?gnlF*B8Hf0#$gsS`N*g78j9@Up{1)yu2?74==F{Qi;b>Tb-I zjJlVu($X;c7F8iROs40MLsHJUpV9SF*78 z$-*v{pDXh{`&aqhR?4|WX>qEHG|n*;xx%#)b>L+*w6%9@`T4<&w$LX>=n|z3&Vk|K zt{49DnGwmZ_33%G!Lqeyh&wqMy!M#Hvz&#Ld1{-q!ka7MM#omsVn;z_ zI1P@HE;XL>mHGj9*s-t(i6r>Axs`CQbM$5$|7GsZ5I3-E+RIZ+6_RkM>&h$#E3UA{ zX;QxFSGYdgC4=Wv=T7U1Zw4!M@3XxS6~$fG5@;|l4hadN@hH+$GF_aG-u&oX`~!s@$#TEp{Mo_>v9TB z^j-cW-N^_Z(>t@?w{-j5{>Js~_ox*p#4MR5O>^>&BzDswziYc)YO9qo@E7GXvhq+h zB%Jr{HK`<1MWdmt8e;;uO9<;;FQf@SAjb=qq{ndx!)t{sFQ(&jAs;$;&@zsQm*q3- zs(;Lg;RyqL9O1|P?d9UdMN4>Ra&j{9wQCHatr9#q~();W^dMdiDCm~ zrCLzeC_7NX5YJ(cwuR=^^5T1kwrr=!) ze7n_bXB_oy=a8r75NG$t(8sR2&mJL0f_0C3a&zzRs1<4fSd|PfF~Upca2X8fYO>^z zoyPh-04iSdlj9>tAu4e70Qh417h*@OHNkO$;^X1#wW<#?=irS79kY&wekaG4R#yEW z%|I5sJL$G;ihvE`-(%C#9wBeV5W`!WR9#%E#17Z)r#XGU6O;4UwpLn6bSoA-YNZQC zv#P2JSrlR%gW!6_GcbbUo6O9ZF!r+O5$hpHPJXO=8yRK6^+jz{vAYIDaDK7Y;uM(r zhs%E1@+O&7@y320o{nXOzs5q2=6}AP&I#+^uUHbu=>Ovt32|6h|9(APs?$^T&)I^1 zMk2`n?-g;qa6JJ71hxT8u|INVWhe~4MH!`iDf5IHP6gKv}iN<82+Oq+=mFiYK zyz9D@+28c3KqZ^caYinwo2rW$*(xc2xL{@x!07;NrRjU^8|9H74V4*WB9wi68X>=& zujCf;-hBtoozHvM9&8Io60v}J&*kOiMRapB(s_VgI3E3!%yYSF*crItuyyip7UaEip{O<+(=jZ=s+5Q&;`+tYmJEqMF+jMWv+|KT# zGZcV_lT!u6j<@sk<~pTA+@jyiUJ=L!+@s5c$M9BxGD{9T+uN>?hC+I{`1$3vu$M3Q zR8Jrs+^W+}0_XEG2}w};zd-U>RP=Cga8TIy@B{p)uAz|&DJ$4{$LdZOJh$+4IIa&4 z4;NQgYo5D!C6*DqHf+xwsw)6U6iZw!mEA?^I#@;1<9ROn8$RA3)Cpz!4oCofyW}Tf`(JH$z+L;YsMq z1$dL2m&Yb5st5c!@*R+;ds>pWp2jslm0M)7J#%Wt#@RSHILPq?brX_l#{jXD9}yAp z${vb3EcyMc30*g9#yBfRIEn{Hc??B8f<#W?g)5$AN^ zH!KHachFw6$INDO*%r3}2QDT~LDq11tb^AVWXe z-|7e8;xgee#|jfx%vZY-n$7U})a*RZG^0_#&lTq6NO|q7XgqlE5~3lp+E7Vi7ZlWj z#Y2|IT40RaN*0b3G%A(BjBLj1G@!hz2G|5j2YjGH!>1K{az6x51uzH{e5rTH@$vE5 zAbpah^~r(#EdXnX;WKQ(LO>k+SzS@_736q5=64}nz#T6TRPzD?&QgoGD_;+nURYS5 z;4uoq#;3>uLZnD3Lu{PK`Esk-z7Em`VYi+cp%+CTp4sgX`-8afMMf6pc*o0{t7A=7Z)}b zmR_KV)B#Pis^yvg`IZFaA)wT(8{5PcZ+zTgHjNvd?4utXvO&jPw$Pt%1=J_(4>#hB zGV3ku?6f2#o+A__Tqtb?#pYxIn`C(F1m`LZm?N}HG1*Ks=)le1FsJ^iVg2HPfdQJa z(9+UUWZV;;7*05q$e>8|oL@t1s+--W68C*VDPY|TRgu{(Pkz%*;_h_O$Ls6sr!$uW z=@N1hId#gV;BY5HwE^z*D+~$>qH%D`9~#n(i;rJ~W`rRq^tudcXf1rg(wtO5enV|LRWYBK;)@}L^7CmTgG*e!@I0i9{*g0sx% z_G$QIECdz=ZVLgvVL&b}2YekcLX2QsN@NOne-TL(b!UebIx z%MHHh2Z8U}Il%d4va1!q%ngCq5ss1zw9i?B^8cS{If7j6Xogw54}2T|l_#cVX4_%Q z+XqLZwNCl*TzW;oKww_oU5OrBUWp$o_dW7N=7G>9e6X!InV7c2#H?*?hafY_CSli{ z2k<`#>rKh}{5292JyEbUjmP^K&!es3tzv_thj0g!=pW)NwZ0!evOoi?&>lrQ4CFX; zRF0KmkM@Wilpu@{@bzpUoX}e7>hA8Y19Kyxr9}bxDSov~`ZU9yzyy=(D}xchb%-<| zpxj#2-Srl01pT}xNHhO#W}Gw_$8E^{**VyPig-~&!;{TF-5Bk-`kJEB(!tw3A`B36 zFW_Ex-dZ9?jOwr0TV**U&pqBBZeD~d)>NQv4wc%mn+0Lu^kbo~lF#q>@P%0Lx78g? z?OeJV5F#|byH5ewyf?=5j}$_uNO5_&s`$Z3PhC0J)3cC7%xl2Wf>COgXul1m_0@)h z6cphHG)CRwMi;;PnxQCA>p17n5{-pohDz0*K7C8$y(S^~Gh_`_fAe+$saOn8U+EE?ts3i30(jf|$Cmr7Dh&3ArDSN17FVvM(qwr|#xZ=-48+5hO#Jj%2)3b(ThbA3Y zkp$}AGw?rw5CVFGYs5K+Hcvd7HGQc@TqwkS8z2lo(S%lI+0xE#xXuORJR7IwYO7o_ zlFxiyr0|h+yZY)D=5c$-#`6APYq$mlo{MKGNTIht?gN4BB{BtjrVD`*Hs~fjsM}y- zcX0XC=U-#K4@Vq&cYpZpSz2b^`z$o&r&kb~1R#{GcehDt>MS+-z`&uRt1mA&!_>L>sO;ftt z-Lv&2Z<&qdXW^GA3TId81u-n_{M84wIT?Vovgh|mCXa2_pv9ECaz9-60UtTc<%-*;(Z z6CmwEuUlqM7#tcmstd|`K*6fqcMJBEmCALW!$s0C9?HM`o zq(a8eXNoIHd^bui19n+X*f+BZ zM<=KHC1HGIujlz8ssj@3HiNCexOL#w;>6F7l53ei7$2$ID}Nn!XD_Qpef2ukaN?># zmcoO}#$|(_2UJNizV>=NJE)os6dkQ?mYy@Xqr!i;+I+K)U?y2uEv;5HsB2dB@#Du* z7b5S`(bbPn1arPCI!TmwMn6)knwjwKPTPsNqIGcdrqz$yZ0FrLTFWn01RZ03d1kYB z>KpVS1ptqK>gaB>iisWf^E3^Qv98X|d&Lcr+6+zad>dfqM&}mp5tz?))Ci;i>pl63 z$6I^y9peZerf!5yXFFo(U@7_5tf#3)Qx4kh;n1(czlx<=052h^gXWxs$7kNPzJ4h= zQ0aok+T4X?myVlkoqMm38xFOSWBX-e^gIL)6RI0F1-mn>`zv<7_uf3&%hRp@pbue? z`al$MJ-_kb;?6jjD7eP_hKy(Z;ks)FoShxbk9tJhgB2#Dg_$m0xsdD(2s6NefnX5x zluU0Rz>FFtoHbJ@-jDL*Q=x4>D7z9bC|5Lm;OF^7UXb5v3=pDcvC1m=D4AKYSgfcE@v};t^cEkNO;Y0%gX z{*-vIpYhCA%lA0WbEZYdbLBaCSO<09LSS;$Z}DUKdd%IL4#?Y!%F0#-aOcFkOvq$j zv>>4=9H{Aq^>*4}l;4q6ZhpR6Gzz(2(-JZ+-3E7ue7$~0HXEwJ>s_)L-an~^$B2r#P3&@aQ z07Fo^t6L*3`dSSaFv9Gl_xASmhOkf9R|5>nrHiv>9Wd!lP9qs2 z$l$NNwsEd~Qn&g2?rGEqQBGEWQ)W|>e)G|?oy*>Af)&&cPi_4>FCfQppPg}}N&=vs zzdIAd_00;X{dKU3dk)CZ+>4Fdxd5~KtK zG=UpwadW#HOcnRn*QA zM1cnru>Dmqm+qzbhFNI{U+`BZq<6M8)Xa8m_0Xm8C|yKnSkEmDV47#!@z}sX4&>*U z*#v_jgxm?|s$)@I`AouupmjMYcl3sHHxuMA_6d*S2nf3BI*d*2Wl!nB(1caZ4~KBtbO$me`m5>bR!5 z+7j9?JRuDP9?Q0IOY<~E+?qscL(ejNG-0ig^fpf+>FVYDho?zs6X*tdkB<(vK)2X6 zw`tKC%X*3pN=i7Oj^kWx!-IDp@E9lnq6Msfp4NOo^jP;N*$POlU&cyAn|t0!HV+NI zSs>8tPUN`{IAk$CzYPWtkjN5Xg6F|;W8A7gvd3QfRCAC z`|}J)d5(>XD}HQw2<{)@^VxU4llJ|Etrx&E2Z#4VC<7F7C3{Nwzg$oqG(Z2FqEF+Xi1Qqg7%WCr>)o^V^Fw!`Es(5Ll#%Vnj~a( z(w+;K5w-};NQ|=p`7y#~Bj3>)O27_e^mKdFa3YWKjI;2py-=Ms$uc0H>S}?i>S`q2 zgqF0?I+tP!3JPZcqzhBw+?r-)dB1GkP>n}ckf8xEsdAW>@d056;u(9~LN5|O2!~$RxAX7)+WmsgSXldX9&>SHl*Z`di%E}ZGK*r6j1=%b>R0!(` zt^wn-fHo&^9$BqTh(P?mYB)$`5vq_D78VF%gNr+mDk)&A+q~~~4vqkot3halk6Bz? zgyWY7SFA&FQ#)=ONqtun*1sRFXsNRjLaHWMhsFPeIy*a||FI}rHmY-ay#QDaKy4cb zM^Nrjb#-->z2qRA<_J&yIDn_uU9&M`%kgbSuY2YWeq}?g4tNiJloqpMsxlY=f~2;$ zw|g!mM?~O3orRU1T^=bAhO6}g+5mzLAt(T#gMWeps;sA%21A8%9$X5IEEA9=uuN?9 z^b)o;k6{-8X2C;U6MJOcoOZadxd(2t05U0RQBQUFbezyuWRO6|$kLiUd&Ulh7Fd^Z zZI1EA%2PkwFHnvXN&>YOoM5Q90H|~U7zhxditl_($?h8+&r}R?)f(bfpseN=* z7Y=Y?UY-m9c)&Uu0PMjC0Ts_|dCu+}K;Z`lb9cYTvZ~Xzrfb2O4XUtU_nlwA_9BI4 z*lRX^{w=2?xE(DTIefhuZy5#3?0jU^we|w2U+?L1NaZ$M|W1|W-u$HKft1~9G;vR{F!>vUp#%vNIsBO Klq!=n4ER6cDhG}L literal 27733 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 Date: Tue, 12 Sep 2023 21:50:59 +0600 Subject: [PATCH 051/486] Refactor variable name Refactor variable name to align with written description --- src/algebra/binary-exp.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/algebra/binary-exp.md b/src/algebra/binary-exp.md index c57a66db3..52dfd27a5 100644 --- a/src/algebra/binary-exp.md +++ b/src/algebra/binary-exp.md @@ -144,13 +144,13 @@ vector applyPermutation(vector sequence, vector permutation) { return newSequence; } -vector permute(vector sequence, vector permutation, long long b) { - while (b > 0) { - if (b & 1) { +vector permute(vector sequence, vector permutation, long long k) { + while (k > 0) { + if (k & 1) { sequence = applyPermutation(sequence, permutation); } permutation = applyPermutation(permutation, permutation); - b >>= 1; + k >>= 1; } return sequence; } From 1348bc7abd4645d26addb15a3704e4c586879a32 Mon Sep 17 00:00:00 2001 From: Kanwae Kan <44528106+kanwaekan@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:04:23 +0530 Subject: [PATCH 052/486] Added a comma for clarity --- src/others/tortoise_and_hare.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/others/tortoise_and_hare.md b/src/others/tortoise_and_hare.md index ba0240579..efe444273 100644 --- a/src/others/tortoise_and_hare.md +++ b/src/others/tortoise_and_hare.md @@ -83,9 +83,9 @@ Lets try to calculate the distance covered by both of the pointers till they poi
!["Proof"](tortoise_hare_proof.png)
-$slowDist = a + xL + b$ $x\ge0$ +$slowDist = a + xL + b$ , $x\ge0$ -$fastDist = a + yL + b$ $y\ge0$ +$fastDist = a + yL + b$ , $y\ge0$ - $slowDist$ is the total distance covered by slow pointer. - $fastDist$ is the total distance covered by fast pointer. From 64e7f287c10b411a25d0ec516537b68424075c23 Mon Sep 17 00:00:00 2001 From: Kanwae Kan <44528106+kanwaekan@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:11:02 +0530 Subject: [PATCH 053/486] Minor error in Equation --- src/others/tortoise_and_hare.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/others/tortoise_and_hare.md b/src/others/tortoise_and_hare.md index efe444273..71405975e 100644 --- a/src/others/tortoise_and_hare.md +++ b/src/others/tortoise_and_hare.md @@ -94,7 +94,7 @@ $fastDist = a + yL + b$ , $y\ge0$ - $x$ is the number of times the slow pointer has looped inside the cycle, starting from and ending at **C**. - $y$ is the number of times the fast pointer has looped inside the cycle, starting from and ending at **C**. -$slowDist = 2 \cdot (fastDist)$ +$fastDist = 2 \cdot (slowDist)$ $a + yL + b = 2(a + xL + b)$ From d71651b14f3dc57c451ff7f467459a38770ecc7e Mon Sep 17 00:00:00 2001 From: fffelix-huang Date: Sat, 16 Sep 2023 22:08:10 +0800 Subject: [PATCH 054/486] Fix typos --- src/graph/bridge-searching-online.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/graph/bridge-searching-online.md b/src/graph/bridge-searching-online.md index da3af4402..702dc5a88 100644 --- a/src/graph/bridge-searching-online.md +++ b/src/graph/bridge-searching-online.md @@ -79,7 +79,7 @@ We will now consistently disassemble every operation that we need to learn to im For example you can re-root the tree of vertex $a$, and then attach it to another tree by setting the ancestor of $a$ to $b$. However the question about the effectiveness of the re-rooting operation arises: - in order to re-root the tree with the root $r$ to the vertex $v$, it is necessary to necessary to visit all vertices on the path between $v$ and $r$ and redirect the pointers `par[]` in the opposite direction, and also change the references to the ancestors in the DSU that is responsible for the connected components. + in order to re-root the tree with the root $r$ to the vertex $v$, it is necessary to visit all vertices on the path between $v$ and $r$ and redirect the pointers `par[]` in the opposite direction, and also change the references to the ancestors in the DSU that is responsible for the connected components. Thus, the cost of re-rooting is $O(h)$, where $h$ is the height of the tree. You can make an even worse estimate by saying that the cost is $O(\text{size})$ where $\text{size}$ is the number of vertices in the tree. @@ -103,7 +103,7 @@ We will now consistently disassemble every operation that we need to learn to im * Searching for the cycle formed by adding a new edge $(a, b)$. Since $a$ and $b$ are already connected in the tree we need to find the [Lowest Common Ancestor](lca.md) of the vertices $a$ and $b$. - The cycle will consist of the paths from $b$ to the LCA, from the LCA to $b$ and the edge $a$ to $b$. + The cycle will consist of the paths from $b$ to the LCA, from the LCA to $a$ and the edge $a$ to $b$. After finding the cycle we compress all vertices of the detected cycle into one vertex. This means that we already have a complexity proportional to the cycle length, which means that we also can use any LCA algorithm proportional to the length, and don't have to use any fast one. From 0b231a6f40847151deeb3d1f9fc24ba18e9ac49e Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 17 Sep 2023 18:48:17 +0200 Subject: [PATCH 055/486] add problem to max flow --- src/graph/edmonds_karp.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/graph/edmonds_karp.md b/src/graph/edmonds_karp.md index 1b74cd3bb..29753eba1 100644 --- a/src/graph/edmonds_karp.md +++ b/src/graph/edmonds_karp.md @@ -213,3 +213,4 @@ This partition can be easily found using [DFS](depth-first-search.md) starting a - [CSES - Download Speed](https://cses.fi/problemset/task/1694) - [CSES - Police Chase](https://cses.fi/problemset/task/1695) - [CSES - School Dance](https://cses.fi/problemset/task/1696) +- [CSES - Distinct Routes](https://cses.fi/problemset/task/1711) From 9e76b3bb6709383fcb2b6ce4073a4a8e54f6853c Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 17 Sep 2023 18:58:19 +0200 Subject: [PATCH 056/486] spelling --- src/data_structures/segment_tree.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data_structures/segment_tree.md b/src/data_structures/segment_tree.md index 67090a82e..1b212868b 100644 --- a/src/data_structures/segment_tree.md +++ b/src/data_structures/segment_tree.md @@ -602,7 +602,7 @@ This leads to a construction time of $O(n \log^2 n)$ (in general merging two red The $\text{query}$ function is also almost equivalent, only now the $\text{lower_bound}$ function of the $\text{multiset}$ function should be called instead ($\text{std::lower_bound}$ only works in $O(\log n)$ time if used with random-access iterators). Finally the modification request. -To process it, we must go down the tree, and modify all $\text{multiset}$ from the corresponding segments that contain the effected element. +To process it, we must go down the tree, and modify all $\text{multiset}$ from the corresponding segments that contain the affected element. We simply delete the old value of this element (but only one occurrence), and insert the new value. ```cpp @@ -682,7 +682,7 @@ other Segment Trees (somewhat discussed in [Generalization to higher dimensions] ### Range updates (Lazy Propagation) -All problems in the above sections discussed modification queries that only effected a single element of the array each. +All problems in the above sections discussed modification queries that only affected a single element of the array each. However the Segment Tree allows applying modification queries to an entire segment of contiguous elements, and perform the query in the same time $O(\log n)$. #### Addition on segments From 3a91b300823acc6e31f061c43a8f06fc0039e7cb Mon Sep 17 00:00:00 2001 From: 100GODMOON <86097037+100godmoon@users.noreply.github.com> Date: Mon, 18 Sep 2023 00:08:26 +0530 Subject: [PATCH 057/486] Update binary_search.md Added more problems on binary search article #1147 --- src/num_methods/binary_search.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/num_methods/binary_search.md b/src/num_methods/binary_search.md index a95db3c32..f44809c2e 100644 --- a/src/num_methods/binary_search.md +++ b/src/num_methods/binary_search.md @@ -138,6 +138,10 @@ This paradigm is widely used in tasks around trees, such as finding lowest commo * [LeetCode - Find First and Last Position of Element in Sorted Array](https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/) * [LeetCode - Search Insert Position](https://leetcode.com/problems/search-insert-position/) +* [LeetCode - Find Peak Element](https://leetcode.com/problems/find-peak-element/) +* [LeetCode - Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array/) +* [LeetCode - Find the Duplicate Number](https://leetcode.com/problems/find-the-duplicate-number/) +* [LeetCode - Find Right Interval](https://leetcode.com/problems/find-right-interval/) * [LeetCode - Sqrt(x)](https://leetcode.com/problems/sqrtx/) * [LeetCode - First Bad Version](https://leetcode.com/problems/first-bad-version/) * [LeetCode - Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square/) From afe32e8a6766be3d0eddcf97c2cdf3e71ae5655a Mon Sep 17 00:00:00 2001 From: JustAnAverageGuy <68919330+JustAnAverageGuy@users.noreply.github.com> Date: Fri, 22 Sep 2023 16:47:11 +0530 Subject: [PATCH 058/486] Update point-location.md Changed an incorrect double negative typo to the intended meaning. --- src/geometry/point-location.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/geometry/point-location.md b/src/geometry/point-location.md index 4c9ca883d..10c0d3f51 100644 --- a/src/geometry/point-location.md +++ b/src/geometry/point-location.md @@ -5,7 +5,7 @@ tags: --- # Point location in $O(log n)$ -Consider the following problem: you are given a [planar subdivision](https://en.wikipedia.org/wiki/Planar_straight-line_graph) without no vertices of degree one and zero, and a lot of queries. +Consider the following problem: you are given a [planar subdivision](https://en.wikipedia.org/wiki/Planar_straight-line_graph) without any vertices of degree one and zero, and a lot of queries. Each query is a point, for which we should determine the face of the subdivision it belongs to. We will answer each query in $O(\log n)$ offline.
This problem may arise when you need to locate some points in a Voronoi diagram or in some simple polygon. From 44c507ea63e13543f7dcf34192c6daa32cdac829 Mon Sep 17 00:00:00 2001 From: sumitrawat10 <47861908+sumitrawat10@users.noreply.github.com> Date: Sat, 23 Sep 2023 22:18:18 +0530 Subject: [PATCH 059/486] Update 2SAT.md Just a typo --- src/graph/2SAT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graph/2SAT.md b/src/graph/2SAT.md index f22da73f6..ac8b83446 100644 --- a/src/graph/2SAT.md +++ b/src/graph/2SAT.md @@ -14,7 +14,7 @@ Find an assignment of $a, b, c$ such that the following formula is true: $$(a \lor \lnot b) \land (\lnot a \lor b) \land (\lnot a \lor \lnot b) \land (a \lor \lnot c)$$ -SAT is NP-complete, there is no known efficient solution known for it. +SAT is NP-complete, there is no known efficient solution for it. However 2SAT can be solved efficiently in $O(n + m)$ where $n$ is the number of variables and $m$ is the number of clauses. ## Algorithm: From 79b311ae29026b2ab2e6ec323b28d1d0d027ceb6 Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 24 Sep 2023 19:24:14 +0200 Subject: [PATCH 060/486] remove navigation tracking fixes #1153 --- mkdocs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index 4403365d6..8a049c265 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -22,7 +22,6 @@ theme: icon: repo: fontawesome/brands/github features: - - navigation.tracking - navigation.tabs - toc.integrate - search.suggest From 6337369b623699506735fd6a547af519f325fb11 Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 24 Sep 2023 19:32:19 +0200 Subject: [PATCH 061/486] enable permalink next to sections --- mkdocs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mkdocs.yml b/mkdocs.yml index 8a049c265..c6b402e5e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -52,6 +52,8 @@ markdown_extensions: emoji_index: !!python/name:materialx.emoji.twemoji emoji_generator: !!python/name:materialx.emoji.to_svg - meta + - toc: + permalink: true plugins: - mkdocs-simple-hooks: From 3af207a4c444520870e2b3ef3003bdc5201ac782 Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 24 Sep 2023 19:37:38 +0200 Subject: [PATCH 062/486] move practice problem to the binary lifting article --- src/graph/lca_binary_lifting.md | 1 + src/num_methods/binary_search.md | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graph/lca_binary_lifting.md b/src/graph/lca_binary_lifting.md index e8f51dc94..72b47291a 100644 --- a/src/graph/lca_binary_lifting.md +++ b/src/graph/lca_binary_lifting.md @@ -95,4 +95,5 @@ void preprocess(int root) { ``` ## Practice Problems +* [LeetCode - Kth Ancestor of a Tree Node](https://leetcode.com/problems/kth-ancestor-of-a-tree-node) * [Codechef - Longest Good Segment](https://www.codechef.com/problems/LGSEG) diff --git a/src/num_methods/binary_search.md b/src/num_methods/binary_search.md index 31332a209..a95db3c32 100644 --- a/src/num_methods/binary_search.md +++ b/src/num_methods/binary_search.md @@ -143,7 +143,6 @@ This paradigm is widely used in tasks around trees, such as finding lowest commo * [LeetCode - Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square/) * [LeetCode - Guess Number Higher or Lower](https://leetcode.com/problems/guess-number-higher-or-lower/) * [LeetCode - Search a 2D Matrix II](https://leetcode.com/problems/search-a-2d-matrix-ii/) -* [LeetCode - Kth Ancestor of a Tree Node](https://leetcode.com/problems/kth-ancestor-of-a-tree-node) * [Codeforces - Interesting Drink](https://codeforces.com/problemset/problem/706/B/) * [Codeforces - Magic Powder - 1](https://codeforces.com/problemset/problem/670/D1) * [Codeforces - Another Problem on Strings](https://codeforces.com/problemset/problem/165/C) From 7935df482fb2c8fe7e239851bdb6c4ddad5d116f Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 24 Sep 2023 19:42:01 +0200 Subject: [PATCH 063/486] fix some absolute links --- src/data_structures/sqrt-tree.md | 2 +- src/others/josephus_problem.md | 2 +- src/string/manacher.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/data_structures/sqrt-tree.md b/src/data_structures/sqrt-tree.md index 0bfefe772..19e8bc6e4 100644 --- a/src/data_structures/sqrt-tree.md +++ b/src/data_structures/sqrt-tree.md @@ -17,7 +17,7 @@ Sqrt Tree can process such queries in $O(1)$ time with $O(n \cdot \log \log n)$ ### Building sqrt decomposition -Let's make a [sqrt decomposition](/data_structures/sqrt_decomposition.html). We divide our array in $\sqrt{n}$ blocks, each block has size $\sqrt{n}$. For each block, we compute: +Let's make a [sqrt decomposition](sqrt_decomposition.md). We divide our array in $\sqrt{n}$ blocks, each block has size $\sqrt{n}$. For each block, we compute: 1. Answers to the queries that lie in the block and begin at the beginning of the block ($\text{prefixOp}$) 2. Answers to the queries that lie in the block and end at the end of the block ($\text{suffixOp}$) diff --git a/src/others/josephus_problem.md b/src/others/josephus_problem.md index 3599034eb..5200d0ad4 100644 --- a/src/others/josephus_problem.md +++ b/src/others/josephus_problem.md @@ -18,7 +18,7 @@ It is required to find the last number. This task was set by **Flavius Josephus** in the 1st century (though in a somewhat narrower formulation: for $k = 2$). This problem can be solved by modeling the procedure. -Brute force modeling will work $O(n^{2})$. Using a [Segment Tree](/data_structures/segment_tree.html), we can improve it to $O(n \log n)$. +Brute force modeling will work $O(n^{2})$. Using a [Segment Tree](../data_structures/segment_tree.md), we can improve it to $O(n \log n)$. We want something better though. ## Modeling a $O(n)$ solution diff --git a/src/string/manacher.md b/src/string/manacher.md index 78e0c677d..2c7cb35b6 100644 --- a/src/string/manacher.md +++ b/src/string/manacher.md @@ -32,7 +32,7 @@ It's a surprising fact that there is an algorithm, which is simple enough, that ## Solution -In general, this problem has many solutions: with [String Hashing](/string/string-hashing.html) it can be solved in $O(n\cdot \log n)$, and with [Suffix Trees](/string/suffix-tree-ukkonen.html) and fast LCA this problem can be solved in $O(n)$. +In general, this problem has many solutions: with [String Hashing](string-hashing.md) it can be solved in $O(n\cdot \log n)$, and with [Suffix Trees](suffix-tree-ukkonen.md) and fast LCA this problem can be solved in $O(n)$. But the method described here is **sufficiently** simpler and has less hidden constant in time and memory complexity. This algorithm was discovered by **Glenn K. Manacher** in 1975. @@ -124,7 +124,7 @@ Again, we should not forget to update the values $(l, r)$ after calculating each At the first glance it's not obvious that this algorithm has linear time complexity, because we often run the naive algorithm while searching the answer for a particular position. -However, a more careful analysis shows that the algorithm is linear. In fact, [Z-function building algorithm](/string/z-function.html), which looks similar to this algorithm, also works in linear time. +However, a more careful analysis shows that the algorithm is linear. In fact, [Z-function building algorithm](z-function.md), which looks similar to this algorithm, also works in linear time. We can notice that every iteration of trivial algorithm increases $r$ by one. Also $r$ cannot be decreased during the algorithm. So, trivial algorithm will make $O(n)$ iterations in total. From db087ac079f24c2b1eca58ac4dc0e7c88b0642fc Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 24 Sep 2023 20:22:52 +0200 Subject: [PATCH 064/486] remove some problems --- src/num_methods/binary_search.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/num_methods/binary_search.md b/src/num_methods/binary_search.md index f44809c2e..6aa488729 100644 --- a/src/num_methods/binary_search.md +++ b/src/num_methods/binary_search.md @@ -138,15 +138,11 @@ This paradigm is widely used in tasks around trees, such as finding lowest commo * [LeetCode - Find First and Last Position of Element in Sorted Array](https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/) * [LeetCode - Search Insert Position](https://leetcode.com/problems/search-insert-position/) +* [LeetCode - First Bad Version](https://leetcode.com/problems/first-bad-version/) +* [LeetCode - Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square/) * [LeetCode - Find Peak Element](https://leetcode.com/problems/find-peak-element/) * [LeetCode - Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array/) -* [LeetCode - Find the Duplicate Number](https://leetcode.com/problems/find-the-duplicate-number/) * [LeetCode - Find Right Interval](https://leetcode.com/problems/find-right-interval/) -* [LeetCode - Sqrt(x)](https://leetcode.com/problems/sqrtx/) -* [LeetCode - First Bad Version](https://leetcode.com/problems/first-bad-version/) -* [LeetCode - Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square/) -* [LeetCode - Guess Number Higher or Lower](https://leetcode.com/problems/guess-number-higher-or-lower/) -* [LeetCode - Search a 2D Matrix II](https://leetcode.com/problems/search-a-2d-matrix-ii/) * [Codeforces - Interesting Drink](https://codeforces.com/problemset/problem/706/B/) * [Codeforces - Magic Powder - 1](https://codeforces.com/problemset/problem/670/D1) * [Codeforces - Another Problem on Strings](https://codeforces.com/problemset/problem/165/C) From 1810d127f6f075ad47db88b3fc49d477dc2cb2e9 Mon Sep 17 00:00:00 2001 From: Jakob Kogler Date: Sun, 24 Sep 2023 20:27:05 +0200 Subject: [PATCH 065/486] fix broken link --- src/preview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/preview.md b/src/preview.md index 775d4fe87..e0ffe3866 100644 --- a/src/preview.md +++ b/src/preview.md @@ -29,7 +29,7 @@ # Article Preview -Information for contributors +Information for contributors