[{"data":1,"prerenderedAt":4432},["ShallowReactive",2],{"nav:algorithms":3,"lesson:\u002Falgorithms\u002Fsequences\u002Ftries":374,"course-wordcounts":4300,"ref-card-index":4356},[4,28,50,71,120,152,205,230,286,306,331,352],{"module":5,"moduleNumber":6,"slug":7,"lessons":8},"Foundations",1,"foundations",[9,15,21],{"title":10,"path":11,"lessonNumber":6,"topics":12,"summary":14},"What Is an Algorithm?","\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm",[5,13],"Correctness & Induction","An algorithm is a finite, mechanical recipe that transforms inputs into outputs. We pin down what counts as an algorithm, how we write one down, and the three things we always ask of it: is it correct, is it fast, and can we prove it.\n",{"title":16,"path":17,"lessonNumber":18,"topics":19,"summary":20},"Asymptotic Analysis","\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis",2,[16],"We measure an algorithm's running time as a function of its input size, then strip away machine-specific constants and lower-order terms to compare algorithms cleanly. This lesson defines the RAM model and the $O$, $\\Omega$, $\\Theta$, $o$, and $\\omega$ notations, and shows how to read the cost of loops off the page.\n",{"title":22,"path":23,"lessonNumber":24,"topics":25,"summary":27},"Recurrences and the Master Theorem","\u002Falgorithms\u002Ffoundations\u002Frecurrences",3,[26],"Recurrences","Recursive and divide-and-conquer algorithms describe their own running time with a recurrence: $T(n)$ in terms of $T$ on smaller inputs. We solve recurrences three ways — drawing the recursion tree, guessing-and-verifying by induction, and applying the Master Theorem — using merge sort as the running example.\n",{"module":29,"moduleNumber":18,"slug":30,"lessons":31},"Divide & Conquer","divide-and-conquer",[32,38,44],{"title":33,"path":34,"lessonNumber":6,"topics":35,"summary":37},"Divide and Conquer & Mergesort","\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort",[29,36],"Comparison Sorting","Divide and conquer breaks a problem into smaller copies of itself, solves them recursively, and stitches the answers together. We meet the paradigm through mergesort — its merge step, its loop-invariant proof, and the recursion tree that pins its cost at $\\Theta(n\\log n)$ — then glimpse Karatsuba multiplication as a second example of the same idea.",{"title":39,"path":40,"lessonNumber":18,"topics":41,"summary":43},"Quicksort","\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort",[36,42],"Probabilistic Analysis","Quicksort sorts in place by partitioning around a pivot and recursing on each side. We give Lomuto and Hoare partitioning with a correctness invariant, see why a bad pivot costs $\\Theta(n^2)$ while a balanced one gives $\\Theta(n\\log n)$, and prove that randomizing the pivot makes the expected cost $\\Theta(n\\log n)$ on every input.",{"title":45,"path":46,"lessonNumber":24,"topics":47,"summary":49},"Linear-Time Selection","\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection",[48,29],"Order Statistics","Finding the $k$-th smallest element looks like it should require sorting, but it does not. Quickselect adapts quicksort's partition to recurse on just one side, achieving expected $O(n)$. The median-of-medians algorithm guarantees a good pivot with the groups-of-five trick, pushing the worst case down to a provable $O(n)$.",{"module":51,"moduleNumber":24,"slug":52,"lessons":53},"Sorting & Order Statistics","sorting",[54,60,65],{"title":55,"path":56,"lessonNumber":6,"topics":57,"summary":59},"Heaps and Heapsort","\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort",[58,36],"Heaps","A binary heap is a tree we store flat in an array, with index arithmetic standing in for pointers. We build the max-heap property bottom-up in $O(n)$ time, sort in place in $\\Theta(n\\log n)$ by repeatedly extracting the maximum, and reuse the same structure to implement a priority queue.",{"title":61,"path":62,"lessonNumber":18,"topics":63,"summary":64},"Lower Bounds for Comparison Sorting","\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds",[36],"Every sort we have seen runs in $\\Omega(n\\log n)$, and that is no accident. Modeling a sort as a decision tree of comparisons, we show any such tree must have $n!$ leaves, forcing height $\\ge \\log_2(n!) = \\Omega(n\\log n)$ — a worst-case bound no comparison sort can ever beat.",{"title":66,"path":67,"lessonNumber":24,"topics":68,"summary":70},"Sorting in Linear Time","\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting",[69],"Linear-Time Sorting","The $\\Omega(n\\log n)$ barrier only binds algorithms that compare. By instead using keys as array indices we slip past it: counting sort runs in $\\Theta(n+k)$ and is stable, radix sort layers it digit by digit, and bucket sort averages $\\Theta(n)$ on uniform data. We see exactly when each applies.",{"module":72,"moduleNumber":73,"slug":74,"lessons":75},"Data Structures",4,"data-structures",[76,82,88,93,99,105,113],{"title":77,"path":78,"lessonNumber":6,"topics":79,"summary":81},"Elementary Data Structures","\u002Falgorithms\u002Fdata-structures\u002Felementary-structures",[80],"Linear Structures","Every container is built one of two ways: **contiguous** in an array, or **linked** through pointers. We trade cache-friendly random access against $O(1)$ splicing, derive the **amortized $O(1)$** append of a doubling dynamic array, and assemble the two ordered access disciplines — the LIFO **stack** and the FIFO **queue** (with its generalization, the **deque**) — on top of both.",{"title":83,"path":84,"lessonNumber":18,"topics":85,"summary":87},"Hash Tables","\u002Falgorithms\u002Fdata-structures\u002Fhash-tables",[86],"Hashing","A hash table implements the dictionary — insert, search, delete — in expected $O(1)$ time by scattering keys across an array with a hash function. We build up from direct addressing, handle collisions by chaining and by open addressing, analyze the load factor $\\alpha$, and see how universal hashing earns its expected-time guarantee against every input.",{"title":89,"path":90,"lessonNumber":24,"topics":91,"summary":92},"Binary Search Trees","\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees",[89],"A binary search tree keeps keys ordered so that every operation follows a single root-to-leaf path. We state the BST property, give search and insert, find minimum, maximum, and successor, see that an inorder walk emits the keys in sorted order, and confront the catch — every operation costs $O(h)$, and a carelessly built tree degrades to height $h = \\Theta(n)$, motivating balance.",{"title":94,"path":95,"lessonNumber":73,"topics":96,"summary":98},"AVL Trees","\u002Falgorithms\u002Fdata-structures\u002Favl-trees",[97],"Balanced Trees","An AVL tree is the first balanced BST: at every node the two subtrees' heights differ by at most $1$. A Fibonacci-style minimal-node argument forces height $h \\le 1.44\\log_2 n = O(\\log n)$, so search, insert, and delete are all $O(\\log n)$. Insertion rebalances with at most one of four rotation cases (LL, RR, LR, RL); deletion may rotate all the way to the root.",{"title":100,"path":101,"lessonNumber":102,"topics":103,"summary":104},"Balanced Search Trees","\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees",5,[97],"An ordinary BST can degrade to height $\\Theta(n)$; balanced search trees guarantee $h = O(\\log n)$ by maintaining invariants and repairing them after every update. We meet rotations, the local restructuring primitive, then red-black trees, whose color invariants force logarithmic height, and finally B-trees, which trade tall-and-thin for short-and-wide to win on disk.",{"title":106,"path":107,"lessonNumber":108,"topics":109,"summary":112},"Disjoint Sets (Union-Find)","\u002Falgorithms\u002Fdata-structures\u002Funion-find",6,[110,111],"Disjoint Sets","Amortized Analysis","The disjoint-set data structure tracks a partition of elements into groups, answering \"are these two in the same group?\" and merging groups on demand. A forest of parent pointers, sped up by union by rank and path compression, drives every operation to near-constant $O(\\alpha(n))$ amortized time — the engine behind connectivity queries and Kruskal's minimum spanning tree.",{"title":114,"path":115,"lessonNumber":116,"topics":117,"summary":119},"Fenwick & Segment Trees","\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees",7,[118],"Range Queries","A prefix-sum array answers a range sum in $O(1)$ but pays $O(n)$ per update; a plain array updates in $O(1)$ but pays $O(n)$ per range sum. Fenwick and segment trees give us _both_ in $O(\\log n)$. The Fenwick (binary indexed) tree is a tiny array keyed by the low bit; the segment tree is a general balanced tree over canonical ranges that handles any associative aggregate and, with lazy propagation, range updates too.",{"module":121,"moduleNumber":102,"slug":122,"lessons":123},"Sequences & Strings","sequences",[124,130,135,141,147],{"title":125,"path":126,"lessonNumber":6,"topics":127,"summary":129},"Two Pointers, Sliding Windows & Prefix Sums","\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows",[128],"Array Techniques","A family of array idioms that collapse an obvious $O(n^2)$ scan into a single $O(n)$ pass by maintaining an invariant as indices move. We meet two pointers (converging on a sorted array, and a fast\u002Fslow pair for in-place rewriting), the sliding window (fixed and variable size, amortized $O(n)$), and prefix sums, which answer any range-sum in $O(1)$ and count subarrays summing to $k$.",{"title":131,"path":132,"lessonNumber":18,"topics":133,"summary":134},"Monotonic Stacks & Queues","\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks",[128],"A **monotonic stack** keeps its contents sorted by popping every element that would break the order before each push — turning a family of \"previous\u002Fnext greater (or smaller) element\" questions into a single $O(n)$ scan. We derive the next-greater-element routine and its amortized analysis, fuse two such scans to measure the **largest rectangle in a histogram** in linear time, and extend the idea to a **monotonic deque** that streams the **sliding-window maximum** in $O(n)$.",{"title":136,"path":137,"lessonNumber":24,"topics":138,"summary":140},"Binary Search on the Answer","\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer",[139],"Searching","Binary search is not really about arrays — it is about locating the boundary of a **monotone predicate** $p(x)$ in $O(\\log(\\text{range}))$ probes. We first pin down the half-open `while (lo \u003C hi)` template for $\\textsc{lower\\_bound}$ and $\\textsc{upper\\_bound}$, then generalize to \"binary search on the answer\": whenever feasibility is monotone in a numeric parameter, we binary search the parameter itself, calling a feasibility check at each step.",{"title":142,"path":143,"lessonNumber":73,"topics":144,"summary":146},"String Matching: Rabin–Karp, KMP & Z","\u002Falgorithms\u002Fsequences\u002Fstring-matching",[145],"Strings","Given a text $T$ of length $n$ and a pattern $P$ of length $m$, find every occurrence of $P$ in $T$. The naive scan costs $O(nm)$; we beat it three ways. Rabin–Karp uses a **rolling hash** to test alignments in $O(1)$ amortised each, with expected $O(n+m)$. KMP precomputes a **failure function** so the scan never re-reads a text character, for worst-case $O(n+m)$. The **Z-function** gives the same bound from a different angle and converts freely to KMP's table.",{"title":148,"path":149,"lessonNumber":102,"topics":150,"summary":151},"Tries & Prefix Trees","\u002Falgorithms\u002Fsequences\u002Ftries",[145],"A **trie** stores a set of strings in a tree keyed by _characters_, so that insert, search, and prefix-test all run in $O(L)$ time — the length of the key, _independent of how many keys are stored_. Shared prefixes are stored once, which makes tries the natural structure for autocomplete, wildcard dictionaries, board word-search, and — over the alphabet $\\{0,1\\}$ — the maximum-XOR-pair problem.",{"module":153,"moduleNumber":108,"slug":154,"lessons":155},"Graphs","graphs",[156,163,168,173,178,183,188,193,199],{"title":157,"path":158,"lessonNumber":6,"topics":159,"summary":162},"Graph Representations and Traversal","\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal",[160,161],"Graph Representations","Graph Traversal","A graph captures _relationships_ — who connects to whom. We fix the vocabulary, weigh the two standard representations (adjacency list versus matrix), then meet the two explorations you'll use constantly: breadth-first search, which finds shortest paths by number of edges, and depth-first search, whose discovery and finish times reveal a graph's hidden structure. Both run in $O(V + E)$.",{"title":164,"path":165,"lessonNumber":18,"topics":166,"summary":167},"Topological Sort and Strong Connectivity","\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc",[161],"Directed acyclic graphs model dependencies: tasks that must precede other tasks. A _topological order_ lays such a graph out in a line so every edge points forward, and depth-first finish times hand it to us almost for free. We then ask the harder question for graphs _with_ cycles: which vertices can reach each other? The answer is the strongly connected components, found by a two-pass DFS.",{"title":169,"path":170,"lessonNumber":24,"topics":171,"summary":172},"Minimum Spanning Trees","\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees",[169],"Given a weighted network, how do we connect everything as cheaply as possible? The answer is a minimum spanning tree. One lemma, the cut property, justifies _every_ correct MST algorithm, and from it two famous greedy methods fall out: Kruskal's, which grows a forest edge by edge with a union-find structure, and Prim's, which grows a single tree using a priority queue.",{"title":174,"path":175,"lessonNumber":73,"topics":176,"summary":177},"Shortest Paths","\u002Falgorithms\u002Fgraphs\u002Fshortest-paths",[174],"Finding the cheapest route through a weighted network is one of the most-used algorithms in computing. A single operation — _relaxation_ — underlies them all. Dijkstra's algorithm solves the non-negative case greedily; Bellman-Ford handles negative edges and detects negative cycles; and Floyd-Warshall finds the shortest path between _every_ pair of vertices.",{"title":179,"path":180,"lessonNumber":102,"topics":181,"summary":182},"Network Flow","\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow",[179],"How much can flow through a network from source to sink? Max-flow is a surprisingly general model — once you see a problem as flow, a whole toolbox opens up. We build flow networks, find maximum flows by repeatedly pushing along augmenting paths in the residual graph, prove the max-flow min-cut theorem, and watch bipartite matching fall out as a special case.",{"title":184,"path":185,"lessonNumber":108,"topics":186,"summary":187},"Bridges & Articulation Points","\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points",[153],"A **bridge** is an edge whose removal disconnects the graph; an **articulation point** is a vertex whose removal does. Both are single points of failure in a network. A single depth-first search computes discovery times and **low-links**, and two local criteria — $low[v] > disc[u]$ for bridges, $low[v] \\ge disc[u]$ for cut vertices — find them all in $O(V+E)$.",{"title":189,"path":190,"lessonNumber":116,"topics":191,"summary":192},"Lowest Common Ancestor & Binary Lifting","\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor",[153],"Given a rooted tree, the lowest common ancestor of $u$ and $v$ is the deepest node that is an ancestor of both. A naive walk answers one query in $O(h)$; **binary lifting** precomputes the $2^k$-th ancestor of every node in $O(n\\log n)$, then answers $k$-th-ancestor and LCA queries in $O(\\log n)$ each. We derive both jumps, apply them to tree distance, and compare against the Euler-tour + RMQ and Tarjan offline alternatives.",{"title":194,"path":195,"lessonNumber":196,"topics":197,"summary":198},"2-SAT via Implication Graphs","\u002Falgorithms\u002Fgraphs\u002Ftwo-sat",8,[153],"A boolean formula whose every clause has exactly two literals can be solved in _linear_ time — even though its three-literal cousin is NP-complete. The trick is to read each clause as a pair of implications, build a directed graph on the $2n$ literals, and ask a question we already know how to answer: which literals share a strongly connected component? The formula is satisfiable iff no variable lands in the same SCC as its own negation, and the SCCs' topological order hands us a satisfying assignment for free.",{"title":200,"path":201,"lessonNumber":202,"topics":203,"summary":204},"Eulerian Tours","\u002Falgorithms\u002Fgraphs\u002Feulerian-tours",9,[153],"An **Eulerian tour** uses every _edge_ of a graph exactly once. We give the exact parity and balance conditions under which one exists (even degree for undirected graphs, in-degree equal to out-degree for directed) and Hierholzer's $O(E)$ algorithm that constructs one by splicing closed sub-tours. We contrast this sharply with the **Hamiltonian** problem (visit every _vertex_ once), which is NP-complete: visiting edges is easy, visiting vertices is hard.",{"module":206,"moduleNumber":116,"slug":207,"lessons":208},"Greedy Algorithms","greedy",[209,214,220,225],{"title":210,"path":211,"lessonNumber":6,"topics":212,"summary":213},"The Greedy Method","\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method",[206],"A greedy algorithm builds a solution one locally-best choice at a time and never looks back. We pin down the two properties that make this work — the greedy-choice property and optimal substructure — prove the canonical activity-selection algorithm correct with an exchange argument, watch greedy fail spectacularly on the 0\u002F1 knapsack, and glimpse matroids as the theory that says exactly when greed is good.",{"title":215,"path":216,"lessonNumber":18,"topics":217,"summary":219},"Scheduling & Interval Partitioning","\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals",[218],"Greedy","Three classic scheduling problems all yield to greedy algorithms — and all three turn on a single design decision: which key to sort by. Interval scheduling sorts by **finish** time to pack the most compatible jobs; interval partitioning sorts by **start** time and proves the rooms needed equal the maximum overlap **depth**; minimizing maximum lateness sorts by **deadline** and is justified by an adjacent-swap exchange argument.",{"title":221,"path":222,"lessonNumber":24,"topics":223,"summary":224},"Huffman Codes","\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes",[206],"Huffman coding is the greedy method's most beautiful application: it builds a provably optimal prefix-free binary code by repeatedly merging the two least frequent symbols. We develop prefix-free codes as binary trees, give the algorithm with a priority queue, build a Huffman tree from example frequencies, prove optimality with the same greedy-choice-plus-substructure argument, and pin the running time at $O(n\\log n)$.",{"title":226,"path":227,"lessonNumber":73,"topics":228,"summary":229},"Matroids & Exchange Arguments","\u002Falgorithms\u002Fgreedy\u002Fmatroids",[218],"The capstone of the greedy module: _why_ and _when_ a greedy algorithm is provably optimal. We recap the two correctness templates — **greedy-stays-ahead** and the **exchange argument** — then meet the **matroid** $M=(S,\\mathcal{I})$, an abstraction whose **exchange property** is exactly the structure greedy needs. The matroid–greedy theorem says sorting by weight and taking what stays independent yields a maximum-weight basis _if and only if_ the structure is a matroid. Kruskal's MST is the canonical instance; 0\u002F1 knapsack and TSP are the canonical failures.",{"module":231,"moduleNumber":196,"slug":232,"lessons":233},"Dynamic Programming","dynamic-programming",[234,239,245,250,255,260,265,270,275,280],{"title":235,"path":236,"lessonNumber":6,"topics":237,"summary":238},"Principles of Dynamic Programming","\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples",[231,26],"Dynamic programming is recursion with memory: when a recursive solution re-solves the same subproblems again and again, we solve each one once and store the answer. We pin down the two structural conditions that make this work — overlapping subproblems and optimal substructure — contrast top-down memoization with bottom-up tabulation, and distil the whole method into a five-step recipe.",{"title":240,"path":241,"lessonNumber":18,"topics":242,"summary":244},"Sequence Alignment & LCS","\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp",[231,243],"String Structures","Two strings can be compared by asking how much of one survives inside the other. The longest common subsequence (LCS) and edit distance are the two classic answers, and they are the _same_ dynamic program wearing different costs. We derive the LCS recurrence by examining the last characters, fill a worked DP table, reconstruct the subsequence, and then show edit distance as the identical $\\Theta(mn)$ pattern.",{"title":246,"path":247,"lessonNumber":24,"topics":248,"summary":249},"Longest Increasing Subsequence","\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence",[231],"Given a sequence of numbers, how long is its longest strictly increasing subsequence? A first dynamic program indexes subproblems by the element each subsequence _ends at_, giving an $O(n^2)$ solution with parent-pointer reconstruction. A sharper idea, the patience-sorting _tails_ array searched by binary search, drops the time to $O(n\\log n)$. We then fold in the variants: non-decreasing, counting, Russian-doll envelopes, and bitonic.",{"title":251,"path":252,"lessonNumber":73,"topics":253,"summary":254},"Knapsack & Subset Problems","\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack",[231],"We start from $\\textsc{Subset-sum}$ — does some sublist hit a target $t$? — and its include\u002Fexclude recurrence over a boolean table $A(i, u)$, then bolt on values to get 0\u002F1 knapsack as the same machine with $\\lor$ promoted to $\\max$. We fill both tables, recover the chosen items, and confront the surprise that the $\\Theta(nt)$ running time is only _pseudo-polynomial_ — exponential in the bit length $b$, and unimprovable unless $\\mathrm{P}=\\mathrm{NP}$ since subset-sum is $\\textsc{NP-complete}$. The fractional variant reveals the sharp line between greedy and dynamic programming.",{"title":256,"path":257,"lessonNumber":102,"topics":258,"summary":259},"Coin Change & Unbounded Knapsack","\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded",[231],"The previous lesson let each item be taken at most once. Drop that cap — items may be reused _any number of times_ — and the 0\u002F1 knapsack collapses from a two-dimensional table to a one-dimensional one, because there is no longer a prefix of \"already-used\" items to track. We meet **unbounded knapsack**, then its most famous instance, **coin change**: the minimum-coins recurrence $C[a] = 1 + \\min_c C[a-c]$, and the counting variant where the _order of the loops_ decides whether you count unordered combinations or ordered sequences — the classic bug. Greed fails in general but works for canonical coin systems.",{"title":261,"path":262,"lessonNumber":108,"topics":263,"summary":264},"Interval DP","\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp",[231],"Many problems ask for the best way to combine a contiguous range of items, and the answer is a dynamic program over subintervals $[i,j]$ that chooses a split point $k$. We derive the pattern from matrix-chain multiplication — parenthesising a product to minimize scalar multiplications in $O(n^3)$ — distil it into a reusable template filled by increasing interval length, and then meet its sharpest variant: the \"last operation\" trick behind Burst Balloons and cutting a stick, where fixing the _last_ move (not the first) makes the two sides independent.",{"title":266,"path":267,"lessonNumber":116,"topics":268,"summary":269},"Dynamic Programming on Trees","\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp",[231],"When the subproblems of a dynamic program are _rooted subtrees_, a single post-order DFS solves the whole thing in $O(n)$: each node combines the already-computed answers of its children. We meet the archetype — maximum-weight independent set on a tree — then the \"path through a node\" pattern behind tree diameter and maximum path sum, and finally **rerooting**, which computes a per-node answer for _every_ node as root in $O(n)$ with two passes.",{"title":271,"path":272,"lessonNumber":196,"topics":273,"summary":274},"Bitmask DP","\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp",[231],"When a subproblem depends not on an index or a prefix but on _which subset_ of a small ground set has been used, we can encode that subset as the bits of an integer and index a DP table by it. With $n \\le \\sim 20$ the $2^n$ subsets fit in a table, turning $\\Theta(n!)$ brute force into $O(2^n \\cdot \\text{poly}(n))$. We meet the bit tricks, the Held–Karp TSP archetype, assignment by mask, subset-sum partitioning, and submask enumeration with its $3^n$ bound.",{"title":276,"path":277,"lessonNumber":202,"topics":278,"summary":279},"DP Optimizations","\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations",[231],"A correct DP recurrence is only half the battle; its naive evaluation is often a factor of $n$ slower than necessary. This capstone surveys five techniques, monotonic-queue, the convex hull trick, divide-and-conquer optimization, Knuth's optimization, and SOS DP, that each exploit _structure in the transition_ (a sliding window, linear costs, monotone optimal splits, the quadrangle inequality, or subset lattices) to shave an $O(n)$, $O(\\log n)$, or worse factor off the running time.",{"title":281,"path":282,"lessonNumber":283,"topics":284,"summary":285},"Dynamic Programming on Graphs","\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs",10,[231],"Many graph algorithms are dynamic programs in disguise: the subproblem is the _best value reachable under a restricted resource_ — intermediate vertices allowed, edges allowed, or a topological prefix — and edge _relaxation_ is the DP transition. We frame Floyd–Warshall as the archetype ($O(V^3)$ all-pairs shortest paths), Bellman–Ford as a DP over path length (the at-most-$K$-stops variant), DAG-DP in topological order ($O(V+E)$), and Warshall's transitive closure as the boolean analog.",{"module":287,"moduleNumber":202,"slug":288,"lessons":289},"Backtracking & Search","backtracking",[290,296,301],{"title":291,"path":292,"lessonNumber":6,"topics":293,"summary":295},"Backtracking: Subsets, Permutations & Combinations","\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals",[294],"Backtracking","Backtracking builds a solution one choice at a time and abandons a partial solution the moment it cannot be completed, exploring a state-space tree by depth-first search. We meet the universal choose\u002Fexplore\u002Fun-choose template, derive the canonical enumerations — subsets ($2^n$), permutations ($n!$), and combinations ($\\binom{n}{k}$) — handle duplicate elements by skipping equal siblings, and see how pruning turns an exponential search into a tractable one.",{"title":297,"path":298,"lessonNumber":18,"topics":299,"summary":300},"Constraint Search: N-Queens & Sudoku","\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search",[294],"Many hard puzzles are **constraint satisfaction problems**: assign each variable a value from its domain so that every constraint holds. Backtracking solves them by assigning variables one at a time and rejecting a partial assignment the instant a constraint breaks. We make the rejection cheap — $O(1)$ conflict checks for N-Queens via column and diagonal sets — and prune harder with **forward checking**, **MRV** ordering, and **constraint propagation**, which is what lets an exponential search actually finish.",{"title":302,"path":303,"lessonNumber":24,"topics":304,"summary":305},"Branch & Bound and Meet in the Middle","\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound",[294],"Plain backtracking prunes a search tree by _feasibility_; for _optimization_ problems we can prune far more aggressively by _value_. **Branch and bound** keeps the best complete solution found so far and discards any partial solution whose optimistic bound cannot beat it. **Meet in the middle** splits the instance in two, enumerates each half, and recombines by binary search — turning $2^n$ into $O(2^{n\u002F2}\\,n)$ and pushing exact search out to $n \\approx 40$.",{"module":307,"moduleNumber":283,"slug":308,"lessons":309},"Mathematical Algorithms","mathematical-algorithms",[310,316,321,326],{"title":311,"path":312,"lessonNumber":6,"topics":313,"summary":315},"Number Theory: GCD & Modular Arithmetic","\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics",[314],"Number Theory","This lesson opens the mathematical-algorithms module with the bedrock of computational number theory. We prove Euclid's recurrence $\\gcd(a,b)=\\gcd(b,\\,a\\bmod b)$ and its $O(\\log\\min(a,b))$ running time, extend it to recover Bézout coefficients $x,y$ with $ax+by=\\gcd(a,b)$, and build modular arithmetic on residue classes — including when a modular inverse $a^{-1}\\bmod m$ exists and how to compute it.",{"title":317,"path":318,"lessonNumber":18,"topics":319,"summary":320},"Modular Exponentiation & Primality","\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality",[314],"Computing $a^n \\bmod m$ naively costs $n$ multiplications; **repeated squaring** does it in $O(\\log n)$ by reading the bits of the exponent. We use this routine to state **Fermat's little theorem** (and the modular inverse it gives), then to test primality — trial division, the probabilistic **Fermat** and **Miller–Rabin** tests, and the deterministic witness set that settles primality for every 64-bit number.",{"title":322,"path":323,"lessonNumber":24,"topics":324,"summary":325},"Sieves & Factorization","\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization",[314],"The previous lesson tested one number for primality; here we ask for _all_ primes up to $n$ at once. The **sieve of Eratosthenes** cross-cuts composites in $O(n\\log\\log n)$, and a **linear sieve** does it in $O(n)$ while recording each number's **smallest prime factor**, which then factors any $x \\le n$ in $O(\\log x)$. From a factorization $x = \\prod p_i^{e_i}$ the multiplicative functions $\\tau$, $\\sigma$, and Euler's totient $\\varphi$ fall out immediately.",{"title":327,"path":328,"lessonNumber":73,"topics":329,"summary":330},"Combinatorics & Counting","\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics",[314],"Counting is the arithmetic of finite sets. We build up from permutations $n!$ and combinations $\\binom{n}{k}$, prove Pascal's rule by a bijection, and count multisets with stars and bars. The practical core is computing $\\binom{n}{k}\\bmod p$ in $O(1)$ from precomputed factorials and inverse factorials. We close with inclusion–exclusion and the Chinese Remainder Theorem, both of which lean on the modular inverse from the previous lesson.",{"module":332,"moduleNumber":333,"slug":334,"lessons":335},"Computational Geometry",11,"computational-geometry",[336,342,347],{"title":337,"path":338,"lessonNumber":6,"topics":339,"summary":341},"Geometric Primitives & Orientation","\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives",[340],"Geometry","Computational geometry is built on a single reliable primitive — the **orientation test**, a sign of a cross product that tells whether three points turn left, right, or lie collinear. From points-as-vectors and the dot and cross products we derive orientation, segment intersection, the shoelace area formula, and point-in-polygon tests, keeping all arithmetic **exact and integer** so that no floating-point rounding can corrupt a sign.",{"title":343,"path":344,"lessonNumber":18,"topics":345,"summary":346},"Convex Hull","\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull",[340],"The convex hull is the smallest convex polygon enclosing a point set — the rubber band snapped around the nails. We build it with Andrew's monotone chain, sorting by $(x,y)$ and sweeping a lower and upper hull while popping any non-left turn via the orientation primitive, in $O(n\\log n)$. A reduction from sorting shows that bound is optimal, and the hull unlocks diameter, smallest enclosing rectangle, and more through rotating calipers.",{"title":348,"path":349,"lessonNumber":24,"topics":350,"summary":351},"Sweep-Line Algorithms","\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line",[340],"The plane-sweep paradigm turns a static $2$-D geometry problem into a dynamic $1$-D ordered-set problem: a vertical line sweeps left to right, stopping at an $x$-sorted **event queue** while a balanced-BST **status structure** tracks the objects it currently crosses, ordered by $y$. We derive Bentley–Ottmann segment intersection in $O((n+k)\\log n)$, recover closest-pair in $O(n\\log n)$, and reduce skyline, rectangle-area, and overlap problems to $\\pm1$ event sweeps.",{"module":353,"moduleNumber":354,"slug":355,"lessons":356},"Intractability",12,"intractability",[357,363,367],{"title":358,"path":359,"lessonNumber":6,"topics":360,"summary":362},"P, NP, and Reductions","\u002Falgorithms\u002Fintractability\u002Fp-np-reductions",[361],"NP-Completeness","Most problems we have met so far have fast algorithms. A vast and important family seemingly does not. This lesson builds the vocabulary for that divide: decision problems, the class $\\mathsf{P}$ of problems we can solve quickly, the class $\\mathsf{NP}$ of problems whose solutions we can _check_ quickly, and polynomial-time reductions, the tool that lets us compare the difficulty of two problems without solving either.",{"title":361,"path":364,"lessonNumber":18,"topics":365,"summary":366},"\u002Falgorithms\u002Fintractability\u002Fnp-completeness",[361],"Some problems in $\\mathsf{NP}$ are universally hardest: every other problem in $\\mathsf{NP}$ reduces to them. This lesson defines $\\mathsf{NP}$-hard and $\\mathsf{NP}$-complete, states the Cook–Levin theorem that anchors the whole edifice on **SAT**, walks the web of reductions that grows from it, and gives the four-step recipe for proving a brand-new problem $\\mathsf{NP}$-complete.",{"title":368,"path":369,"lessonNumber":24,"topics":370,"summary":373},"Coping with NP-Hardness","\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness",[371,372],"Approximation","Heuristics","Proving a problem $\\mathsf{NP}$-hard is the beginning, not the end. The world still needs answers. This lesson surveys the four honest responses to hardness: approximation algorithms with a provable ratio (worked through a 2-approximation for vertex cover), heuristics and local search, exact exponential methods like branch and bound, and exploiting special structure in the instances you actually face.",{"id":375,"title":148,"blurb":376,"body":377,"description":4263,"extension":4264,"meta":4265,"module":121,"navigation":4267,"path":149,"practice":4268,"rawbody":4282,"readingTime":4283,"seo":4288,"sources":4289,"status":4296,"stem":4297,"summary":151,"topics":4298,"__hash__":4299},"course\u002F01.algorithms\u002F05.sequences\u002F05.tries.md","",{"type":378,"value":379,"toc":4251},"minimark",[380,574,644,649,775,933,936,1020,1048,1083,1132,1172,1337,1522,1854,2059,2075,2079,2274,2325,2329,2360,2613,2663,2718,2870,2883,2888,3250,3366,3510,3792,3796,3860,3864,4153,4247],[381,382,383,384,439,440,444,445,470,471,475,476,479,480,496,497,514,515,554,555,559,560,563,564,566,567,569,570,573],"p",{},"A balanced search tree gives us ",[385,386,389],"span",{"className":387},[388],"katex",[385,390,394],{"className":391,"ariaHidden":393},[392],"katex-html","true",[385,395,398,403,410,415,425,430,434],{"className":396},[397],"base",[385,399],{"className":400,"style":402},[401],"strut","height:1em;vertical-align:-0.25em;",[385,404,409],{"className":405,"style":408},[406,407],"mord","mathnormal","margin-right:0.0278em;","O",[385,411,414],{"className":412},[413],"mopen","(",[385,416,419],{"className":417},[418],"mop",[385,420,424],{"className":421,"style":423},[406,422],"mathrm","margin-right:0.0139em;","log",[385,426],{"className":427,"style":429},[428],"mspace","margin-right:0.1667em;",[385,431,433],{"className":432},[406,407],"n",[385,435,438],{"className":436},[437],"mclose",")"," lookups by comparing whole keys to\neach other. But when the keys are ",[441,442,443],"em",{},"strings",", a single comparison is not ",[385,446,448],{"className":447},[388],[385,449,451],{"className":450,"ariaHidden":393},[392],[385,452,454,457,460,463,467],{"className":453},[397],[385,455],{"className":456,"style":402},[401],[385,458,409],{"className":459,"style":408},[406,407],[385,461,414],{"className":462},[413],[385,464,466],{"className":465},[406],"1",[385,468,438],{"className":469},[437],":\ndeciding whether ",[472,473,474],"code",{},"\"international\""," precedes ",[472,477,478],{},"\"internet\""," already costs five\ncharacter comparisons, so a BST of ",[385,481,483],{"className":482},[388],[385,484,486],{"className":485,"ariaHidden":393},[392],[385,487,489,493],{"className":488},[397],[385,490],{"className":491,"style":492},[401],"height:0.4306em;",[385,494,433],{"className":495},[406,407]," strings of length ",[385,498,500],{"className":499},[388],[385,501,503],{"className":502,"ariaHidden":393},[392],[385,504,506,510],{"className":505},[397],[385,507],{"className":508,"style":509},[401],"height:0.6833em;",[385,511,513],{"className":512},[406,407],"L"," really spends\n",[385,516,518],{"className":517},[388],[385,519,521],{"className":520,"ariaHidden":393},[392],[385,522,524,527,530,533,536,539,545,548,551],{"className":523},[397],[385,525],{"className":526,"style":402},[401],[385,528,409],{"className":529,"style":408},[406,407],[385,531,414],{"className":532},[413],[385,534,513],{"className":535},[406,407],[385,537],{"className":538,"style":429},[428],[385,540,542],{"className":541},[418],[385,543,424],{"className":544,"style":423},[406,422],[385,546],{"className":547,"style":429},[428],[385,549,433],{"className":550},[406,407],[385,552,438],{"className":553},[437]," per operation. Worse, the ",[556,557,558],"a",{"href":90},"BST"," throws away an obvious source of\nstructure, namely that ",[472,561,562],{},"\"intern\"",", ",[472,565,478],{},", and ",[472,568,474],{}," all ",[441,571,572],{},"share a\nprefix",", and re-examines those shared characters on every descent.",[381,575,576,577,581,582,586,587,590,591,615,616,634,635],{},"A ",[578,579,580],"strong",{},"trie"," (from re_trie_val; usually pronounced ",[583,584,585],"q",{},"try",") exploits exactly that\nstructure. Instead of comparing keys against each other, it routes each key\n",[441,588,589],{},"one character at a time"," down a tree whose edges are labeled by characters. A\nroot-to-node path spells a prefix; following the characters of a key leads to\nthe unique node that key reaches. Lookup costs ",[385,592,594],{"className":593},[388],[385,595,597],{"className":596,"ariaHidden":393},[392],[385,598,600,603,606,609,612],{"className":599},[397],[385,601],{"className":602,"style":402},[401],[385,604,409],{"className":605,"style":408},[406,407],[385,607,414],{"className":608},[413],[385,610,513],{"className":611},[406,407],[385,613,438],{"className":614},[437],", where the work depends only on\nthe key being searched for, ",[578,617,618,619],{},"never on ",[385,620,622],{"className":621},[388],[385,623,625],{"className":624,"ariaHidden":393},[392],[385,626,628,631],{"className":627},[397],[385,629],{"className":630,"style":492},[401],[385,632,433],{"className":633},[406,407],", the number of stored keys.",[636,637,638],"sup",{},[556,639,466],{"href":640,"ariaDescribedBy":641,"dataFootnoteRef":376,"id":643},"#user-content-fn-skiena-trie",[642],"footnote-label","user-content-fnref-skiena-trie",[645,646,648],"h2",{"id":647},"the-structure","The structure",[650,651,653],"callout",{"type":652},"definition",[381,654,655,658,659,661,662,678,679,694,695,712,713,716,717,732,733,774],{},[578,656,657],{},"Definition (trie)."," A ",[441,660,580],{}," over an alphabet ",[385,663,665],{"className":664},[388],[385,666,668],{"className":667,"ariaHidden":393},[392],[385,669,671,674],{"className":670},[397],[385,672],{"className":673,"style":509},[401],[385,675,677],{"className":676},[406],"Σ"," is a rooted tree in\nwhich every edge is labeled by a character of ",[385,680,682],{"className":681},[388],[385,683,685],{"className":684,"ariaHidden":393},[392],[385,686,688,691],{"className":687},[397],[385,689],{"className":690,"style":509},[401],[385,692,677],{"className":693},[406],", the edges leaving any\nnode carry distinct labels, and the concatenation of labels on the path from\nthe root to a node ",[385,696,698],{"className":697},[388],[385,699,701],{"className":700,"ariaHidden":393},[392],[385,702,704,707],{"className":703},[397],[385,705],{"className":706,"style":492},[401],[385,708,711],{"className":709,"style":710},[406,407],"margin-right:0.0359em;","v"," is the ",[441,714,715],{},"prefix"," represented by ",[385,718,720],{"className":719},[388],[385,721,723],{"className":722,"ariaHidden":393},[392],[385,724,726,729],{"className":725},[397],[385,727],{"className":728,"style":492},[401],[385,730,711],{"className":731,"style":710},[406,407],". A boolean flag\n",[385,734,736],{"className":735},[388],[385,737,739],{"className":738,"ariaHidden":393},[392],[385,740,742,745,749,753,758,761,765,768,771],{"className":741},[397],[385,743],{"className":744,"style":402},[401],[385,746,748],{"className":747},[406,407],"i",[385,750,752],{"className":751},[406,407],"s",[385,754,757],{"className":755,"style":756},[406,407],"margin-right:0.0576em;","E",[385,759,433],{"className":760},[406,407],[385,762,764],{"className":763},[406,407],"d",[385,766,414],{"className":767},[413],[385,769,711],{"className":770,"style":710},[406,407],[385,772,438],{"className":773},[437]," marks the nodes whose prefix is a complete stored key.",[381,776,777,778,781,782,839,840,843,844,872,873,563,875,566,877,879,880,932],{},"The root represents the empty prefix. Note the two-level bookkeeping: a node can\nexist purely as an interior waypoint (a prefix of some longer key) yet ",[441,779,780],{},"not"," be a\nkey itself. In the word set ",[385,783,785],{"className":784},[388],[385,786,788],{"className":787,"ariaHidden":393},[392],[385,789,791,794,798,807,812,815,822,825,828,835],{"className":790},[397],[385,792],{"className":793,"style":402},[401],[385,795,797],{"className":796},[413],"{",[385,799,802],{"className":800},[406,801],"text",[385,803,806],{"className":804},[406,805],"texttt","to",[385,808,811],{"className":809},[810],"mpunct",",",[385,813],{"className":814,"style":429},[428],[385,816,818],{"className":817},[406,801],[385,819,821],{"className":820},[406,805],"tea",[385,823,811],{"className":824},[810],[385,826],{"className":827,"style":429},[428],[385,829,831],{"className":830},[406,801],[385,832,834],{"className":833},[406,805],"ted",[385,836,838],{"className":837},[437],"}"," the node\nat path ",[472,841,842],{},"t"," exists but is not a stored word, so its ",[385,845,847],{"className":846},[388],[385,848,850],{"className":849,"ariaHidden":393},[392],[385,851,853,857,860,863,866,869],{"className":852},[397],[385,854],{"className":855,"style":856},[401],"height:0.6944em;",[385,858,748],{"className":859},[406,407],[385,861,752],{"className":862},[406,407],[385,864,757],{"className":865,"style":756},[406,407],[385,867,433],{"className":868},[406,407],[385,870,764],{"className":871},[406,407]," is false; the nodes at\n",[472,874,806],{},[472,876,821],{},[472,878,834],{}," have ",[385,881,883],{"className":882},[388],[385,884,886,919],{"className":885,"ariaHidden":393},[392],[385,887,889,892,895,898,901,904,907,911,916],{"className":888},[397],[385,890],{"className":891,"style":856},[401],[385,893,748],{"className":894},[406,407],[385,896,752],{"className":897},[406,407],[385,899,757],{"className":900,"style":756},[406,407],[385,902,433],{"className":903},[406,407],[385,905,764],{"className":906},[406,407],[385,908],{"className":909,"style":910},[428],"margin-right:0.2778em;",[385,912,915],{"className":913},[914],"mrel","=",[385,917],{"className":918,"style":910},[428],[385,920,922,926],{"className":921},[397],[385,923],{"className":924,"style":925},[401],"height:0.6151em;",[385,927,929],{"className":928},[406,801],[385,930,393],{"className":931},[406],".",[381,934,935],{},"Each node needs a way to find a child by character. Two standard choices:",[937,938,939,1008],"ul",{},[940,941,942,945,946,962,963,966,967,991,992,1007],"li",{},[578,943,944],{},"Array children."," A fixed array of ",[385,947,949],{"className":948},[388],[385,950,952],{"className":951,"ariaHidden":393},[392],[385,953,955,958],{"className":954},[397],[385,956],{"className":957,"style":402},[401],[385,959,961],{"className":960},[406],"∣Σ∣"," pointers per node (e.g. 26 for\nlowercase letters, or ",[472,964,965],{},"children[2]"," for a binary trie). Child lookup is a single\n",[385,968,970],{"className":969},[388],[385,971,973],{"className":972,"ariaHidden":393},[392],[385,974,976,979,982,985,988],{"className":975},[397],[385,977],{"className":978,"style":402},[401],[385,980,409],{"className":981,"style":408},[406,407],[385,983,414],{"className":984},[413],[385,986,466],{"className":987},[406],[385,989,438],{"className":990},[437]," index, at the cost of ",[385,993,995],{"className":994},[388],[385,996,998],{"className":997,"ariaHidden":393},[392],[385,999,1001,1004],{"className":1000},[397],[385,1002],{"className":1003,"style":402},[401],[385,1005,961],{"className":1006},[406]," slots per node whether used or not.",[940,1009,1010,658,1016,1019],{},[578,1011,1012,1015],{},[556,1013,1014],{"href":84},"Hash-map"," children.",[472,1017,1018],{},"char → node"," map per node, so a node stores only the\nchildren it actually has. Smaller for sparse, large alphabets (Unicode), with a\nsmall constant-factor hashing overhead.",[645,1021,1023,1024],{"id":1022},"operations-all-ol","Operations: all ",[385,1025,1027],{"className":1026},[388],[385,1028,1030],{"className":1029,"ariaHidden":393},[392],[385,1031,1033,1036,1039,1042,1045],{"className":1032},[397],[385,1034],{"className":1035,"style":402},[401],[385,1037,409],{"className":1038,"style":408},[406,407],[385,1040,414],{"className":1041},[413],[385,1043,513],{"className":1044},[406,407],[385,1046,438],{"className":1047},[437],[381,1049,1050,1051,1054,1055,1082],{},"Insertion walks down from the root, ",[441,1052,1053],{},"creating"," a child node whenever the needed\nedge is missing, and sets ",[385,1056,1058],{"className":1057},[388],[385,1059,1061],{"className":1060,"ariaHidden":393},[392],[385,1062,1064,1067,1070,1073,1076,1079],{"className":1063},[397],[385,1065],{"className":1066,"style":856},[401],[385,1068,748],{"className":1069},[406,407],[385,1071,752],{"className":1072},[406,407],[385,1074,757],{"className":1075,"style":756},[406,407],[385,1077,433],{"className":1078},[406,407],[385,1080,764],{"className":1081},[406,407]," on the final node. Search walks the same path\nbut never creates; it fails the moment a needed edge is absent.",[1084,1085,1089],"pre",{"className":1086,"code":1087,"language":1088,"meta":376,"style":376},"language-algorithm shiki shiki-themes Vesper Light - Orange Boost (Quick Open Adjusted) vesper","caption: $\\textsc{Insert}(T, w)$ — add word $w = w_1 w_2 \\dots w_L$\n$x \\gets root(T)$\nfor $i \\gets 1$ to $L$ do\n  $c \\gets w_i$\n  if $child(x, c) = \\text{nil}$ then\n    $child(x, c) \\gets \\textsc{NewNode}()$\n  $x \\gets child(x, c)$\n$isEnd(x) \\gets \\text{true}$\n","algorithm",[472,1090,1091,1097,1102,1107,1112,1117,1122,1127],{"__ignoreMap":376},[385,1092,1094],{"class":1093,"line":6},"line",[385,1095,1096],{},"caption: $\\textsc{Insert}(T, w)$ — add word $w = w_1 w_2 \\dots w_L$\n",[385,1098,1099],{"class":1093,"line":18},[385,1100,1101],{},"$x \\gets root(T)$\n",[385,1103,1104],{"class":1093,"line":24},[385,1105,1106],{},"for $i \\gets 1$ to $L$ do\n",[385,1108,1109],{"class":1093,"line":73},[385,1110,1111],{},"  $c \\gets w_i$\n",[385,1113,1114],{"class":1093,"line":102},[385,1115,1116],{},"  if $child(x, c) = \\text{nil}$ then\n",[385,1118,1119],{"class":1093,"line":108},[385,1120,1121],{},"    $child(x, c) \\gets \\textsc{NewNode}()$\n",[385,1123,1124],{"class":1093,"line":116},[385,1125,1126],{},"  $x \\gets child(x, c)$\n",[385,1128,1129],{"class":1093,"line":196},[385,1130,1131],{},"$isEnd(x) \\gets \\text{true}$\n",[1084,1133,1135],{"className":1086,"code":1134,"language":1088,"meta":376,"style":376},"caption: $\\textsc{Search}(T, w)$ — is $w$ a stored key?\n$x \\gets root(T)$\nfor $i \\gets 1$ to $L$ do\n  $c \\gets w_i$\n  if $child(x, c) = \\text{nil}$ then\n    return false\n  $x \\gets child(x, c)$\nreturn $isEnd(x)$\n",[472,1136,1137,1142,1146,1150,1154,1158,1163,1167],{"__ignoreMap":376},[385,1138,1139],{"class":1093,"line":6},[385,1140,1141],{},"caption: $\\textsc{Search}(T, w)$ — is $w$ a stored key?\n",[385,1143,1144],{"class":1093,"line":18},[385,1145,1101],{},[385,1147,1148],{"class":1093,"line":24},[385,1149,1106],{},[385,1151,1152],{"class":1093,"line":73},[385,1153,1111],{},[385,1155,1156],{"class":1093,"line":102},[385,1157,1116],{},[385,1159,1160],{"class":1093,"line":108},[385,1161,1162],{},"    return false\n",[385,1164,1165],{"class":1093,"line":116},[385,1166,1126],{},[385,1168,1169],{"class":1093,"line":196},[385,1170,1171],{},"return $isEnd(x)$\n",[381,1173,1174,1175,1190,1191,1215,1216,1243,1244,1247,1248,1272,1273,1275,1276,1292,1293,1320,1321,1336],{},"Each loop runs ",[385,1176,1178],{"className":1177},[388],[385,1179,1181],{"className":1180,"ariaHidden":393},[392],[385,1182,1184,1187],{"className":1183},[397],[385,1185],{"className":1186,"style":509},[401],[385,1188,513],{"className":1189},[406,407]," times and does ",[385,1192,1194],{"className":1193},[388],[385,1195,1197],{"className":1196,"ariaHidden":393},[392],[385,1198,1200,1203,1206,1209,1212],{"className":1199},[397],[385,1201],{"className":1202,"style":402},[401],[385,1204,409],{"className":1205,"style":408},[406,407],[385,1207,414],{"className":1208},[413],[385,1210,466],{"className":1211},[406],[385,1213,438],{"className":1214},[437]," work per character (one indexed slot or\none hash probe), so ",[578,1217,1218,1219],{},"insert, search, and the prefix test all run in ",[385,1220,1222],{"className":1221},[388],[385,1223,1225],{"className":1224,"ariaHidden":393},[392],[385,1226,1228,1231,1234,1237,1240],{"className":1227},[397],[385,1229],{"className":1230,"style":402},[401],[385,1232,409],{"className":1233,"style":408},[406,407],[385,1235,414],{"className":1236},[413],[385,1238,513],{"className":1239},[406,407],[385,1241,438],{"className":1242},[437],".\n",[472,1245,1246],{},"startsWith(p)"," is identical to ",[385,1249,1251],{"className":1250},[388],[385,1252,1254],{"className":1253,"ariaHidden":393},[392],[385,1255,1257,1260],{"className":1256},[397],[385,1258],{"className":1259,"style":856},[401],[385,1261,1265],{"className":1262},[1263,1264],"enclosing","textsc",[385,1266,1268],{"className":1267},[406,801],[385,1269,1271],{"className":1270},[406],"Search"," except it returns ",[441,1274,393],{}," as soon as\nthe path for ",[385,1277,1279],{"className":1278},[388],[385,1280,1282],{"className":1281,"ariaHidden":393},[392],[385,1283,1285,1289],{"className":1284},[397],[385,1286],{"className":1287,"style":1288},[401],"height:0.625em;vertical-align:-0.1944em;",[385,1290,381],{"className":1291},[406,407]," exists, ignoring ",[385,1294,1296],{"className":1295},[388],[385,1297,1299],{"className":1298,"ariaHidden":393},[392],[385,1300,1302,1305,1308,1311,1314,1317],{"className":1301},[397],[385,1303],{"className":1304,"style":856},[401],[385,1306,748],{"className":1307},[406,407],[385,1309,752],{"className":1310},[406,407],[385,1312,757],{"className":1313,"style":756},[406,407],[385,1315,433],{"className":1316},[406,407],[385,1318,764],{"className":1319},[406,407],", because any node on a valid path\nwitnesses that ",[385,1322,1324],{"className":1323},[388],[385,1325,1327],{"className":1326,"ariaHidden":393},[392],[385,1328,1330,1333],{"className":1329},[397],[385,1331],{"className":1332,"style":1288},[401],[385,1334,381],{"className":1335},[406,407]," is a prefix of some stored key.",[650,1338,1340],{"type":1339},"remark",[381,1341,1342,1345,1346,1385,1386,1411,1412,1427,1428,1452,1453,1477,1478,1481,1482,1506,1507,932],{},[578,1343,1344],{},"Remark (The decisive contrast)."," A balanced BST of strings pays\n",[385,1347,1349],{"className":1348},[388],[385,1350,1352],{"className":1351,"ariaHidden":393},[392],[385,1353,1355,1358,1361,1364,1367,1370,1376,1379,1382],{"className":1354},[397],[385,1356],{"className":1357,"style":402},[401],[385,1359,409],{"className":1360,"style":408},[406,407],[385,1362,414],{"className":1363},[413],[385,1365,513],{"className":1366},[406,407],[385,1368],{"className":1369,"style":429},[428],[385,1371,1373],{"className":1372},[418],[385,1374,424],{"className":1375,"style":423},[406,422],[385,1377],{"className":1378,"style":429},[428],[385,1380,433],{"className":1381},[406,407],[385,1383,438],{"className":1384},[437]," per operation: ",[385,1387,1389],{"className":1388},[388],[385,1390,1392],{"className":1391,"ariaHidden":393},[392],[385,1393,1395,1399,1405,1408],{"className":1394},[397],[385,1396],{"className":1397,"style":1398},[401],"height:0.8889em;vertical-align:-0.1944em;",[385,1400,1402],{"className":1401},[418],[385,1403,424],{"className":1404,"style":423},[406,422],[385,1406],{"className":1407,"style":429},[428],[385,1409,433],{"className":1410},[406,407]," comparisons, each up to ",[385,1413,1415],{"className":1414},[388],[385,1416,1418],{"className":1417,"ariaHidden":393},[392],[385,1419,1421,1424],{"className":1420},[397],[385,1422],{"className":1423,"style":509},[401],[385,1425,513],{"className":1426},[406,407]," characters.\nA hash set of strings pays ",[385,1429,1431],{"className":1430},[388],[385,1432,1434],{"className":1433,"ariaHidden":393},[392],[385,1435,1437,1440,1443,1446,1449],{"className":1436},[397],[385,1438],{"className":1439,"style":402},[401],[385,1441,409],{"className":1442,"style":408},[406,407],[385,1444,414],{"className":1445},[413],[385,1447,513],{"className":1448},[406,407],[385,1450,438],{"className":1451},[437]," to hash the key but loses all ordering and\nprefix structure. A trie pays ",[385,1454,1456],{"className":1455},[388],[385,1457,1459],{"className":1458,"ariaHidden":393},[392],[385,1460,1462,1465,1468,1471,1474],{"className":1461},[397],[385,1463],{"className":1464,"style":402},[401],[385,1466,409],{"className":1467,"style":408},[406,407],[385,1469,414],{"className":1470},[413],[385,1472,513],{"className":1473},[406,407],[385,1475,438],{"className":1476},[437]," ",[441,1479,1480],{},"and"," keeps the keys in sorted order and\nanswers prefix queries directly. The ",[385,1483,1485],{"className":1484},[388],[385,1486,1488],{"className":1487,"ariaHidden":393},[392],[385,1489,1491,1494,1500,1503],{"className":1490},[397],[385,1492],{"className":1493,"style":1398},[401],[385,1495,1497],{"className":1496},[418],[385,1498,424],{"className":1499,"style":423},[406,422],[385,1501],{"className":1502,"style":429},[428],[385,1504,433],{"className":1505},[406,407]," factor simply disappears: trie\ncost is independent of ",[385,1508,1510],{"className":1509},[388],[385,1511,1513],{"className":1512,"ariaHidden":393},[392],[385,1514,1516,1519],{"className":1515},[397],[385,1517],{"className":1518,"style":492},[401],[385,1520,433],{"className":1521},[406,407],[1523,1524,1528,1766],"figure",{"className":1525},[1526,1527],"tikz-figure","tikz-diagram-rendered",[1529,1530,1535],"svg",{"xmlns":1531,"width":1532,"height":1533,"viewBox":1534},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","348.007","104.973","-75 -75 261.005 78.729",[1536,1537,1540,1561,1568,1583,1587,1594,1633,1648,1655,1670,1694,1700,1706,1714,1737,1750,1763],"g",{"stroke":1538,"style":1539},"currentColor","stroke-miterlimit:10;stroke-width:.4",[1536,1541,1545,1555],{"stroke":1542,"fontFamily":1543,"fontSize":1544},"none","cmr8","8",[1536,1546,1548],{"transform":1547},"translate(45.427 -8.603)",[1549,1550],"path",{"d":1551,"fill":1538,"stroke":1538,"className":1552,"style":1554},"M-25.089-54.009L-25.089-55.231Q-25.089-55.259-25.058-55.290Q-25.026-55.321-25.003-55.321L-24.897-55.321Q-24.827-55.321-24.811-55.259Q-24.749-54.938-24.610-54.698Q-24.472-54.458-24.239-54.317Q-24.007-54.177-23.698-54.177Q-23.460-54.177-23.251-54.237Q-23.042-54.298-22.905-54.446Q-22.768-54.595-22.768-54.841Q-22.768-55.095-22.979-55.261Q-23.190-55.427-23.460-55.481L-24.081-55.595Q-24.487-55.673-24.788-55.929Q-25.089-56.185-25.089-56.560Q-25.089-56.927-24.888-57.149Q-24.686-57.372-24.362-57.470Q-24.038-57.567-23.698-57.567Q-23.233-57.567-22.936-57.360L-22.714-57.544Q-22.690-57.567-22.659-57.567L-22.608-57.567Q-22.577-57.567-22.550-57.540Q-22.522-57.513-22.522-57.481L-22.522-56.497Q-22.522-56.466-22.548-56.437Q-22.573-56.407-22.608-56.407L-22.714-56.407Q-22.749-56.407-22.776-56.435Q-22.804-56.462-22.804-56.497Q-22.804-56.896-23.056-57.116Q-23.308-57.337-23.706-57.337Q-24.061-57.337-24.345-57.214Q-24.628-57.091-24.628-56.786Q-24.628-56.567-24.427-56.435Q-24.225-56.302-23.979-56.259L-23.354-56.146Q-22.925-56.056-22.616-55.759Q-22.308-55.462-22.308-55.048Q-22.308-54.478-22.706-54.200Q-23.104-53.923-23.698-53.923Q-24.249-53.923-24.600-54.259L-24.897-53.946Q-24.921-53.923-24.956-53.923L-25.003-53.923Q-25.026-53.923-25.058-53.954Q-25.089-53.985-25.089-54.009M-21.780-55.755Q-21.780-56.235-21.548-56.651Q-21.315-57.067-20.905-57.317Q-20.495-57.567-20.018-57.567Q-19.288-57.567-18.890-57.126Q-18.491-56.685-18.491-55.954Q-18.491-55.849-18.585-55.825L-21.034-55.825L-21.034-55.755Q-21.034-55.345-20.913-54.989Q-20.792-54.634-20.520-54.417Q-20.249-54.200-19.819-54.200Q-19.456-54.200-19.159-54.429Q-18.862-54.657-18.761-55.009Q-18.753-55.056-18.667-55.071L-18.585-55.071Q-18.491-55.044-18.491-54.962Q-18.491-54.954-18.499-54.923Q-18.561-54.696-18.700-54.513Q-18.839-54.329-19.030-54.196Q-19.222-54.063-19.440-53.993Q-19.659-53.923-19.897-53.923Q-20.268-53.923-20.606-54.060Q-20.944-54.196-21.212-54.448Q-21.479-54.700-21.630-55.040Q-21.780-55.380-21.780-55.755M-21.026-56.063L-19.065-56.063Q-19.065-56.368-19.167-56.659Q-19.268-56.950-19.485-57.132Q-19.702-57.313-20.018-57.313Q-20.319-57.313-20.550-57.126Q-20.780-56.938-20.903-56.647Q-21.026-56.356-21.026-56.063M-17.905-54.833Q-17.905-55.317-17.503-55.612Q-17.100-55.907-16.550-56.026Q-15.999-56.146-15.507-56.146L-15.507-56.435Q-15.507-56.661-15.622-56.868Q-15.737-57.075-15.934-57.194Q-16.132-57.313-16.362-57.313Q-16.788-57.313-17.073-57.208Q-17.003-57.181-16.956-57.126Q-16.909-57.071-16.884-57.001Q-16.858-56.931-16.858-56.856Q-16.858-56.751-16.909-56.659Q-16.960-56.567-17.052-56.517Q-17.143-56.466-17.249-56.466Q-17.354-56.466-17.446-56.517Q-17.538-56.567-17.589-56.659Q-17.640-56.751-17.640-56.856Q-17.640-57.274-17.251-57.421Q-16.862-57.567-16.362-57.567Q-16.030-57.567-15.677-57.437Q-15.323-57.306-15.095-57.052Q-14.866-56.798-14.866-56.450L-14.866-54.649Q-14.866-54.517-14.794-54.407Q-14.722-54.298-14.593-54.298Q-14.468-54.298-14.399-54.403Q-14.331-54.509-14.331-54.649L-14.331-55.161L-14.050-55.161L-14.050-54.649Q-14.050-54.446-14.167-54.288Q-14.284-54.130-14.466-54.046Q-14.647-53.962-14.850-53.962Q-15.081-53.962-15.233-54.134Q-15.386-54.306-15.417-54.536Q-15.577-54.255-15.886-54.089Q-16.194-53.923-16.546-53.923Q-17.058-53.923-17.481-54.146Q-17.905-54.368-17.905-54.833M-17.218-54.833Q-17.218-54.548-16.991-54.362Q-16.765-54.177-16.472-54.177Q-16.225-54.177-16.001-54.294Q-15.776-54.411-15.641-54.614Q-15.507-54.817-15.507-55.071L-15.507-55.903Q-15.772-55.903-16.058-55.849Q-16.343-55.794-16.614-55.665Q-16.886-55.536-17.052-55.329Q-17.218-55.122-17.218-54.833M-11.749-54.001L-13.729-54.001L-13.729-54.298Q-13.460-54.298-13.292-54.343Q-13.124-54.388-13.124-54.560L-13.124-56.696Q-13.124-56.911-13.186-57.007Q-13.249-57.103-13.366-57.124Q-13.483-57.146-13.729-57.146L-13.729-57.442L-12.561-57.528L-12.561-56.743Q-12.483-56.954-12.331-57.140Q-12.179-57.325-11.979-57.427Q-11.780-57.528-11.554-57.528Q-11.308-57.528-11.116-57.384Q-10.925-57.239-10.925-57.009Q-10.925-56.853-11.030-56.743Q-11.136-56.634-11.292-56.634Q-11.448-56.634-11.558-56.743Q-11.667-56.853-11.667-57.009Q-11.667-57.169-11.561-57.274Q-11.886-57.274-12.100-57.046Q-12.315-56.817-12.411-56.478Q-12.507-56.138-12.507-55.833L-12.507-54.560Q-12.507-54.392-12.280-54.345Q-12.054-54.298-11.749-54.298L-11.749-54.001M-10.401-55.728Q-10.401-56.224-10.151-56.649Q-9.901-57.075-9.481-57.321Q-9.061-57.567-8.561-57.567Q-8.022-57.567-7.632-57.442Q-7.241-57.317-7.241-56.903Q-7.241-56.798-7.292-56.706Q-7.343-56.614-7.434-56.563Q-7.526-56.513-7.636-56.513Q-7.741-56.513-7.833-56.563Q-7.925-56.614-7.975-56.706Q-8.026-56.798-8.026-56.903Q-8.026-57.126-7.858-57.231Q-8.081-57.290-8.554-57.290Q-8.850-57.290-9.065-57.151Q-9.280-57.013-9.411-56.782Q-9.542-56.552-9.600-56.282Q-9.659-56.013-9.659-55.728Q-9.659-55.333-9.526-54.983Q-9.393-54.634-9.122-54.417Q-8.850-54.200-8.452-54.200Q-8.077-54.200-7.802-54.417Q-7.526-54.634-7.425-54.993Q-7.409-55.056-7.347-55.056L-7.241-55.056Q-7.206-55.056-7.181-55.028Q-7.155-55.001-7.155-54.962L-7.155-54.938Q-7.288-54.458-7.673-54.190Q-8.058-53.923-8.561-53.923Q-8.925-53.923-9.259-54.060Q-9.593-54.196-9.852-54.446Q-10.112-54.696-10.257-55.032Q-10.401-55.368-10.401-55.728",[1553],"tikz-text","stroke-width:0.240",[1536,1556,1557],{"transform":1547},[1549,1558],{"d":1559,"fill":1538,"stroke":1538,"className":1560,"style":1554},"M-4.967-54.001L-6.822-54.001L-6.822-54.298Q-6.549-54.298-6.381-54.345Q-6.213-54.392-6.213-54.560L-6.213-58.720Q-6.213-58.935-6.276-59.030Q-6.338-59.126-6.457-59.147Q-6.576-59.169-6.822-59.169L-6.822-59.466L-5.600-59.552L-5.600-56.849Q-5.475-57.060-5.287-57.210Q-5.100-57.360-4.873-57.444Q-4.647-57.528-4.401-57.528Q-3.233-57.528-3.233-56.450L-3.233-54.560Q-3.233-54.392-3.063-54.345Q-2.893-54.298-2.623-54.298L-2.623-54.001L-4.479-54.001L-4.479-54.298Q-4.205-54.298-4.037-54.345Q-3.869-54.392-3.869-54.560L-3.869-56.435Q-3.869-56.817-3.990-57.046Q-4.112-57.274-4.463-57.274Q-4.776-57.274-5.030-57.112Q-5.283-56.950-5.430-56.681Q-5.576-56.411-5.576-56.114L-5.576-54.560Q-5.576-54.392-5.406-54.345Q-5.237-54.298-4.967-54.298",[1553],[1536,1562,1564],{"transform":1563},"translate(97.866 -8.603)",[1549,1565],{"d":1566,"fill":1538,"stroke":1538,"className":1567,"style":1554},"M-25.132-55.696Q-25.132-56.200-24.876-56.632Q-24.620-57.063-24.184-57.315Q-23.749-57.567-23.249-57.567Q-22.862-57.567-22.520-57.423Q-22.179-57.278-21.917-57.017Q-21.655-56.755-21.513-56.419Q-21.370-56.083-21.370-55.696Q-21.370-55.204-21.634-54.794Q-21.897-54.384-22.327-54.153Q-22.757-53.923-23.249-53.923Q-23.741-53.923-24.175-54.155Q-24.608-54.388-24.870-54.796Q-25.132-55.204-25.132-55.696M-23.249-54.200Q-22.792-54.200-22.540-54.423Q-22.288-54.646-22.200-54.997Q-22.112-55.349-22.112-55.794Q-22.112-56.224-22.206-56.562Q-22.300-56.899-22.554-57.106Q-22.808-57.313-23.249-57.313Q-23.897-57.313-24.141-56.897Q-24.386-56.481-24.386-55.794Q-24.386-55.349-24.298-54.997Q-24.210-54.646-23.958-54.423Q-23.706-54.200-23.249-54.200M-18.878-54.001L-20.858-54.001L-20.858-54.298Q-20.589-54.298-20.421-54.343Q-20.253-54.388-20.253-54.560L-20.253-56.696Q-20.253-56.911-20.315-57.007Q-20.378-57.103-20.495-57.124Q-20.612-57.146-20.858-57.146L-20.858-57.442L-19.690-57.528L-19.690-56.743Q-19.612-56.954-19.460-57.140Q-19.308-57.325-19.108-57.427Q-18.909-57.528-18.683-57.528Q-18.436-57.528-18.245-57.384Q-18.054-57.239-18.054-57.009Q-18.054-56.853-18.159-56.743Q-18.265-56.634-18.421-56.634Q-18.577-56.634-18.686-56.743Q-18.796-56.853-18.796-57.009Q-18.796-57.169-18.690-57.274Q-19.015-57.274-19.229-57.046Q-19.444-56.817-19.540-56.478Q-19.636-56.138-19.636-55.833L-19.636-54.560Q-19.636-54.392-19.409-54.345Q-19.183-54.298-18.878-54.298L-18.878-54.001M-15.757-53.923Q-16.237-53.923-16.645-54.167Q-17.054-54.411-17.292-54.825Q-17.530-55.239-17.530-55.728Q-17.530-56.220-17.272-56.636Q-17.015-57.052-16.583-57.290Q-16.151-57.528-15.659-57.528Q-15.038-57.528-14.589-57.091L-14.589-58.720Q-14.589-58.935-14.651-59.030Q-14.714-59.126-14.831-59.147Q-14.948-59.169-15.194-59.169L-15.194-59.466L-13.972-59.552L-13.972-54.743Q-13.972-54.532-13.909-54.437Q-13.847-54.341-13.729-54.319Q-13.612-54.298-13.362-54.298L-13.362-54.001L-14.612-53.923L-14.612-54.407Q-15.077-53.923-15.757-53.923M-15.690-54.177Q-15.350-54.177-15.058-54.368Q-14.765-54.560-14.612-54.856L-14.612-56.688Q-14.761-56.962-15.022-57.118Q-15.284-57.274-15.597-57.274Q-16.222-57.274-16.505-56.827Q-16.788-56.380-16.788-55.720Q-16.788-55.075-16.536-54.626Q-16.284-54.177-15.690-54.177M-12.854-55.755Q-12.854-56.235-12.622-56.651Q-12.390-57.067-11.979-57.317Q-11.569-57.567-11.093-57.567Q-10.362-57.567-9.964-57.126Q-9.565-56.685-9.565-55.954Q-9.565-55.849-9.659-55.825L-12.108-55.825L-12.108-55.755Q-12.108-55.345-11.987-54.989Q-11.866-54.634-11.595-54.417Q-11.323-54.200-10.893-54.200Q-10.530-54.200-10.233-54.429Q-9.936-54.657-9.835-55.009Q-9.827-55.056-9.741-55.071L-9.659-55.071Q-9.565-55.044-9.565-54.962Q-9.565-54.954-9.573-54.923Q-9.636-54.696-9.774-54.513Q-9.913-54.329-10.104-54.196Q-10.296-54.063-10.515-53.993Q-10.733-53.923-10.972-53.923Q-11.343-53.923-11.681-54.060Q-12.018-54.196-12.286-54.448Q-12.554-54.700-12.704-55.040Q-12.854-55.380-12.854-55.755M-12.100-56.063L-10.140-56.063Q-10.140-56.368-10.241-56.659Q-10.343-56.950-10.559-57.132Q-10.776-57.313-11.093-57.313Q-11.393-57.313-11.624-57.126Q-11.854-56.938-11.977-56.647Q-12.100-56.356-12.100-56.063M-7.069-54.001L-9.050-54.001L-9.050-54.298Q-8.780-54.298-8.612-54.343Q-8.444-54.388-8.444-54.560L-8.444-56.696Q-8.444-56.911-8.507-57.007Q-8.569-57.103-8.686-57.124Q-8.804-57.146-9.050-57.146L-9.050-57.442L-7.882-57.528L-7.882-56.743Q-7.804-56.954-7.651-57.140Q-7.499-57.325-7.300-57.427Q-7.100-57.528-6.874-57.528Q-6.628-57.528-6.436-57.384Q-6.245-57.239-6.245-57.009Q-6.245-56.853-6.350-56.743Q-6.456-56.634-6.612-56.634Q-6.768-56.634-6.878-56.743Q-6.987-56.853-6.987-57.009Q-6.987-57.169-6.882-57.274Q-7.206-57.274-7.421-57.046Q-7.636-56.817-7.731-56.478Q-7.827-56.138-7.827-55.833L-7.827-54.560Q-7.827-54.392-7.600-54.345Q-7.374-54.298-7.069-54.298L-7.069-54.001M-5.765-55.755Q-5.765-56.235-5.532-56.651Q-5.300-57.067-4.890-57.317Q-4.479-57.567-4.003-57.567Q-3.272-57.567-2.874-57.126Q-2.475-56.685-2.475-55.954Q-2.475-55.849-2.569-55.825L-5.018-55.825L-5.018-55.755Q-5.018-55.345-4.897-54.989Q-4.776-54.634-4.505-54.417Q-4.233-54.200-3.804-54.200Q-3.440-54.200-3.143-54.429Q-2.847-54.657-2.745-55.009Q-2.737-55.056-2.651-55.071L-2.569-55.071Q-2.475-55.044-2.475-54.962Q-2.475-54.954-2.483-54.923Q-2.546-54.696-2.684-54.513Q-2.823-54.329-3.015-54.196Q-3.206-54.063-3.425-53.993Q-3.643-53.923-3.882-53.923Q-4.253-53.923-4.591-54.060Q-4.929-54.196-5.196-54.448Q-5.464-54.700-5.614-55.040Q-5.765-55.380-5.765-55.755M-5.011-56.063L-3.050-56.063Q-3.050-56.368-3.151-56.659Q-3.253-56.950-3.470-57.132Q-3.686-57.313-4.003-57.313Q-4.304-57.313-4.534-57.126Q-4.765-56.938-4.888-56.647Q-5.011-56.356-5.011-56.063M-0.171-53.923Q-0.651-53.923-1.059-54.167Q-1.468-54.411-1.706-54.825Q-1.944-55.239-1.944-55.728Q-1.944-56.220-1.686-56.636Q-1.429-57.052-0.997-57.290Q-0.565-57.528-0.073-57.528Q0.548-57.528 0.997-57.091L0.997-58.720Q0.997-58.935 0.935-59.030Q0.872-59.126 0.755-59.147Q0.638-59.169 0.392-59.169L0.392-59.466L1.614-59.552L1.614-54.743Q1.614-54.532 1.677-54.437Q1.739-54.341 1.857-54.319Q1.974-54.298 2.224-54.298L2.224-54.001L0.974-53.923L0.974-54.407Q0.509-53.923-0.171-53.923M-0.104-54.177Q0.235-54.177 0.528-54.368Q0.821-54.560 0.974-54.856L0.974-56.688Q0.825-56.962 0.564-57.118Q0.302-57.274-0.011-57.274Q-0.636-57.274-0.919-56.827Q-1.202-56.380-1.202-55.720Q-1.202-55.075-0.950-54.626Q-0.698-54.177-0.104-54.177M3.919-54.466Q3.919-54.657 4.052-54.790Q4.185-54.923 4.380-54.923Q4.571-54.923 4.704-54.790Q4.837-54.657 4.837-54.466Q4.837-54.267 4.704-54.134Q4.571-54.001 4.380-54.001Q4.185-54.001 4.052-54.134Q3.919-54.267 3.919-54.466M4.235-55.642L4.235-56.040Q4.235-56.438 4.364-56.839Q4.493-57.239 4.739-57.575Q4.817-57.681 4.984-57.856Q5.150-58.032 5.218-58.169Q5.286-58.306 5.286-58.544Q5.286-59.032 5.083-59.204Q4.880-59.376 4.380-59.376Q4.071-59.376 3.794-59.265Q3.517-59.153 3.364-58.931Q3.536-58.931 3.644-58.817Q3.751-58.704 3.751-58.536Q3.751-58.435 3.700-58.343Q3.650-58.251 3.560-58.198Q3.470-58.146 3.357-58.146Q3.247-58.146 3.157-58.198Q3.067-58.251 3.017-58.343Q2.966-58.435 2.966-58.536Q2.966-58.884 3.177-59.134Q3.388-59.384 3.712-59.509Q4.036-59.634 4.380-59.634Q5.040-59.634 5.534-59.384Q6.028-59.134 6.028-58.536Q6.028-58.286 5.905-58.071Q5.782-57.856 5.571-57.720Q5.259-57.517 5.026-57.261Q4.794-57.005 4.655-56.688Q4.517-56.372 4.517-56.024L4.517-55.642Q4.517-55.606 4.489-55.579Q4.462-55.552 4.431-55.552L4.325-55.552Q4.294-55.552 4.265-55.577Q4.235-55.603 4.235-55.642",[1553],[1536,1569,1570,1577],{"stroke":1542,"fontFamily":1543,"fontSize":1544},[1536,1571,1573],{"transform":1572},"translate(152.08 -9.38)",[1549,1574],{"d":1575,"fill":1538,"stroke":1538,"className":1576,"style":1554},"M-23.249-52.450L-25.104-52.450L-25.104-52.743Q-24.835-52.743-24.667-52.788Q-24.499-52.833-24.499-53.009L-24.499-56.833Q-24.499-57.040-24.655-57.093Q-24.811-57.146-25.104-57.146L-25.104-57.442L-23.882-57.528L-23.882-57.063Q-23.651-57.286-23.337-57.407Q-23.022-57.528-22.683-57.528Q-22.210-57.528-21.806-57.282Q-21.401-57.036-21.169-56.620Q-20.936-56.204-20.936-55.728Q-20.936-55.353-21.085-55.024Q-21.233-54.696-21.503-54.444Q-21.772-54.192-22.116-54.058Q-22.460-53.923-22.819-53.923Q-23.108-53.923-23.380-54.044Q-23.651-54.165-23.858-54.376L-23.858-53.009Q-23.858-52.833-23.690-52.788Q-23.522-52.743-23.249-52.743L-23.249-52.450M-23.858-56.665L-23.858-54.825Q-23.706-54.536-23.444-54.356Q-23.183-54.177-22.874-54.177Q-22.589-54.177-22.366-54.315Q-22.143-54.454-21.991-54.685Q-21.839-54.915-21.761-55.187Q-21.683-55.458-21.683-55.728Q-21.683-56.060-21.808-56.417Q-21.933-56.774-22.181-57.011Q-22.429-57.247-22.776-57.247Q-23.100-57.247-23.395-57.091Q-23.690-56.935-23.858-56.665M-18.405-54.001L-20.386-54.001L-20.386-54.298Q-20.116-54.298-19.948-54.343Q-19.780-54.388-19.780-54.560L-19.780-56.696Q-19.780-56.911-19.843-57.007Q-19.905-57.103-20.022-57.124Q-20.140-57.146-20.386-57.146L-20.386-57.442L-19.218-57.528L-19.218-56.743Q-19.140-56.954-18.987-57.140Q-18.835-57.325-18.636-57.427Q-18.436-57.528-18.210-57.528Q-17.964-57.528-17.772-57.384Q-17.581-57.239-17.581-57.009Q-17.581-56.853-17.686-56.743Q-17.792-56.634-17.948-56.634Q-18.104-56.634-18.214-56.743Q-18.323-56.853-18.323-57.009Q-18.323-57.169-18.218-57.274Q-18.542-57.274-18.757-57.046Q-18.972-56.817-19.067-56.478Q-19.163-56.138-19.163-55.833L-19.163-54.560Q-19.163-54.392-18.936-54.345Q-18.710-54.298-18.405-54.298L-18.405-54.001M-17.100-55.755Q-17.100-56.235-16.868-56.651Q-16.636-57.067-16.225-57.317Q-15.815-57.567-15.339-57.567Q-14.608-57.567-14.210-57.126Q-13.811-56.685-13.811-55.954Q-13.811-55.849-13.905-55.825L-16.354-55.825L-16.354-55.755Q-16.354-55.345-16.233-54.989Q-16.112-54.634-15.841-54.417Q-15.569-54.200-15.140-54.200Q-14.776-54.200-14.479-54.429Q-14.183-54.657-14.081-55.009Q-14.073-55.056-13.987-55.071L-13.905-55.071Q-13.811-55.044-13.811-54.962Q-13.811-54.954-13.819-54.923Q-13.882-54.696-14.020-54.513Q-14.159-54.329-14.350-54.196Q-14.542-54.063-14.761-53.993Q-14.979-53.923-15.218-53.923Q-15.589-53.923-15.927-54.060Q-16.265-54.196-16.532-54.448Q-16.800-54.700-16.950-55.040Q-17.100-55.380-17.100-55.755M-16.347-56.063L-14.386-56.063Q-14.386-56.368-14.487-56.659Q-14.589-56.950-14.806-57.132Q-15.022-57.313-15.339-57.313Q-15.640-57.313-15.870-57.126Q-16.100-56.938-16.224-56.647Q-16.347-56.356-16.347-56.063M-11.464-54.001L-13.296-54.001L-13.296-54.298Q-13.026-54.298-12.858-54.343Q-12.690-54.388-12.690-54.560L-12.690-57.153L-13.331-57.153L-13.331-57.450L-12.690-57.450L-12.690-58.384Q-12.690-58.798-12.382-59.079Q-12.073-59.360-11.628-59.497Q-11.183-59.634-10.776-59.634Q-10.374-59.634-10.056-59.407Q-9.737-59.181-9.737-58.794Q-9.737-58.618-9.850-58.505Q-9.964-58.392-10.136-58.392Q-10.311-58.392-10.425-58.505Q-10.538-58.618-10.538-58.794Q-10.538-58.938-10.448-59.048Q-10.358-59.157-10.225-59.185Q-10.511-59.376-10.858-59.376Q-11.155-59.376-11.442-59.255Q-11.729-59.134-11.913-58.901Q-12.097-58.669-12.097-58.368L-12.097-57.450L-10.944-57.450L-9.722-57.544L-9.722-54.560Q-9.722-54.392-9.554-54.345Q-9.386-54.298-9.112-54.298L-9.112-54.001L-10.944-54.001L-10.944-54.298Q-10.675-54.298-10.507-54.343Q-10.339-54.388-10.339-54.560L-10.339-56.720Q-10.339-56.927-10.386-57.026Q-10.433-57.126-10.608-57.153L-12.073-57.153L-12.073-54.560Q-12.073-54.392-11.905-54.345Q-11.737-54.298-11.464-54.298L-11.464-54.001M-7.218-54.001L-8.714-54.001L-8.714-54.298Q-8.081-54.298-7.659-54.778L-6.890-55.688L-7.882-56.888Q-8.038-57.067-8.200-57.110Q-8.362-57.153-8.667-57.153L-8.667-57.450L-6.979-57.450L-6.979-57.153Q-7.073-57.153-7.149-57.110Q-7.225-57.067-7.225-56.978Q-7.225-56.935-7.194-56.888L-6.538-56.099L-6.058-56.673Q-5.940-56.810-5.940-56.946Q-5.940-57.036-5.991-57.095Q-6.042-57.153-6.124-57.153L-6.124-57.450L-4.636-57.450L-4.636-57.153Q-5.272-57.153-5.683-56.673L-6.362-55.872L-5.276-54.560Q-5.116-54.384-4.956-54.341Q-4.796-54.298-4.491-54.298L-4.491-54.001L-6.179-54.001L-6.179-54.298Q-6.089-54.298-6.011-54.341Q-5.933-54.384-5.933-54.474Q-5.933-54.497-5.964-54.560L-6.706-55.466L-7.292-54.778Q-7.409-54.642-7.409-54.505Q-7.409-54.419-7.358-54.358Q-7.308-54.298-7.218-54.298",[1553],[1536,1578,1579],{"transform":1572},[1549,1580],{"d":1581,"fill":1538,"stroke":1538,"className":1582,"style":1554},"M2.942-52.450L1.087-52.450L1.087-52.743Q1.356-52.743 1.524-52.788Q1.692-52.833 1.692-53.009L1.692-54.458Q1.489-54.212 1.188-54.067Q0.887-53.923 0.555-53.923Q0.071-53.923-0.341-54.165Q-0.753-54.407-0.994-54.819Q-1.234-55.231-1.234-55.728Q-1.234-56.224-0.978-56.638Q-0.722-57.052-0.292-57.290Q0.137-57.528 0.630-57.528Q0.985-57.528 1.292-57.349Q1.598-57.169 1.790-56.856L2.079-57.528L2.333-57.528L2.333-53.009Q2.333-52.833 2.501-52.788Q2.669-52.743 2.942-52.743L2.942-52.450M0.614-54.177Q0.981-54.177 1.274-54.409Q1.567-54.642 1.715-55.001L1.715-56.337Q1.622-56.720 1.348-56.983Q1.075-57.247 0.700-57.247Q0.340-57.247 0.067-57.017Q-0.206-56.786-0.349-56.429Q-0.492-56.071-0.492-55.720Q-0.492-55.384-0.367-55.022Q-0.242-54.661 0.010-54.419Q0.262-54.177 0.614-54.177M3.887-54.954L3.887-56.696Q3.887-56.911 3.825-57.007Q3.762-57.103 3.643-57.124Q3.524-57.146 3.278-57.146L3.278-57.442L4.524-57.528L4.524-54.978L4.524-54.954Q4.524-54.642 4.579-54.480Q4.633-54.317 4.784-54.247Q4.934-54.177 5.255-54.177Q5.684-54.177 5.958-54.515Q6.231-54.853 6.231-55.298L6.231-56.696Q6.231-56.911 6.169-57.007Q6.106-57.103 5.987-57.124Q5.868-57.146 5.622-57.146L5.622-57.442L6.868-57.528L6.868-54.743Q6.868-54.532 6.930-54.437Q6.993-54.341 7.112-54.319Q7.231-54.298 7.477-54.298L7.477-54.001L6.255-53.923L6.255-54.544Q6.087-54.255 5.805-54.089Q5.524-53.923 5.204-53.923Q3.887-53.923 3.887-54.954M7.923-55.755Q7.923-56.235 8.155-56.651Q8.387-57.067 8.797-57.317Q9.208-57.567 9.684-57.567Q10.415-57.567 10.813-57.126Q11.212-56.685 11.212-55.954Q11.212-55.849 11.118-55.825L8.669-55.825L8.669-55.755Q8.669-55.345 8.790-54.989Q8.911-54.634 9.182-54.417Q9.454-54.200 9.883-54.200Q10.247-54.200 10.544-54.429Q10.840-54.657 10.942-55.009Q10.950-55.056 11.036-55.071L11.118-55.071Q11.212-55.044 11.212-54.962Q11.212-54.954 11.204-54.923Q11.141-54.696 11.003-54.513Q10.864-54.329 10.672-54.196Q10.481-54.063 10.262-53.993Q10.044-53.923 9.805-53.923Q9.434-53.923 9.096-54.060Q8.758-54.196 8.491-54.448Q8.223-54.700 8.073-55.040Q7.923-55.380 7.923-55.755M8.676-56.063L10.637-56.063Q10.637-56.368 10.536-56.659Q10.434-56.950 10.217-57.132Q10.001-57.313 9.684-57.313Q9.383-57.313 9.153-57.126Q8.922-56.938 8.799-56.647Q8.676-56.356 8.676-56.063M13.708-54.001L11.727-54.001L11.727-54.298Q11.997-54.298 12.165-54.343Q12.333-54.388 12.333-54.560L12.333-56.696Q12.333-56.911 12.270-57.007Q12.208-57.103 12.090-57.124Q11.973-57.146 11.727-57.146L11.727-57.442L12.895-57.528L12.895-56.743Q12.973-56.954 13.126-57.140Q13.278-57.325 13.477-57.427Q13.676-57.528 13.903-57.528Q14.149-57.528 14.340-57.384Q14.532-57.239 14.532-57.009Q14.532-56.853 14.426-56.743Q14.321-56.634 14.165-56.634Q14.008-56.634 13.899-56.743Q13.790-56.853 13.790-57.009Q13.790-57.169 13.895-57.274Q13.571-57.274 13.356-57.046Q13.141-56.817 13.046-56.478Q12.950-56.138 12.950-55.833L12.950-54.560Q12.950-54.392 13.176-54.345Q13.403-54.298 13.708-54.298L13.708-54.001M15.430-52.704Q15.544-52.626 15.719-52.626Q16.008-52.626 16.229-52.839Q16.450-53.052 16.575-53.353L16.864-54.001L15.590-56.888Q15.508-57.063 15.364-57.108Q15.219-57.153 14.950-57.153L14.950-57.450L16.669-57.450L16.669-57.153Q16.247-57.153 16.247-56.970Q16.247-56.958 16.262-56.888L17.200-54.763L18.032-56.673Q18.071-56.763 18.071-56.841Q18.071-56.981 17.969-57.067Q17.868-57.153 17.727-57.153L17.727-57.450L19.079-57.450L19.079-57.153Q18.825-57.153 18.631-57.028Q18.438-56.903 18.333-56.673L16.887-53.353Q16.774-53.099 16.608-52.876Q16.442-52.653 16.214-52.511Q15.985-52.368 15.719-52.368Q15.422-52.368 15.182-52.560Q14.942-52.751 14.942-53.040Q14.942-53.196 15.047-53.298Q15.153-53.399 15.301-53.399Q15.407-53.399 15.487-53.353Q15.567-53.306 15.614-53.228Q15.661-53.149 15.661-53.040Q15.661-52.919 15.600-52.831Q15.540-52.743 15.430-52.704M20.680-54.466Q20.680-54.657 20.813-54.790Q20.946-54.923 21.141-54.923Q21.333-54.923 21.465-54.790Q21.598-54.657 21.598-54.466Q21.598-54.267 21.465-54.134Q21.333-54.001 21.141-54.001Q20.946-54.001 20.813-54.134Q20.680-54.267 20.680-54.466M20.997-55.642L20.997-56.040Q20.997-56.438 21.126-56.839Q21.255-57.239 21.501-57.575Q21.579-57.681 21.745-57.856Q21.911-58.032 21.979-58.169Q22.047-58.306 22.047-58.544Q22.047-59.032 21.844-59.204Q21.641-59.376 21.141-59.376Q20.833-59.376 20.555-59.265Q20.278-59.153 20.126-58.931Q20.297-58.931 20.405-58.817Q20.512-58.704 20.512-58.536Q20.512-58.435 20.462-58.343Q20.411-58.251 20.321-58.198Q20.231-58.146 20.118-58.146Q20.008-58.146 19.919-58.198Q19.829-58.251 19.778-58.343Q19.727-58.435 19.727-58.536Q19.727-58.884 19.938-59.134Q20.149-59.384 20.473-59.509Q20.797-59.634 21.141-59.634Q21.801-59.634 22.296-59.384Q22.790-59.134 22.790-58.536Q22.790-58.286 22.667-58.071Q22.544-57.856 22.333-57.720Q22.020-57.517 21.788-57.261Q21.555-57.005 21.417-56.688Q21.278-56.372 21.278-56.024L21.278-55.642Q21.278-55.606 21.251-55.579Q21.223-55.552 21.192-55.552L21.087-55.552Q21.055-55.552 21.026-55.577Q20.997-55.603 20.997-55.642",[1553],[1549,1584],{"fill":1542,"d":1585,"style":1586},"M-65.203-56.846h247.538","stroke-width:.8",[1536,1588,1590],{"transform":1589},"translate(-28.356 14.114)",[1549,1591],{"d":1592,"fill":1538,"stroke":1538,"className":1593,"style":1554},"M-21.722-54.001L-25.003-54.001L-25.003-54.298Q-24.679-54.298-24.436-54.345Q-24.194-54.392-24.194-54.560L-24.194-58.903Q-24.194-59.075-24.436-59.122Q-24.679-59.169-25.003-59.169L-25.003-59.466L-21.956-59.466Q-21.530-59.466-21.097-59.312Q-20.663-59.157-20.368-58.849Q-20.073-58.540-20.073-58.106Q-20.073-57.853-20.198-57.636Q-20.323-57.419-20.524-57.263Q-20.725-57.106-20.958-57.007Q-21.190-56.907-21.448-56.856Q-21.073-56.821-20.694-56.644Q-20.315-56.466-20.075-56.167Q-19.835-55.868-19.835-55.474Q-19.835-55.021-20.118-54.687Q-20.401-54.353-20.837-54.177Q-21.272-54.001-21.722-54.001M-23.483-56.712L-23.483-54.560Q-23.483-54.388-23.391-54.343Q-23.300-54.298-23.081-54.298L-21.956-54.298Q-21.718-54.298-21.483-54.386Q-21.249-54.474-21.063-54.634Q-20.878-54.794-20.776-55.007Q-20.675-55.220-20.675-55.474Q-20.675-55.794-20.827-56.079Q-20.979-56.364-21.249-56.538Q-21.518-56.712-21.835-56.712L-23.483-56.712M-23.483-58.903L-23.483-56.970L-22.194-56.970Q-21.952-56.970-21.714-57.052Q-21.475-57.134-21.292-57.280Q-21.108-57.427-20.995-57.644Q-20.882-57.860-20.882-58.106Q-20.882-58.317-20.968-58.519Q-21.054-58.720-21.200-58.862Q-21.347-59.005-21.542-59.087Q-21.737-59.169-21.956-59.169L-23.081-59.169Q-23.300-59.169-23.391-59.126Q-23.483-59.083-23.483-58.903M-18.882-53.923L-18.882-55.728Q-18.882-55.755-18.850-55.786Q-18.819-55.817-18.796-55.817L-18.690-55.817Q-18.659-55.817-18.630-55.788Q-18.600-55.759-18.600-55.728Q-18.600-54.946-18.085-54.538Q-17.569-54.130-16.761-54.130Q-16.464-54.130-16.208-54.280Q-15.952-54.431-15.802-54.687Q-15.651-54.942-15.651-55.239Q-15.651-55.638-15.897-55.942Q-16.143-56.247-16.515-56.329L-17.636-56.587Q-17.975-56.661-18.263-56.882Q-18.550-57.103-18.716-57.421Q-18.882-57.739-18.882-58.091Q-18.882-58.521-18.651-58.876Q-18.421-59.231-18.040-59.433Q-17.659-59.634-17.233-59.634Q-16.983-59.634-16.737-59.575Q-16.491-59.517-16.272-59.394Q-16.054-59.271-15.890-59.091L-15.561-59.587Q-15.530-59.634-15.491-59.634L-15.444-59.634Q-15.417-59.634-15.386-59.603Q-15.354-59.571-15.354-59.544L-15.354-57.735Q-15.354-57.712-15.386-57.681Q-15.417-57.649-15.444-57.649L-15.546-57.649Q-15.577-57.649-15.606-57.679Q-15.636-57.708-15.636-57.735Q-15.636-57.868-15.679-58.054Q-15.722-58.239-15.786-58.394Q-15.850-58.548-15.950-58.706Q-16.050-58.864-16.140-58.954Q-16.569-59.360-17.233-59.360Q-17.511-59.360-17.770-59.228Q-18.030-59.095-18.188-58.860Q-18.347-58.626-18.347-58.345Q-18.347-57.989-18.106-57.718Q-17.866-57.446-17.499-57.360L-16.386-57.106Q-16.108-57.040-15.876-56.886Q-15.643-56.731-15.474-56.513Q-15.304-56.294-15.210-56.036Q-15.116-55.778-15.116-55.489Q-15.116-55.161-15.241-54.858Q-15.366-54.556-15.600-54.319Q-15.835-54.083-16.128-53.958Q-16.421-53.833-16.761-53.833Q-17.776-53.833-18.347-54.376L-18.675-53.880Q-18.706-53.833-18.745-53.833L-18.796-53.833Q-18.819-53.833-18.850-53.864Q-18.882-53.896-18.882-53.923M-10.050-54.001L-13.093-54.001L-13.093-54.298Q-12.331-54.298-12.147-54.337Q-12.104-54.349-12.056-54.382Q-12.007-54.415-11.981-54.458Q-11.956-54.501-11.956-54.560L-11.956-58.903Q-11.956-59.079-12.048-59.124Q-12.140-59.169-12.354-59.169L-12.749-59.169Q-13.444-59.169-13.733-58.880Q-13.882-58.731-13.944-58.411Q-14.007-58.091-14.050-57.618L-14.331-57.618L-14.171-59.466L-8.972-59.466L-8.811-57.618L-9.093-57.618Q-9.136-58.126-9.198-58.429Q-9.261-58.731-9.413-58.880Q-9.698-59.169-10.397-59.169L-10.788-59.169Q-11.003-59.169-11.095-59.126Q-11.186-59.083-11.186-58.903L-11.186-54.560Q-11.186-54.485-11.132-54.421Q-11.077-54.356-10.995-54.337Q-10.811-54.298-10.050-54.298",[1553],[1536,1595,1596,1603,1609,1615,1621,1627],{"stroke":1542,"fontSize":1544},[1536,1597,1599],{"transform":1598},"translate(37.882 13.38)",[1549,1600],{"d":1601,"fill":1538,"stroke":1538,"className":1602,"style":1554},"M-24.964-56.001Q-24.964-56.677-24.661-57.327Q-24.358-57.978-23.829-58.503Q-23.300-59.028-22.638-59.331Q-21.975-59.634-21.308-59.634Q-20.827-59.634-20.431-59.476Q-20.034-59.317-19.739-59.024Q-19.444-58.731-19.284-58.327Q-19.124-57.923-19.124-57.442Q-19.124-56.759-19.425-56.108Q-19.725-55.458-20.251-54.940Q-20.776-54.423-21.427-54.128Q-22.077-53.833-22.761-53.833Q-23.229-53.833-23.640-53.991Q-24.050-54.149-24.345-54.438Q-24.640-54.728-24.802-55.126Q-24.964-55.524-24.964-56.001M-22.683-54.130Q-22.089-54.130-21.567-54.468Q-21.046-54.806-20.673-55.353Q-20.300-55.899-20.099-56.532Q-19.897-57.165-19.897-57.720Q-19.897-58.177-20.069-58.552Q-20.241-58.927-20.575-59.140Q-20.909-59.353-21.378-59.353Q-21.995-59.353-22.511-59.032Q-23.026-58.712-23.390-58.185Q-23.753-57.657-23.946-57.028Q-24.140-56.399-24.140-55.825Q-24.140-55.106-23.761-54.618Q-23.382-54.130-22.683-54.130",[1553],[1536,1604,1605],{"transform":1598},[1549,1606],{"d":1607,"fill":1538,"stroke":1538,"className":1608,"style":1554},"M-16.067-52.009Q-16.680-52.466-17.082-53.101Q-17.485-53.735-17.680-54.481Q-17.875-55.228-17.875-56.001Q-17.875-56.774-17.680-57.521Q-17.485-58.267-17.082-58.901Q-16.680-59.536-16.067-59.993Q-16.055-59.997-16.047-59.999Q-16.039-60.001-16.028-60.001L-15.950-60.001Q-15.911-60.001-15.885-59.974Q-15.860-59.946-15.860-59.903Q-15.860-59.853-15.891-59.833Q-16.399-59.380-16.721-58.757Q-17.043-58.134-17.184-57.438Q-17.325-56.743-17.325-56.001Q-17.325-55.267-17.186-54.567Q-17.047-53.868-16.723-53.243Q-16.399-52.618-15.891-52.169Q-15.860-52.149-15.860-52.099Q-15.860-52.056-15.885-52.028Q-15.911-52.001-15.950-52.001L-16.028-52.001Q-16.036-52.005-16.045-52.007Q-16.055-52.009-16.067-52.009",[1553],[1536,1610,1611],{"transform":1598},[1549,1612],{"d":1613,"fill":1538,"stroke":1538,"className":1614,"style":1554},"M-10.730-54.001L-14.898-54.001Q-14.995-54.032-14.995-54.130L-14.972-54.231Q-14.937-54.286-14.874-54.298Q-14.433-54.298-14.274-54.337Q-14.116-54.376-14.073-54.603L-12.995-58.923Q-12.972-58.993-12.972-59.056Q-12.972-59.118-13.034-59.138Q-13.179-59.169-13.601-59.169Q-13.706-59.196-13.706-59.298L-13.675-59.399Q-13.644-59.458-13.585-59.466L-11.226-59.466Q-11.187-59.466-11.159-59.429Q-11.132-59.392-11.132-59.345L-11.155-59.239Q-11.187-59.181-11.249-59.169Q-11.835-59.169-12.034-59.130Q-12.202-59.079-12.257-58.864L-13.339-54.544Q-13.370-54.419-13.370-54.345Q-13.370-54.298-13.120-54.298L-12.300-54.298Q-11.839-54.298-11.503-54.413Q-11.167-54.528-10.933-54.751Q-10.698-54.974-10.532-55.282Q-10.366-55.591-10.202-56.040Q-10.155-56.099-10.105-56.114L-10.026-56.114Q-9.929-56.087-9.929-56.001Q-9.929-55.993-9.937-55.954L-10.636-54.071Q-10.675-54.009-10.730-54.001",[1553],[1536,1616,1617],{"transform":1598},[1549,1618],{"d":1619,"fill":1538,"stroke":1538,"className":1620,"style":1554},"M-6.029-54.001L-7.861-54.001L-7.861-54.298Q-7.587-54.298-7.419-54.345Q-7.251-54.392-7.251-54.560L-7.251-58.720Q-7.251-58.935-7.314-59.030Q-7.376-59.126-7.495-59.147Q-7.615-59.169-7.861-59.169L-7.861-59.466L-6.638-59.552L-6.638-54.560Q-6.638-54.392-6.470-54.345Q-6.302-54.298-6.029-54.298L-6.029-54.001M-5.583-55.696Q-5.583-56.200-5.327-56.632Q-5.072-57.063-4.636-57.315Q-4.201-57.567-3.701-57.567Q-3.314-57.567-2.972-57.423Q-2.630-57.278-2.368-57.017Q-2.107-56.755-1.964-56.419Q-1.822-56.083-1.822-55.696Q-1.822-55.204-2.085-54.794Q-2.349-54.384-2.779-54.153Q-3.208-53.923-3.701-53.923Q-4.193-53.923-4.626-54.155Q-5.060-54.388-5.322-54.796Q-5.583-55.204-5.583-55.696M-3.701-54.200Q-3.243-54.200-2.992-54.423Q-2.740-54.646-2.652-54.997Q-2.564-55.349-2.564-55.794Q-2.564-56.224-2.658-56.562Q-2.751-56.899-3.005-57.106Q-3.259-57.313-3.701-57.313Q-4.349-57.313-4.593-56.897Q-4.837-56.481-4.837-55.794Q-4.837-55.349-4.749-54.997Q-4.661-54.646-4.410-54.423Q-4.158-54.200-3.701-54.200M-1.337-53.392Q-1.337-53.673-1.126-53.884Q-0.915-54.095-0.630-54.185Q-0.786-54.310-0.865-54.499Q-0.943-54.688-0.943-54.888Q-0.943-55.243-0.712-55.536Q-1.079-55.876-1.079-56.345Q-1.079-56.696-0.876-56.966Q-0.673-57.235-0.353-57.382Q-0.033-57.528 0.311-57.528Q0.831-57.528 1.202-57.247Q1.565-57.618 2.112-57.618Q2.292-57.618 2.419-57.491Q2.546-57.364 2.546-57.185Q2.546-57.079 2.467-57.001Q2.389-56.923 2.280-56.923Q2.171-56.923 2.094-56.999Q2.018-57.075 2.018-57.185Q2.018-57.286 2.057-57.337Q2.065-57.345 2.069-57.351Q2.073-57.356 2.073-57.360Q1.698-57.360 1.378-57.106Q1.698-56.767 1.698-56.345Q1.698-56.075 1.581-55.858Q1.464-55.642 1.258-55.483Q1.053-55.325 0.811-55.243Q0.569-55.161 0.311-55.161Q0.092-55.161-0.120-55.220Q-0.333-55.278-0.529-55.399Q-0.622-55.259-0.622-55.079Q-0.622-54.872-0.486-54.720Q-0.349-54.567-0.142-54.567L0.553-54.567Q1.042-54.567 1.454-54.483Q1.866-54.399 2.145-54.142Q2.424-53.884 2.424-53.392Q2.424-53.028 2.104-52.796Q1.784-52.563 1.342-52.462Q0.901-52.360 0.546-52.360Q0.190-52.360-0.253-52.462Q-0.697-52.563-1.017-52.796Q-1.337-53.028-1.337-53.392M-0.833-53.392Q-0.833-53.196-0.689-53.048Q-0.544-52.899-0.331-52.810Q-0.118-52.720 0.122-52.673Q0.362-52.626 0.546-52.626Q0.788-52.626 1.118-52.704Q1.448-52.782 1.684-52.956Q1.921-53.130 1.921-53.392Q1.921-53.798 1.510-53.907Q1.100-54.017 0.538-54.017L-0.142-54.017Q-0.411-54.017-0.622-53.839Q-0.833-53.661-0.833-53.392M0.311-55.427Q1.034-55.427 1.034-56.345Q1.034-57.267 0.311-57.267Q-0.415-57.267-0.415-56.345Q-0.415-55.427 0.311-55.427",[1553],[1536,1622,1623],{"transform":1598},[1549,1624],{"d":1625,"fill":1538,"stroke":1538,"className":1626,"style":1554},"M4.910-54.177Q4.914-54.196 4.916-54.210Q4.918-54.224 4.918-54.247L5.512-56.618Q5.551-56.774 5.551-56.911Q5.551-57.060 5.498-57.167Q5.445-57.274 5.313-57.274Q5.133-57.274 5.014-57.105Q4.895-56.935 4.838-56.749Q4.781-56.563 4.711-56.274Q4.699-56.200 4.629-56.200L4.527-56.200Q4.492-56.200 4.465-56.235Q4.438-56.271 4.438-56.298L4.438-56.329Q4.524-56.661 4.617-56.903Q4.711-57.146 4.887-57.337Q5.063-57.528 5.328-57.528Q5.527-57.528 5.721-57.446Q5.914-57.364 6.041-57.210Q6.168-57.056 6.168-56.849Q6.418-57.165 6.744-57.347Q7.070-57.528 7.445-57.528Q7.895-57.528 8.178-57.302Q8.461-57.075 8.461-56.642Q8.461-56.302 8.328-55.901Q8.195-55.501 7.942-54.833Q7.848-54.610 7.848-54.427Q7.848-54.177 8.024-54.177Q8.332-54.177 8.553-54.499Q8.774-54.821 8.856-55.177Q8.883-55.247 8.942-55.247L9.047-55.247Q9.086-55.247 9.111-55.214Q9.137-55.181 9.137-55.153Q9.137-55.138 9.125-55.122Q9.012-54.669 8.717-54.296Q8.422-53.923 8.008-53.923Q7.699-53.923 7.481-54.110Q7.262-54.298 7.262-54.603Q7.262-54.771 7.320-54.888Q7.563-55.532 7.705-55.974Q7.848-56.415 7.848-56.743Q7.848-56.974 7.750-57.124Q7.652-57.274 7.430-57.274Q6.606-57.274 6.047-56.200L5.551-54.208Q5.520-54.083 5.414-54.003Q5.309-53.923 5.184-53.923Q5.074-53.923 4.992-53.993Q4.910-54.063 4.910-54.177",[1553],[1536,1628,1629],{"transform":1598},[1549,1630],{"d":1631,"fill":1538,"stroke":1538,"className":1632,"style":1554},"M10.013-52.001L9.931-52.001Q9.895-52.001 9.870-52.030Q9.845-52.060 9.845-52.099Q9.845-52.149 9.876-52.169Q10.263-52.505 10.546-52.954Q10.829-53.403 10.995-53.903Q11.161-54.403 11.235-54.921Q11.309-55.438 11.309-56.001Q11.309-56.571 11.235-57.087Q11.161-57.603 10.995-58.099Q10.829-58.595 10.550-59.042Q10.270-59.489 9.876-59.833Q9.845-59.853 9.845-59.903Q9.845-59.942 9.870-59.972Q9.895-60.001 9.931-60.001L10.013-60.001Q10.024-60.001 10.034-59.999Q10.044-59.997 10.052-59.993Q10.665-59.536 11.067-58.901Q11.470-58.267 11.665-57.521Q11.860-56.774 11.860-56.001Q11.860-55.228 11.665-54.481Q11.470-53.735 11.067-53.101Q10.665-52.466 10.052-52.009Q10.040-52.009 10.032-52.007Q10.024-52.005 10.013-52.001",[1553],[1536,1634,1635,1642],{"stroke":1542,"fontFamily":1543,"fontSize":1544},[1536,1636,1638],{"transform":1637},"translate(108.12 12.325)",[1549,1639],{"d":1640,"fill":1538,"stroke":1538,"className":1641,"style":1554},"M-24.714-52.704Q-24.600-52.626-24.425-52.626Q-24.136-52.626-23.915-52.839Q-23.694-53.052-23.569-53.353L-23.280-54.001L-24.554-56.888Q-24.636-57.063-24.780-57.108Q-24.925-57.153-25.194-57.153L-25.194-57.450L-23.475-57.450L-23.475-57.153Q-23.897-57.153-23.897-56.970Q-23.897-56.958-23.882-56.888L-22.944-54.763L-22.112-56.673Q-22.073-56.763-22.073-56.841Q-22.073-56.981-22.175-57.067Q-22.276-57.153-22.417-57.153L-22.417-57.450L-21.065-57.450L-21.065-57.153Q-21.319-57.153-21.513-57.028Q-21.706-56.903-21.811-56.673L-23.257-53.353Q-23.370-53.099-23.536-52.876Q-23.702-52.653-23.931-52.511Q-24.159-52.368-24.425-52.368Q-24.722-52.368-24.962-52.560Q-25.202-52.751-25.202-53.040Q-25.202-53.196-25.097-53.298Q-24.991-53.399-24.843-53.399Q-24.737-53.399-24.657-53.353Q-24.577-53.306-24.530-53.228Q-24.483-53.149-24.483-53.040Q-24.483-52.919-24.544-52.831Q-24.604-52.743-24.714-52.704",[1553],[1536,1643,1644],{"transform":1637},[1549,1645],{"d":1646,"fill":1538,"stroke":1538,"className":1647,"style":1554},"M-20.882-55.755Q-20.882-56.235-20.649-56.651Q-20.417-57.067-20.007-57.317Q-19.597-57.567-19.120-57.567Q-18.390-57.567-17.991-57.126Q-17.593-56.685-17.593-55.954Q-17.593-55.849-17.686-55.825L-20.136-55.825L-20.136-55.755Q-20.136-55.345-20.015-54.989Q-19.893-54.634-19.622-54.417Q-19.350-54.200-18.921-54.200Q-18.558-54.200-18.261-54.429Q-17.964-54.657-17.862-55.009Q-17.854-55.056-17.768-55.071L-17.686-55.071Q-17.593-55.044-17.593-54.962Q-17.593-54.954-17.600-54.923Q-17.663-54.696-17.802-54.513Q-17.940-54.329-18.132-54.196Q-18.323-54.063-18.542-53.993Q-18.761-53.923-18.999-53.923Q-19.370-53.923-19.708-54.060Q-20.046-54.196-20.313-54.448Q-20.581-54.700-20.731-55.040Q-20.882-55.380-20.882-55.755M-20.128-56.063L-18.167-56.063Q-18.167-56.368-18.268-56.659Q-18.370-56.950-18.587-57.132Q-18.804-57.313-19.120-57.313Q-19.421-57.313-19.651-57.126Q-19.882-56.938-20.005-56.647Q-20.128-56.356-20.128-56.063M-17.061-54.009L-17.061-55.231Q-17.061-55.259-17.030-55.290Q-16.999-55.321-16.975-55.321L-16.870-55.321Q-16.800-55.321-16.784-55.259Q-16.722-54.938-16.583-54.698Q-16.444-54.458-16.212-54.317Q-15.979-54.177-15.671-54.177Q-15.433-54.177-15.224-54.237Q-15.015-54.298-14.878-54.446Q-14.741-54.595-14.741-54.841Q-14.741-55.095-14.952-55.261Q-15.163-55.427-15.433-55.481L-16.054-55.595Q-16.460-55.673-16.761-55.929Q-17.061-56.185-17.061-56.560Q-17.061-56.927-16.860-57.149Q-16.659-57.372-16.335-57.470Q-16.011-57.567-15.671-57.567Q-15.206-57.567-14.909-57.360L-14.686-57.544Q-14.663-57.567-14.632-57.567L-14.581-57.567Q-14.550-57.567-14.522-57.540Q-14.495-57.513-14.495-57.481L-14.495-56.497Q-14.495-56.466-14.520-56.437Q-14.546-56.407-14.581-56.407L-14.686-56.407Q-14.722-56.407-14.749-56.435Q-14.776-56.462-14.776-56.497Q-14.776-56.896-15.028-57.116Q-15.280-57.337-15.679-57.337Q-16.034-57.337-16.317-57.214Q-16.600-57.091-16.600-56.786Q-16.600-56.567-16.399-56.435Q-16.198-56.302-15.952-56.259L-15.327-56.146Q-14.897-56.056-14.589-55.759Q-14.280-55.462-14.280-55.048Q-14.280-54.478-14.679-54.200Q-15.077-53.923-15.671-53.923Q-16.222-53.923-16.573-54.259L-16.870-53.946Q-16.893-53.923-16.929-53.923L-16.975-53.923Q-16.999-53.923-17.030-53.954Q-17.061-53.985-17.061-54.009",[1553],[1536,1649,1651],{"transform":1650},"translate(171.92 13.103)",[1549,1652],{"d":1653,"fill":1538,"stroke":1538,"className":1654,"style":1554},"M-23.202-54.001L-25.058-54.001L-25.058-54.298Q-24.784-54.298-24.616-54.345Q-24.448-54.392-24.448-54.560L-24.448-56.696Q-24.448-56.911-24.511-57.007Q-24.573-57.103-24.692-57.124Q-24.811-57.146-25.058-57.146L-25.058-57.442L-23.866-57.528L-23.866-56.794Q-23.753-57.009-23.559-57.177Q-23.366-57.345-23.128-57.437Q-22.890-57.528-22.636-57.528Q-21.468-57.528-21.468-56.450L-21.468-54.560Q-21.468-54.392-21.298-54.345Q-21.128-54.298-20.858-54.298L-20.858-54.001L-22.714-54.001L-22.714-54.298Q-22.440-54.298-22.272-54.345Q-22.104-54.392-22.104-54.560L-22.104-56.435Q-22.104-56.817-22.225-57.046Q-22.347-57.274-22.698-57.274Q-23.011-57.274-23.265-57.112Q-23.518-56.950-23.665-56.681Q-23.811-56.411-23.811-56.114L-23.811-54.560Q-23.811-54.392-23.641-54.345Q-23.472-54.298-23.202-54.298L-23.202-54.001M-20.413-55.696Q-20.413-56.200-20.157-56.632Q-19.901-57.063-19.466-57.315Q-19.030-57.567-18.530-57.567Q-18.143-57.567-17.802-57.423Q-17.460-57.278-17.198-57.017Q-16.936-56.755-16.794-56.419Q-16.651-56.083-16.651-55.696Q-16.651-55.204-16.915-54.794Q-17.179-54.384-17.608-54.153Q-18.038-53.923-18.530-53.923Q-19.022-53.923-19.456-54.155Q-19.890-54.388-20.151-54.796Q-20.413-55.204-20.413-55.696M-18.530-54.200Q-18.073-54.200-17.821-54.423Q-17.569-54.646-17.481-54.997Q-17.393-55.349-17.393-55.794Q-17.393-56.224-17.487-56.562Q-17.581-56.899-17.835-57.106Q-18.089-57.313-18.530-57.313Q-19.179-57.313-19.423-56.897Q-19.667-56.481-19.667-55.794Q-19.667-55.349-19.579-54.997Q-19.491-54.646-19.239-54.423Q-18.987-54.200-18.530-54.200",[1553],[1536,1656,1657,1664],{"stroke":1542,"fontFamily":1543,"fontSize":1544},[1536,1658,1660],{"transform":1659},"translate(-35.075 31.23)",[1549,1661],{"d":1662,"fill":1538,"stroke":1538,"className":1663,"style":1554},"M-23.202-54.001L-25.058-54.001L-25.058-54.298Q-24.784-54.298-24.616-54.345Q-24.448-54.392-24.448-54.560L-24.448-58.720Q-24.448-58.935-24.511-59.030Q-24.573-59.126-24.692-59.147Q-24.811-59.169-25.058-59.169L-25.058-59.466L-23.835-59.552L-23.835-56.849Q-23.710-57.060-23.522-57.210Q-23.335-57.360-23.108-57.444Q-22.882-57.528-22.636-57.528Q-21.468-57.528-21.468-56.450L-21.468-54.560Q-21.468-54.392-21.298-54.345Q-21.128-54.298-20.858-54.298L-20.858-54.001L-22.714-54.001L-22.714-54.298Q-22.440-54.298-22.272-54.345Q-22.104-54.392-22.104-54.560L-22.104-56.435Q-22.104-56.817-22.225-57.046Q-22.347-57.274-22.698-57.274Q-23.011-57.274-23.265-57.112Q-23.518-56.950-23.665-56.681Q-23.811-56.411-23.811-56.114L-23.811-54.560Q-23.811-54.392-23.641-54.345Q-23.472-54.298-23.202-54.298L-23.202-54.001M-20.315-54.833Q-20.315-55.317-19.913-55.612Q-19.511-55.907-18.960-56.026Q-18.409-56.146-17.917-56.146L-17.917-56.435Q-17.917-56.661-18.032-56.868Q-18.147-57.075-18.345-57.194Q-18.542-57.313-18.772-57.313Q-19.198-57.313-19.483-57.208Q-19.413-57.181-19.366-57.126Q-19.319-57.071-19.294-57.001Q-19.268-56.931-19.268-56.856Q-19.268-56.751-19.319-56.659Q-19.370-56.567-19.462-56.517Q-19.554-56.466-19.659-56.466Q-19.765-56.466-19.856-56.517Q-19.948-56.567-19.999-56.659Q-20.050-56.751-20.050-56.856Q-20.050-57.274-19.661-57.421Q-19.272-57.567-18.772-57.567Q-18.440-57.567-18.087-57.437Q-17.733-57.306-17.505-57.052Q-17.276-56.798-17.276-56.450L-17.276-54.649Q-17.276-54.517-17.204-54.407Q-17.132-54.298-17.003-54.298Q-16.878-54.298-16.809-54.403Q-16.741-54.509-16.741-54.649L-16.741-55.161L-16.460-55.161L-16.460-54.649Q-16.460-54.446-16.577-54.288Q-16.694-54.130-16.876-54.046Q-17.058-53.962-17.261-53.962Q-17.491-53.962-17.643-54.134Q-17.796-54.306-17.827-54.536Q-17.987-54.255-18.296-54.089Q-18.604-53.923-18.956-53.923Q-19.468-53.923-19.891-54.146Q-20.315-54.368-20.315-54.833M-19.628-54.833Q-19.628-54.548-19.401-54.362Q-19.175-54.177-18.882-54.177Q-18.636-54.177-18.411-54.294Q-18.186-54.411-18.052-54.614Q-17.917-54.817-17.917-55.071L-17.917-55.903Q-18.183-55.903-18.468-55.849Q-18.753-55.794-19.024-55.665Q-19.296-55.536-19.462-55.329Q-19.628-55.122-19.628-54.833M-16.124-54.009L-16.124-55.231Q-16.124-55.259-16.093-55.290Q-16.061-55.321-16.038-55.321L-15.933-55.321Q-15.862-55.321-15.847-55.259Q-15.784-54.938-15.645-54.698Q-15.507-54.458-15.274-54.317Q-15.042-54.177-14.733-54.177Q-14.495-54.177-14.286-54.237Q-14.077-54.298-13.940-54.446Q-13.804-54.595-13.804-54.841Q-13.804-55.095-14.015-55.261Q-14.225-55.427-14.495-55.481L-15.116-55.595Q-15.522-55.673-15.823-55.929Q-16.124-56.185-16.124-56.560Q-16.124-56.927-15.923-57.149Q-15.722-57.372-15.397-57.470Q-15.073-57.567-14.733-57.567Q-14.268-57.567-13.972-57.360L-13.749-57.544Q-13.725-57.567-13.694-57.567L-13.643-57.567Q-13.612-57.567-13.585-57.540Q-13.558-57.513-13.558-57.481L-13.558-56.497Q-13.558-56.466-13.583-56.437Q-13.608-56.407-13.643-56.407L-13.749-56.407Q-13.784-56.407-13.811-56.435Q-13.839-56.462-13.839-56.497Q-13.839-56.896-14.091-57.116Q-14.343-57.337-14.741-57.337Q-15.097-57.337-15.380-57.214Q-15.663-57.091-15.663-56.786Q-15.663-56.567-15.462-56.435Q-15.261-56.302-15.015-56.259L-14.390-56.146Q-13.960-56.056-13.651-55.759Q-13.343-55.462-13.343-55.048Q-13.343-54.478-13.741-54.200Q-14.140-53.923-14.733-53.923Q-15.284-53.923-15.636-54.259L-15.933-53.946Q-15.956-53.923-15.991-53.923L-16.038-53.923Q-16.061-53.923-16.093-53.954Q-16.124-53.985-16.124-54.009M-10.886-54.001L-12.741-54.001L-12.741-54.298Q-12.468-54.298-12.300-54.345Q-12.132-54.392-12.132-54.560L-12.132-58.720Q-12.132-58.935-12.194-59.030Q-12.257-59.126-12.376-59.147Q-12.495-59.169-12.741-59.169L-12.741-59.466L-11.518-59.552L-11.518-56.849Q-11.393-57.060-11.206-57.210Q-11.018-57.360-10.792-57.444Q-10.565-57.528-10.319-57.528Q-9.151-57.528-9.151-56.450L-9.151-54.560Q-9.151-54.392-8.981-54.345Q-8.811-54.298-8.542-54.298L-8.542-54.001L-10.397-54.001L-10.397-54.298Q-10.124-54.298-9.956-54.345Q-9.788-54.392-9.788-54.560L-9.788-56.435Q-9.788-56.817-9.909-57.046Q-10.030-57.274-10.382-57.274Q-10.694-57.274-10.948-57.112Q-11.202-56.950-11.349-56.681Q-11.495-56.411-11.495-56.114L-11.495-54.560Q-11.495-54.392-11.325-54.345Q-11.155-54.298-10.886-54.298",[1553],[1536,1665,1666],{"transform":1659},[1549,1667],{"d":1668,"fill":1538,"stroke":1538,"className":1669,"style":1554},"M-5.208-54.009L-5.208-55.231Q-5.208-55.259-5.176-55.290Q-5.145-55.321-5.122-55.321L-5.016-55.321Q-4.946-55.321-4.930-55.259Q-4.868-54.938-4.729-54.698Q-4.591-54.458-4.358-54.317Q-4.126-54.177-3.817-54.177Q-3.579-54.177-3.370-54.237Q-3.161-54.298-3.024-54.446Q-2.887-54.595-2.887-54.841Q-2.887-55.095-3.098-55.261Q-3.309-55.427-3.579-55.481L-4.200-55.595Q-4.606-55.673-4.907-55.929Q-5.208-56.185-5.208-56.560Q-5.208-56.927-5.007-57.149Q-4.805-57.372-4.481-57.470Q-4.157-57.567-3.817-57.567Q-3.352-57.567-3.055-57.360L-2.833-57.544Q-2.809-57.567-2.778-57.567L-2.727-57.567Q-2.696-57.567-2.669-57.540Q-2.641-57.513-2.641-57.481L-2.641-56.497Q-2.641-56.466-2.667-56.437Q-2.692-56.407-2.727-56.407L-2.833-56.407Q-2.868-56.407-2.895-56.435Q-2.923-56.462-2.923-56.497Q-2.923-56.896-3.175-57.116Q-3.426-57.337-3.825-57.337Q-4.180-57.337-4.464-57.214Q-4.747-57.091-4.747-56.786Q-4.747-56.567-4.546-56.435Q-4.344-56.302-4.098-56.259L-3.473-56.146Q-3.044-56.056-2.735-55.759Q-2.426-55.462-2.426-55.048Q-2.426-54.478-2.825-54.200Q-3.223-53.923-3.817-53.923Q-4.368-53.923-4.719-54.259L-5.016-53.946Q-5.040-53.923-5.075-53.923L-5.122-53.923Q-5.145-53.923-5.176-53.954Q-5.208-53.985-5.208-54.009M-1.899-55.755Q-1.899-56.235-1.667-56.651Q-1.434-57.067-1.024-57.317Q-0.614-57.567-0.137-57.567Q0.593-57.567 0.991-57.126Q1.390-56.685 1.390-55.954Q1.390-55.849 1.296-55.825L-1.153-55.825L-1.153-55.755Q-1.153-55.345-1.032-54.989Q-0.911-54.634-0.639-54.417Q-0.368-54.200 0.062-54.200Q0.425-54.200 0.722-54.429Q1.019-54.657 1.120-55.009Q1.128-55.056 1.214-55.071L1.296-55.071Q1.390-55.044 1.390-54.962Q1.390-54.954 1.382-54.923Q1.320-54.696 1.181-54.513Q1.042-54.329 0.851-54.196Q0.659-54.063 0.441-53.993Q0.222-53.923-0.016-53.923Q-0.387-53.923-0.725-54.060Q-1.063-54.196-1.331-54.448Q-1.598-54.700-1.749-55.040Q-1.899-55.380-1.899-55.755M-1.145-56.063L0.816-56.063Q0.816-56.368 0.714-56.659Q0.613-56.950 0.396-57.132Q0.179-57.313-0.137-57.313Q-0.438-57.313-0.669-57.126Q-0.899-56.938-1.022-56.647Q-1.145-56.356-1.145-56.063M2.503-54.962L2.503-57.153L1.800-57.153L1.800-57.407Q2.156-57.407 2.398-57.640Q2.640-57.872 2.751-58.220Q2.863-58.567 2.863-58.923L3.144-58.923L3.144-57.450L4.320-57.450L4.320-57.153L3.144-57.153L3.144-54.978Q3.144-54.657 3.263-54.429Q3.382-54.200 3.663-54.200Q3.843-54.200 3.960-54.323Q4.077-54.446 4.130-54.626Q4.183-54.806 4.183-54.978L4.183-55.450L4.464-55.450L4.464-54.962Q4.464-54.708 4.359-54.468Q4.253-54.228 4.056-54.075Q3.859-53.923 3.601-53.923Q3.284-53.923 3.032-54.046Q2.781-54.169 2.642-54.403Q2.503-54.638 2.503-54.962",[1553],[1536,1671,1672,1678,1683,1688],{"stroke":1542,"fontSize":1544},[1536,1673,1675],{"transform":1674},"translate(47.367 30.453)",[1549,1676],{"d":1601,"fill":1538,"stroke":1538,"className":1677,"style":1554},[1553],[1536,1679,1680],{"transform":1674},[1549,1681],{"d":1607,"fill":1538,"stroke":1538,"className":1682,"style":1554},[1553],[1536,1684,1685],{"transform":1674},[1549,1686],{"d":1613,"fill":1538,"stroke":1538,"className":1687,"style":1554},[1553],[1536,1689,1690],{"transform":1674},[1549,1691],{"d":1692,"fill":1538,"stroke":1538,"className":1693,"style":1554},"M-8.957-52.001L-9.039-52.001Q-9.075-52.001-9.100-52.030Q-9.125-52.060-9.125-52.099Q-9.125-52.149-9.094-52.169Q-8.707-52.505-8.424-52.954Q-8.141-53.403-7.975-53.903Q-7.809-54.403-7.735-54.921Q-7.661-55.438-7.661-56.001Q-7.661-56.571-7.735-57.087Q-7.809-57.603-7.975-58.099Q-8.141-58.595-8.420-59.042Q-8.700-59.489-9.094-59.833Q-9.125-59.853-9.125-59.903Q-9.125-59.942-9.100-59.972Q-9.075-60.001-9.039-60.001L-8.957-60.001Q-8.946-60.001-8.936-59.999Q-8.926-59.997-8.918-59.993Q-8.305-59.536-7.903-58.901Q-7.500-58.267-7.305-57.521Q-7.110-56.774-7.110-56.001Q-7.110-55.228-7.305-54.481Q-7.500-53.735-7.903-53.101Q-8.305-52.466-8.918-52.009Q-8.930-52.009-8.938-52.007Q-8.946-52.005-8.957-52.001",[1553],[1536,1695,1697],{"transform":1696},"translate(109.325 30.175)",[1549,1698],{"d":1653,"fill":1538,"stroke":1538,"className":1699,"style":1554},[1553],[1536,1701,1703],{"transform":1702},"translate(171.92 30.175)",[1549,1704],{"d":1653,"fill":1538,"stroke":1538,"className":1705,"style":1554},[1553],[1536,1707,1709],{"transform":1708},"translate(-26.295 48.207)",[1549,1710],{"d":1711,"fill":1712,"stroke":1712,"className":1713,"style":1554},"M-24.507-54.962L-24.507-57.153L-25.210-57.153L-25.210-57.407Q-24.854-57.407-24.612-57.640Q-24.370-57.872-24.259-58.220Q-24.147-58.567-24.147-58.923L-23.866-58.923L-23.866-57.450L-22.690-57.450L-22.690-57.153L-23.866-57.153L-23.866-54.978Q-23.866-54.657-23.747-54.429Q-23.628-54.200-23.347-54.200Q-23.167-54.200-23.050-54.323Q-22.933-54.446-22.880-54.626Q-22.827-54.806-22.827-54.978L-22.827-55.450L-22.546-55.450L-22.546-54.962Q-22.546-54.708-22.651-54.468Q-22.757-54.228-22.954-54.075Q-23.151-53.923-23.409-53.923Q-23.725-53.923-23.977-54.046Q-24.229-54.169-24.368-54.403Q-24.507-54.638-24.507-54.962M-19.819-54.001L-21.800-54.001L-21.800-54.298Q-21.530-54.298-21.362-54.343Q-21.194-54.388-21.194-54.560L-21.194-56.696Q-21.194-56.911-21.257-57.007Q-21.319-57.103-21.436-57.124Q-21.554-57.146-21.800-57.146L-21.800-57.442L-20.632-57.528L-20.632-56.743Q-20.554-56.954-20.401-57.140Q-20.249-57.325-20.050-57.427Q-19.850-57.528-19.624-57.528Q-19.378-57.528-19.186-57.384Q-18.995-57.239-18.995-57.009Q-18.995-56.853-19.100-56.743Q-19.206-56.634-19.362-56.634Q-19.518-56.634-19.628-56.743Q-19.737-56.853-19.737-57.009Q-19.737-57.169-19.632-57.274Q-19.956-57.274-20.171-57.046Q-20.386-56.817-20.481-56.478Q-20.577-56.138-20.577-55.833L-20.577-54.560Q-20.577-54.392-20.350-54.345Q-20.124-54.298-19.819-54.298L-19.819-54.001M-16.655-54.001L-18.433-54.001L-18.433-54.298Q-18.159-54.298-17.991-54.345Q-17.823-54.392-17.823-54.560L-17.823-56.696Q-17.823-56.911-17.880-57.007Q-17.936-57.103-18.050-57.124Q-18.163-57.146-18.409-57.146L-18.409-57.442L-17.210-57.528L-17.210-54.560Q-17.210-54.392-17.063-54.345Q-16.917-54.298-16.655-54.298L-16.655-54.001M-18.097-58.923Q-18.097-59.114-17.962-59.245Q-17.827-59.376-17.632-59.376Q-17.511-59.376-17.407-59.313Q-17.304-59.251-17.241-59.147Q-17.179-59.044-17.179-58.923Q-17.179-58.728-17.309-58.593Q-17.440-58.458-17.632-58.458Q-17.831-58.458-17.964-58.591Q-18.097-58.724-18.097-58.923M-16.155-55.755Q-16.155-56.235-15.923-56.651Q-15.690-57.067-15.280-57.317Q-14.870-57.567-14.393-57.567Q-13.663-57.567-13.265-57.126Q-12.866-56.685-12.866-55.954Q-12.866-55.849-12.960-55.825L-15.409-55.825L-15.409-55.755Q-15.409-55.345-15.288-54.989Q-15.167-54.634-14.895-54.417Q-14.624-54.200-14.194-54.200Q-13.831-54.200-13.534-54.429Q-13.237-54.657-13.136-55.009Q-13.128-55.056-13.042-55.071L-12.960-55.071Q-12.866-55.044-12.866-54.962Q-12.866-54.954-12.874-54.923Q-12.936-54.696-13.075-54.513Q-13.214-54.329-13.405-54.196Q-13.597-54.063-13.815-53.993Q-14.034-53.923-14.272-53.923Q-14.643-53.923-14.981-54.060Q-15.319-54.196-15.587-54.448Q-15.854-54.700-16.005-55.040Q-16.155-55.380-16.155-55.755M-15.401-56.063L-13.440-56.063Q-13.440-56.368-13.542-56.659Q-13.643-56.950-13.860-57.132Q-14.077-57.313-14.393-57.313Q-14.694-57.313-14.925-57.126Q-15.155-56.938-15.278-56.647Q-15.401-56.356-15.401-56.063","var(--tk-accent)",[1553],[1536,1715,1716,1722,1727,1732],{"fill":1712,"stroke":1542,"fontSize":1544},[1536,1717,1719],{"transform":1718},"translate(47.367 47.525)",[1549,1720],{"d":1601,"fill":1712,"stroke":1712,"className":1721,"style":1554},[1553],[1536,1723,1724],{"transform":1718},[1549,1725],{"d":1607,"fill":1712,"stroke":1712,"className":1726,"style":1554},[1553],[1536,1728,1729],{"transform":1718},[1549,1730],{"d":1613,"fill":1712,"stroke":1712,"className":1731,"style":1554},[1553],[1536,1733,1734],{"transform":1718},[1549,1735],{"d":1692,"fill":1712,"stroke":1712,"className":1736,"style":1554},[1553],[1536,1738,1739,1745],{"fill":1712,"stroke":1542,"fontFamily":1543,"fontSize":1544},[1536,1740,1742],{"transform":1741},"translate(108.12 46.469)",[1549,1743],{"d":1640,"fill":1712,"stroke":1712,"className":1744,"style":1554},[1553],[1536,1746,1747],{"transform":1741},[1549,1748],{"d":1646,"fill":1712,"stroke":1712,"className":1749,"style":1554},[1553],[1536,1751,1752,1758],{"fill":1712,"stroke":1542,"fontFamily":1543,"fontSize":1544},[1536,1753,1755],{"transform":1754},"translate(170.717 46.469)",[1549,1756],{"d":1640,"fill":1712,"stroke":1712,"className":1757,"style":1554},[1553],[1536,1759,1760],{"transform":1754},[1549,1761],{"d":1646,"fill":1712,"stroke":1712,"className":1762,"style":1554},[1553],[1549,1764],{"fill":1542,"stroke":1712,"d":1765,"style":1586},"M-65.203-17.012V.06h247.538v-17.07ZM182.335.06",[1767,1768,1771,1772,1787,1788,1803,1804,1828,1829,1853],"figcaption",{"className":1769},[1770],"tikz-cap","Cost of the three string-dictionary structures per operation on ",[385,1773,1775],{"className":1774},[388],[385,1776,1778],{"className":1777,"ariaHidden":393},[392],[385,1779,1781,1784],{"className":1780},[397],[385,1782],{"className":1783,"style":492},[401],[385,1785,433],{"className":1786},[406,407]," keys of length ",[385,1789,1791],{"className":1790},[388],[385,1792,1794],{"className":1793,"ariaHidden":393},[392],[385,1795,1797,1800],{"className":1796},[397],[385,1798],{"className":1799,"style":509},[401],[385,1801,513],{"className":1802},[406,407],". The trie alone drops the ",[385,1805,1807],{"className":1806},[388],[385,1808,1810],{"className":1809,"ariaHidden":393},[392],[385,1811,1813,1816,1822,1825],{"className":1812},[397],[385,1814],{"className":1815,"style":1398},[401],[385,1817,1819],{"className":1818},[418],[385,1820,424],{"className":1821,"style":423},[406,422],[385,1823],{"className":1824,"style":429},[428],[385,1826,433],{"className":1827},[406,407]," factor and answers prefix queries directly; the hash set is ",[385,1830,1832],{"className":1831},[388],[385,1833,1835],{"className":1834,"ariaHidden":393},[392],[385,1836,1838,1841,1844,1847,1850],{"className":1837},[397],[385,1839],{"className":1840,"style":402},[401],[385,1842,409],{"className":1843,"style":408},[406,407],[385,1845,414],{"className":1846},[413],[385,1848,513],{"className":1849},[406,407],[385,1851,438],{"className":1852},[437]," but unordered",[1523,1855,1857,2031],{"className":1856},[1526,1527],[1529,1858,1862],{"xmlns":1531,"width":1859,"height":1860,"viewBox":1861},"257.435","221.684","-75 -75 193.076 166.263",[1536,1863,1864,1867,1875,1878,1885,1888,1893,1898,1903,1906,1911,1916,1919,1922,1929,1932,1935,1942,1945,1948,1955,1958,1961,1968,1971,1974,1981,1984,1987,1994,1997,2000,2007,2010,2013,2019,2022,2025],{"stroke":1538,"style":1539},[1549,1865],{"fill":1542,"d":1866},"M48.192-63.534a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,1868,1870],{"transform":1869},"translate(-2.147 1.937)",[1549,1871],{"d":1872,"fill":1538,"stroke":1538,"className":1873,"style":1874},"M39.906-64.488Q39.906-64.844 40.122-65.160Q40.337-65.476 40.680-65.696Q40.350-65.942 40.350-66.307Q40.350-66.720 40.698-67.017Q41.045-67.313 41.530-67.463Q42.016-67.612 42.429-67.612Q42.592-67.612 42.875-67.542Q43.158-67.471 43.378-67.348Q43.598-67.225 43.598-67.072Q43.598-66.975 43.512-66.883Q43.427-66.790 43.330-66.790Q43.277-66.790 43.095-66.889Q42.912-66.988 42.743-67.056Q42.574-67.124 42.354-67.124Q42.051-67.124 41.647-67.052Q41.242-66.979 40.939-66.795Q40.636-66.610 40.636-66.316Q40.636-66.030 40.961-65.837Q41.365-66.008 41.770-66.008Q42.490-66.008 42.490-65.740Q42.490-65.534 42.244-65.474Q41.998-65.415 41.673-65.415Q41.234-65.415 40.952-65.542Q40.658-65.393 40.432-65.120Q40.205-64.848 40.205-64.549Q40.205-64.132 40.603-63.978Q41.001-63.824 41.484-63.824Q41.801-63.824 42.069-63.855Q42.337-63.886 42.572-64.006Q42.807-64.127 42.921-64.360Q42.956-64.426 43.040-64.426Q43.150-64.400 43.150-64.281Q43.150-64.255 43.132-64.220Q42.983-63.921 42.706-63.721Q42.429-63.521 42.097-63.429Q41.765-63.336 41.409-63.336Q41.045-63.336 40.700-63.464Q40.355-63.591 40.131-63.850Q39.906-64.110 39.906-64.488M41.365-65.705Q41.519-65.674 41.699-65.674Q42.033-65.674 42.174-65.722Q42.042-65.749 41.761-65.749Q41.576-65.749 41.365-65.705",[1553],"stroke-width:0.270",[1549,1876],{"fill":1542,"d":1877},"M-9.687-19.882a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,1879,1882],{"fill":1880,"stroke":1712,"style":1881},"var(--tk-soft-accent)","stroke-width:1.2",[1549,1883],{"d":1884},"M-47.932 24.053a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.536 0",[1549,1886],{"fill":1542,"d":1887},"M16.894 23.77a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,1889,1890],{"fill":1880,"stroke":1712,"style":1881},[1549,1891],{"d":1892},"M-9.97 67.706a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.536 0",[1536,1894,1895],{"fill":1880,"stroke":1712,"style":1881},[1549,1896],{"d":1897},"M16.894 72.94a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,1899,1900],{"fill":1880,"stroke":1712,"style":1881},[1549,1901],{"d":1902},"M43.757 67.706a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.536 0",[1549,1904],{"fill":1542,"d":1905},"M106.07-19.882a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.536 0",[1536,1907,1908],{"fill":1880,"stroke":1712,"style":1881},[1549,1909],{"d":1910},"M106.07 29.288a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.536 0",[1536,1912,1913],{"fill":1880,"stroke":1712,"style":1881},[1549,1914],{"d":1915},"M106.07 78.857a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.536 0",[1549,1917],{"fill":1542,"d":1918},"M32.681-58.274-9.652-26.346",[1549,1920],{"stroke":1542,"d":1921},"m-11.248-25.142 3.518-.65-1.922-.554-.005-2",[1536,1923,1925],{"transform":1924},"translate(-39.328 24.286)",[1549,1926],{"d":1927,"fill":1538,"stroke":1538,"className":1928,"style":1554},"M40.519-64.495L40.519-66.686L39.816-66.686L39.816-66.940Q40.172-66.940 40.414-67.173Q40.656-67.405 40.767-67.753Q40.879-68.100 40.879-68.456L41.160-68.456L41.160-66.983L42.336-66.983L42.336-66.686L41.160-66.686L41.160-64.511Q41.160-64.190 41.279-63.962Q41.398-63.733 41.679-63.733Q41.859-63.733 41.976-63.856Q42.093-63.979 42.146-64.159Q42.199-64.339 42.199-64.511L42.199-64.983L42.480-64.983L42.480-64.495Q42.480-64.241 42.375-64.001Q42.269-63.761 42.072-63.608Q41.875-63.456 41.617-63.456Q41.301-63.456 41.049-63.579Q40.797-63.702 40.658-63.936Q40.519-64.171 40.519-64.495",[1553],[1549,1930],{"fill":1542,"d":1931},"m46.63-58.274 42.333 31.928",[1549,1933],{"stroke":1542,"d":1934},"m90.56-25.142-1.591-3.204-.006 2-1.921.555",[1536,1936,1938],{"transform":1937},"translate(36.495 24.509)",[1549,1939],{"d":1940,"fill":1538,"stroke":1538,"className":1941,"style":1554},"M41.754-63.534L39.976-63.534L39.976-63.831Q40.250-63.831 40.418-63.878Q40.586-63.925 40.586-64.093L40.586-66.229Q40.586-66.444 40.529-66.540Q40.472-66.636 40.359-66.657Q40.246-66.679 40-66.679L40-66.975L41.199-67.061L41.199-64.093Q41.199-63.925 41.345-63.878Q41.492-63.831 41.754-63.831L41.754-63.534M40.312-68.456Q40.312-68.647 40.447-68.778Q40.582-68.909 40.777-68.909Q40.898-68.909 41.002-68.846Q41.105-68.784 41.168-68.680Q41.230-68.577 41.230-68.456Q41.230-68.261 41.099-68.126Q40.968-67.991 40.777-67.991Q40.578-67.991 40.445-68.124Q40.312-68.257 40.312-68.456",[1553],[1549,1943],{"fill":1542,"d":1944},"m-23.958-13.293-25.198 28.947",[1549,1946],{"stroke":1542,"d":1947},"m-50.47 17.163 3.308-1.364-1.994-.145-.42-1.955",[1536,1949,1951],{"transform":1950},"translate(-87.73 67.191)",[1549,1952],{"d":1953,"fill":1538,"stroke":1538,"className":1954,"style":1554},"M39.894-65.229Q39.894-65.733 40.150-66.165Q40.406-66.596 40.842-66.848Q41.277-67.100 41.777-67.100Q42.164-67.100 42.506-66.956Q42.847-66.811 43.109-66.550Q43.371-66.288 43.513-65.952Q43.656-65.616 43.656-65.229Q43.656-64.737 43.392-64.327Q43.129-63.917 42.699-63.686Q42.269-63.456 41.777-63.456Q41.285-63.456 40.851-63.688Q40.418-63.921 40.156-64.329Q39.894-64.737 39.894-65.229M41.777-63.733Q42.234-63.733 42.486-63.956Q42.738-64.179 42.826-64.530Q42.914-64.882 42.914-65.327Q42.914-65.757 42.820-66.095Q42.726-66.432 42.472-66.639Q42.218-66.846 41.777-66.846Q41.129-66.846 40.885-66.430Q40.640-66.014 40.640-65.327Q40.640-64.882 40.728-64.530Q40.816-64.179 41.068-63.956Q41.320-63.733 41.777-63.733",[1553],[1549,1956],{"fill":1542,"d":1957},"M-13.68-12.42 2.774 14.6",[1549,1959],{"stroke":1542,"d":1960},"m3.815 16.31-.298-3.566-.743 1.857-1.99-.192",[1536,1962,1964],{"transform":1963},"translate(-37.741 67.2)",[1549,1965],{"d":1966,"fill":1538,"stroke":1538,"className":1967,"style":1554},"M39.894-65.288Q39.894-65.768 40.127-66.184Q40.359-66.600 40.769-66.850Q41.179-67.100 41.656-67.100Q42.386-67.100 42.785-66.659Q43.183-66.218 43.183-65.487Q43.183-65.382 43.090-65.358L40.640-65.358L40.640-65.288Q40.640-64.878 40.761-64.522Q40.883-64.167 41.154-63.950Q41.426-63.733 41.855-63.733Q42.218-63.733 42.515-63.962Q42.812-64.190 42.914-64.542Q42.922-64.589 43.008-64.604L43.090-64.604Q43.183-64.577 43.183-64.495Q43.183-64.487 43.176-64.456Q43.113-64.229 42.974-64.046Q42.836-63.862 42.644-63.729Q42.453-63.596 42.234-63.526Q42.015-63.456 41.777-63.456Q41.406-63.456 41.068-63.593Q40.730-63.729 40.463-63.981Q40.195-64.233 40.045-64.573Q39.894-64.913 39.894-65.288M40.648-65.596L42.609-65.596Q42.609-65.901 42.508-66.192Q42.406-66.483 42.189-66.665Q41.972-66.846 41.656-66.846Q41.355-66.846 41.125-66.659Q40.894-66.471 40.771-66.180Q40.648-65.889 40.648-65.596",[1553],[1549,1969],{"fill":1542,"d":1970},"m3.801 31.223-16.498 26.983",[1549,1972],{"stroke":1542,"d":1973},"m-13.74 59.912 3.034-1.896-1.991.19-.74-1.859",[1536,1975,1977],{"transform":1976},"translate(-55.486 110.824)",[1549,1978],{"d":1979,"fill":1538,"stroke":1538,"className":1980,"style":1554},"M39.992-64.366Q39.992-64.850 40.394-65.145Q40.797-65.440 41.347-65.559Q41.898-65.679 42.390-65.679L42.390-65.968Q42.390-66.194 42.275-66.401Q42.160-66.608 41.963-66.727Q41.765-66.846 41.535-66.846Q41.109-66.846 40.824-66.741Q40.894-66.714 40.941-66.659Q40.988-66.604 41.013-66.534Q41.039-66.464 41.039-66.389Q41.039-66.284 40.988-66.192Q40.937-66.100 40.845-66.050Q40.754-65.999 40.648-65.999Q40.543-65.999 40.451-66.050Q40.359-66.100 40.308-66.192Q40.258-66.284 40.258-66.389Q40.258-66.807 40.646-66.954Q41.035-67.100 41.535-67.100Q41.867-67.100 42.220-66.970Q42.574-66.839 42.802-66.585Q43.031-66.331 43.031-65.983L43.031-64.182Q43.031-64.050 43.103-63.940Q43.176-63.831 43.304-63.831Q43.429-63.831 43.498-63.936Q43.566-64.042 43.566-64.182L43.566-64.694L43.847-64.694L43.847-64.182Q43.847-63.979 43.730-63.821Q43.613-63.663 43.431-63.579Q43.250-63.495 43.047-63.495Q42.816-63.495 42.664-63.667Q42.511-63.839 42.480-64.069Q42.320-63.788 42.011-63.622Q41.703-63.456 41.351-63.456Q40.840-63.456 40.416-63.679Q39.992-63.901 39.992-64.366M40.679-64.366Q40.679-64.081 40.906-63.895Q41.133-63.710 41.426-63.710Q41.672-63.710 41.896-63.827Q42.121-63.944 42.256-64.147Q42.390-64.350 42.390-64.604L42.390-65.436Q42.125-65.436 41.840-65.382Q41.554-65.327 41.283-65.198Q41.011-65.069 40.845-64.862Q40.679-64.655 40.679-64.366",[1553],[1549,1982],{"fill":1542,"d":1983},"M8.358 32.506v29.298",[1549,1985],{"stroke":1542,"d":1986},"m8.358 63.804 1.6-3.2-1.6 1.2-1.6-1.2",[1536,1988,1990],{"transform":1989},"translate(-42.395 114.467)",[1549,1991],{"d":1992,"fill":1538,"stroke":1538,"className":1993,"style":1554},"M41.711-63.456Q41.230-63.456 40.822-63.700Q40.414-63.944 40.176-64.358Q39.937-64.772 39.937-65.261Q39.937-65.753 40.195-66.169Q40.453-66.585 40.885-66.823Q41.316-67.061 41.808-67.061Q42.429-67.061 42.879-66.624L42.879-68.253Q42.879-68.468 42.816-68.563Q42.754-68.659 42.636-68.680Q42.519-68.702 42.273-68.702L42.273-68.999L43.496-69.085L43.496-64.276Q43.496-64.065 43.558-63.970Q43.621-63.874 43.738-63.852Q43.855-63.831 44.105-63.831L44.105-63.534L42.855-63.456L42.855-63.940Q42.390-63.456 41.711-63.456M41.777-63.710Q42.117-63.710 42.410-63.901Q42.703-64.093 42.855-64.389L42.855-66.221Q42.707-66.495 42.445-66.651Q42.183-66.807 41.871-66.807Q41.246-66.807 40.963-66.360Q40.679-65.913 40.679-65.253Q40.679-64.608 40.931-64.159Q41.183-63.710 41.777-63.710",[1553],[1549,1995],{"fill":1542,"d":1996},"m12.914 31.223 16.499 26.983",[1549,1998],{"stroke":1542,"d":1999},"m30.456 59.912-.304-3.565-.74 1.859-1.99-.19",[1536,2001,2003],{"transform":2002},"translate(-11.596 110.824)",[1549,2004],{"d":2005,"fill":1538,"stroke":1538,"className":2006,"style":1554},"M41.824-63.534L39.968-63.534L39.968-63.831Q40.242-63.831 40.410-63.878Q40.578-63.925 40.578-64.093L40.578-66.229Q40.578-66.444 40.515-66.540Q40.453-66.636 40.334-66.657Q40.215-66.679 39.968-66.679L39.968-66.975L41.160-67.061L41.160-66.327Q41.273-66.542 41.467-66.710Q41.660-66.878 41.898-66.970Q42.136-67.061 42.390-67.061Q43.558-67.061 43.558-65.983L43.558-64.093Q43.558-63.925 43.728-63.878Q43.898-63.831 44.168-63.831L44.168-63.534L42.312-63.534L42.312-63.831Q42.586-63.831 42.754-63.878Q42.922-63.925 42.922-64.093L42.922-65.968Q42.922-66.350 42.801-66.579Q42.679-66.807 42.328-66.807Q42.015-66.807 41.761-66.645Q41.508-66.483 41.361-66.214Q41.215-65.944 41.215-65.647L41.215-64.093Q41.215-63.925 41.385-63.878Q41.554-63.831 41.824-63.831",[1553],[1549,2008],{"fill":1542,"d":2009},"M97.534-11.146v29.298",[1549,2011],{"stroke":1542,"d":2012},"m97.534 20.152 1.6-3.2-1.6 1.2-1.6-1.2",[1536,2014,2016],{"transform":2015},"translate(64.253 69.76)",[1549,2017],{"d":2005,"fill":1538,"stroke":1538,"className":2018,"style":1554},[1553],[1549,2020],{"fill":1542,"d":2021},"M97.534 38.424v29.298",[1549,2023],{"stroke":1542,"d":2024},"m97.534 69.722 1.6-3.2-1.6 1.2-1.6-1.2",[1536,2026,2028],{"transform":2027},"translate(64.253 119.329)",[1549,2029],{"d":2005,"fill":1538,"stroke":1538,"className":2030,"style":1554},[1553],[1767,2032,2034,2035],{"className":2033},[1770],"A trie over {to, tea, ted, ten, in, inn}; shared prefixes stored once, lookup is ",[385,2036,2038],{"className":2037},[388],[385,2039,2041],{"className":2040,"ariaHidden":393},[392],[385,2042,2044,2047,2050,2053,2056],{"className":2043},[397],[385,2045],{"className":2046,"style":402},[401],[385,2048,409],{"className":2049,"style":408},[406,407],[385,2051,414],{"className":2052},[413],[385,2054,513],{"className":2055},[406,407],[385,2057,438],{"className":2058},[437],[381,2060,2061,2062,563,2064,2067,2068,2070,2071,2074],{},"The blue nodes are the six stored words; the white interior nodes (",[472,2063,842],{},[472,2065,2066],{},"te",",\n",[472,2069,748],{},") are prefixes shared among them and stored exactly once. Looking up ",[472,2072,2073],{},"ten","\nvisits three edges regardless of whether the trie holds six words or six million.",[645,2076,2078],{"id":2077},"space-and-trade-offs","Space and trade-offs",[381,2080,2081,2082,2145,2146,2161,2162,2177,2178,2193,2194,2197,2198,2232,2233,2248,2249,2273],{},"With array children the worst case is ",[385,2083,2085],{"className":2084},[388],[385,2086,2088,2115,2133],{"className":2087,"ariaHidden":393},[392],[385,2089,2091,2094,2097,2100,2103,2107,2112],{"className":2090},[397],[385,2092],{"className":2093,"style":402},[401],[385,2095,409],{"className":2096,"style":408},[406,407],[385,2098,414],{"className":2099},[413],[385,2101,433],{"className":2102},[406,407],[385,2104],{"className":2105,"style":2106},[428],"margin-right:0.2222em;",[385,2108,2111],{"className":2109},[2110],"mbin","⋅",[385,2113],{"className":2114,"style":2106},[428],[385,2116,2118,2121,2124,2127,2130],{"className":2117},[397],[385,2119],{"className":2120,"style":509},[401],[385,2122,513],{"className":2123},[406,407],[385,2125],{"className":2126,"style":2106},[428],[385,2128,2111],{"className":2129},[2110],[385,2131],{"className":2132,"style":2106},[428],[385,2134,2136,2139,2142],{"className":2135},[397],[385,2137],{"className":2138,"style":402},[401],[385,2140,961],{"className":2141},[406],[385,2143,438],{"className":2144},[437]," pointers:\n",[385,2147,2149],{"className":2148},[388],[385,2150,2152],{"className":2151,"ariaHidden":393},[392],[385,2153,2155,2158],{"className":2154},[397],[385,2156],{"className":2157,"style":492},[401],[385,2159,433],{"className":2160},[406,407]," keys, up to ",[385,2163,2165],{"className":2164},[388],[385,2166,2168],{"className":2167,"ariaHidden":393},[392],[385,2169,2171,2174],{"className":2170},[397],[385,2172],{"className":2173,"style":509},[401],[385,2175,513],{"className":2176},[406,407]," nodes each, ",[385,2179,2181],{"className":2180},[388],[385,2182,2184],{"className":2183,"ariaHidden":393},[392],[385,2185,2187,2190],{"className":2186},[397],[385,2188],{"className":2189,"style":402},[401],[385,2191,961],{"className":2192},[406]," slots per node. That bound is\npessimistic, and tries are far better than it suggests ",[441,2195,2196],{},"precisely when prefixes\nare shared",": every common prefix collapses to a single path, so a dictionary of\nEnglish words (densely overlapping) stores far fewer than ",[385,2199,2201],{"className":2200},[388],[385,2202,2204,2223],{"className":2203,"ariaHidden":393},[392],[385,2205,2207,2211,2214,2217,2220],{"className":2206},[397],[385,2208],{"className":2209,"style":2210},[401],"height:0.4445em;",[385,2212,433],{"className":2213},[406,407],[385,2215],{"className":2216,"style":2106},[428],[385,2218,2111],{"className":2219},[2110],[385,2221],{"className":2222,"style":2106},[428],[385,2224,2226,2229],{"className":2225},[397],[385,2227],{"className":2228,"style":509},[401],[385,2230,513],{"className":2231},[406,407]," nodes.\nHash-map children replace the ",[385,2234,2236],{"className":2235},[388],[385,2237,2239],{"className":2238,"ariaHidden":393},[392],[385,2240,2242,2245],{"className":2241},[397],[385,2243],{"className":2244,"style":402},[401],[385,2246,961],{"className":2247},[406]," factor with the actual child count,\ntrading a constant for the array's ",[385,2250,2252],{"className":2251},[388],[385,2253,2255],{"className":2254,"ariaHidden":393},[392],[385,2256,2258,2261,2264,2267,2270],{"className":2257},[397],[385,2259],{"className":2260,"style":402},[401],[385,2262,409],{"className":2263,"style":408},[406,407],[385,2265,414],{"className":2266},[413],[385,2268,466],{"className":2269},[406],[385,2271,438],{"className":2272},[437]," indexing.",[650,2275,2276],{"type":1339},[381,2277,2278,2281,2282,2285,2286,566,2289,2292,2293,2317,2318,2321,2322,2324],{},[578,2279,2280],{},"Remark (When to reach for a trie)."," Over a hash set, a trie gives ",[578,2283,2284],{},"ordered\ntraversal"," (an in-order DFS emits the keys sorted lexicographically), direct\n",[578,2287,2288],{},"prefix queries",[578,2290,2291],{},"no hashing \u002F no collisions","; its bound is a true\nworst case, not an expected one. Over a balanced BST it drops the ",[385,2294,2296],{"className":2295},[388],[385,2297,2299],{"className":2298,"ariaHidden":393},[392],[385,2300,2302,2305,2311,2314],{"className":2301},[397],[385,2303],{"className":2304,"style":1398},[401],[385,2306,2308],{"className":2307},[418],[385,2309,424],{"className":2310,"style":423},[406,422],[385,2312],{"className":2313,"style":429},[428],[385,2315,433],{"className":2316},[406,407],"\ncomparison factor and answers ",[472,2319,2320],{},"startsWith"," for free. The price is space when\nthe alphabet is large and prefixes are ",[441,2323,780],{}," shared.",[645,2326,2328],{"id":2327},"applications","Applications",[381,2330,2331,2334,2335,2359],{},[578,2332,2333],{},"Autocomplete and prefix search."," To offer completions for what a user has\ntyped, walk to the node for the typed prefix in ",[385,2336,2338],{"className":2337},[388],[385,2339,2341],{"className":2340,"ariaHidden":393},[392],[385,2342,2344,2347,2350,2353,2356],{"className":2343},[397],[385,2345],{"className":2346,"style":402},[401],[385,2348,409],{"className":2349,"style":408},[406,407],[385,2351,414],{"className":2352},[413],[385,2354,513],{"className":2355},[406,407],[385,2357,438],{"className":2358},[437],", then DFS the subtree\nbeneath it to enumerate every stored key with that prefix, since the trie has already\ngrouped them.",[1523,2361,2363,2548],{"className":2362},[1526,1527],[1529,2364,2368],{"xmlns":1531,"width":2365,"height":2366,"viewBox":2367},"195.622","272.600","-75 -75 146.716 204.450",[1536,2369,2370,2373,2379,2382,2387,2392,2397,2412,2427,2430,2433,2440,2443,2446,2453,2456,2459,2466,2474,2481,2488,2509],{"stroke":1538,"style":1539},[1549,2371],{"fill":1542,"d":2372},"M-9.687-52.427a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,2374,2375],{"transform":1869},[1549,2376],{"d":2377,"fill":1538,"stroke":1538,"className":2378,"style":1874},"M-17.973-53.381Q-17.973-53.737-17.757-54.053Q-17.542-54.369-17.199-54.589Q-17.529-54.835-17.529-55.200Q-17.529-55.613-17.181-55.910Q-16.834-56.206-16.349-56.356Q-15.863-56.505-15.450-56.505Q-15.287-56.505-15.004-56.435Q-14.721-56.364-14.501-56.241Q-14.281-56.118-14.281-55.965Q-14.281-55.868-14.367-55.776Q-14.452-55.683-14.549-55.683Q-14.602-55.683-14.784-55.782Q-14.967-55.881-15.136-55.949Q-15.305-56.017-15.525-56.017Q-15.828-56.017-16.232-55.945Q-16.637-55.872-16.940-55.688Q-17.243-55.503-17.243-55.209Q-17.243-54.923-16.918-54.730Q-16.514-54.901-16.109-54.901Q-15.389-54.901-15.389-54.633Q-15.389-54.427-15.635-54.367Q-15.881-54.308-16.206-54.308Q-16.645-54.308-16.927-54.435Q-17.221-54.286-17.447-54.013Q-17.674-53.741-17.674-53.442Q-17.674-53.025-17.276-52.871Q-16.878-52.717-16.395-52.717Q-16.078-52.717-15.810-52.748Q-15.542-52.779-15.307-52.899Q-15.072-53.020-14.958-53.253Q-14.923-53.319-14.839-53.319Q-14.729-53.293-14.729-53.174Q-14.729-53.148-14.747-53.113Q-14.896-52.814-15.173-52.614Q-15.450-52.414-15.782-52.322Q-16.114-52.229-16.470-52.229Q-16.834-52.229-17.179-52.357Q-17.524-52.484-17.748-52.743Q-17.973-53.003-17.973-53.381M-16.514-54.598Q-16.360-54.567-16.180-54.567Q-15.846-54.567-15.705-54.615Q-15.837-54.642-16.118-54.642Q-16.303-54.642-16.514-54.598",[1553],[1549,2380],{"fill":1542,"d":2381},"M-9.687-3.657a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0ZM-9.687 45.112a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,2383,2384],{"fill":1880,"stroke":1712,"style":1881},[1549,2385],{"d":2386},"M-47.932 89.047a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.536 0",[1536,2388,2389],{"fill":1880,"stroke":1712,"style":1881},[1549,2390],{"d":2391},"M-9.687 94.282a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,2393,2394],{"fill":1880,"stroke":1712,"style":1881},[1549,2395],{"d":2396},"M28.557 89.047a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.535 0",[1536,2398,2399,2402,2405],{"stroke":1712,"style":1586},[1549,2400],{"fill":1542,"d":2401},"M-18.223-43.691v28.698",[1549,2403],{"fill":1712,"stroke":1542,"d":2404},"m-18.223-12.393 2.08-4.16-2.08 1.56-2.08-1.56",[1536,2406,2408],{"transform":2407},"translate(-10.589 26.845)",[1549,2409],{"d":2410,"fill":1538,"stroke":1538,"className":2411,"style":1554},"M-17.360-53.388L-17.360-55.579L-18.063-55.579L-18.063-55.833Q-17.707-55.833-17.465-56.066Q-17.223-56.298-17.112-56.646Q-17-56.993-17-57.349L-16.719-57.349L-16.719-55.876L-15.543-55.876L-15.543-55.579L-16.719-55.579L-16.719-53.404Q-16.719-53.083-16.600-52.855Q-16.481-52.626-16.200-52.626Q-16.020-52.626-15.903-52.749Q-15.785-52.872-15.733-53.052Q-15.680-53.232-15.680-53.404L-15.680-53.876L-15.399-53.876L-15.399-53.388Q-15.399-53.134-15.504-52.894Q-15.610-52.654-15.807-52.501Q-16.004-52.349-16.262-52.349Q-16.578-52.349-16.830-52.472Q-17.082-52.595-17.221-52.829Q-17.360-53.064-17.360-53.388",[1553],[1536,2413,2414,2417,2420],{"stroke":1712,"style":1586},[1549,2415],{"fill":1542,"d":2416},"M-18.223 5.078v28.699",[1549,2418],{"fill":1712,"stroke":1542,"d":2419},"m-18.223 36.376 2.08-4.16-2.08 1.56-2.08-1.56",[1536,2421,2423],{"transform":2422},"translate(-10.825 74.877)",[1549,2424],{"d":2425,"fill":1538,"stroke":1538,"className":2426,"style":1554},"M-17.985-54.181Q-17.985-54.661-17.752-55.077Q-17.520-55.493-17.110-55.743Q-16.700-55.993-16.223-55.993Q-15.493-55.993-15.094-55.552Q-14.696-55.111-14.696-54.380Q-14.696-54.275-14.789-54.251L-17.239-54.251L-17.239-54.181Q-17.239-53.771-17.118-53.415Q-16.996-53.060-16.725-52.843Q-16.453-52.626-16.024-52.626Q-15.660-52.626-15.364-52.855Q-15.067-53.083-14.965-53.435Q-14.957-53.482-14.871-53.497L-14.789-53.497Q-14.696-53.470-14.696-53.388Q-14.696-53.380-14.703-53.349Q-14.766-53.122-14.905-52.939Q-15.043-52.755-15.235-52.622Q-15.426-52.489-15.645-52.419Q-15.864-52.349-16.102-52.349Q-16.473-52.349-16.811-52.486Q-17.149-52.622-17.416-52.874Q-17.684-53.126-17.834-53.466Q-17.985-53.806-17.985-54.181M-17.231-54.489L-15.270-54.489Q-15.270-54.794-15.371-55.085Q-15.473-55.376-15.690-55.558Q-15.907-55.739-16.223-55.739Q-16.524-55.739-16.754-55.552Q-16.985-55.364-17.108-55.073Q-17.231-54.782-17.231-54.489",[1553],[1549,2428],{"fill":1542,"d":2429},"m-23.958 51.701-25.198 28.947",[1549,2431],{"stroke":1542,"d":2432},"m-50.47 82.157 3.308-1.363-1.994-.146-.42-1.955",[1536,2434,2436],{"transform":2435},"translate(-29.852 121.078)",[1549,2437],{"d":2438,"fill":1538,"stroke":1538,"className":2439,"style":1554},"M-17.887-53.259Q-17.887-53.743-17.485-54.038Q-17.082-54.333-16.532-54.452Q-15.981-54.572-15.489-54.572L-15.489-54.861Q-15.489-55.087-15.604-55.294Q-15.719-55.501-15.916-55.620Q-16.114-55.739-16.344-55.739Q-16.770-55.739-17.055-55.634Q-16.985-55.607-16.938-55.552Q-16.891-55.497-16.866-55.427Q-16.840-55.357-16.840-55.282Q-16.840-55.177-16.891-55.085Q-16.942-54.993-17.034-54.943Q-17.125-54.892-17.231-54.892Q-17.336-54.892-17.428-54.943Q-17.520-54.993-17.571-55.085Q-17.621-55.177-17.621-55.282Q-17.621-55.700-17.233-55.847Q-16.844-55.993-16.344-55.993Q-16.012-55.993-15.659-55.863Q-15.305-55.732-15.077-55.478Q-14.848-55.224-14.848-54.876L-14.848-53.075Q-14.848-52.943-14.776-52.833Q-14.703-52.724-14.575-52.724Q-14.450-52.724-14.381-52.829Q-14.313-52.935-14.313-53.075L-14.313-53.587L-14.032-53.587L-14.032-53.075Q-14.032-52.872-14.149-52.714Q-14.266-52.556-14.448-52.472Q-14.629-52.388-14.832-52.388Q-15.063-52.388-15.215-52.560Q-15.368-52.732-15.399-52.962Q-15.559-52.681-15.868-52.515Q-16.176-52.349-16.528-52.349Q-17.039-52.349-17.463-52.572Q-17.887-52.794-17.887-53.259M-17.200-53.259Q-17.200-52.974-16.973-52.788Q-16.746-52.603-16.453-52.603Q-16.207-52.603-15.983-52.720Q-15.758-52.837-15.623-53.040Q-15.489-53.243-15.489-53.497L-15.489-54.329Q-15.754-54.329-16.039-54.275Q-16.325-54.220-16.596-54.091Q-16.868-53.962-17.034-53.755Q-17.200-53.548-17.200-53.259",[1553],[1549,2441],{"fill":1542,"d":2442},"M-18.223 53.848v29.298",[1549,2444],{"stroke":1542,"d":2445},"m-18.223 85.146 1.6-3.2-1.6 1.2-1.6-1.2",[1536,2447,2449],{"transform":2448},"translate(-11.097 124.702)",[1549,2450],{"d":2451,"fill":1538,"stroke":1538,"className":2452,"style":1554},"M-16.168-52.349Q-16.649-52.349-17.057-52.593Q-17.465-52.837-17.703-53.251Q-17.942-53.665-17.942-54.154Q-17.942-54.646-17.684-55.062Q-17.426-55.478-16.994-55.716Q-16.563-55.954-16.071-55.954Q-15.450-55.954-15-55.517L-15-57.146Q-15-57.361-15.063-57.456Q-15.125-57.552-15.243-57.573Q-15.360-57.595-15.606-57.595L-15.606-57.892L-14.383-57.978L-14.383-53.169Q-14.383-52.958-14.321-52.863Q-14.258-52.767-14.141-52.745Q-14.024-52.724-13.774-52.724L-13.774-52.427L-15.024-52.349L-15.024-52.833Q-15.489-52.349-16.168-52.349M-16.102-52.603Q-15.762-52.603-15.469-52.794Q-15.176-52.986-15.024-53.282L-15.024-55.114Q-15.172-55.388-15.434-55.544Q-15.696-55.700-16.008-55.700Q-16.633-55.700-16.916-55.253Q-17.200-54.806-17.200-54.146Q-17.200-53.501-16.948-53.052Q-16.696-52.603-16.102-52.603",[1553],[1549,2454],{"fill":1542,"d":2455},"M-12.487 51.701 12.71 80.648",[1549,2457],{"stroke":1542,"d":2458},"m14.024 82.157-.895-3.464-.419 1.955-1.994.146",[1536,2460,2462],{"transform":2461},"translate(25.366 121.078)",[1549,2463],{"d":2464,"fill":1538,"stroke":1538,"className":2465,"style":1554},"M-16.055-52.427L-17.910-52.427L-17.910-52.724Q-17.637-52.724-17.469-52.771Q-17.301-52.818-17.301-52.986L-17.301-55.122Q-17.301-55.337-17.364-55.433Q-17.426-55.529-17.545-55.550Q-17.664-55.572-17.910-55.572L-17.910-55.868L-16.719-55.954L-16.719-55.220Q-16.606-55.435-16.412-55.603Q-16.219-55.771-15.981-55.863Q-15.743-55.954-15.489-55.954Q-14.321-55.954-14.321-54.876L-14.321-52.986Q-14.321-52.818-14.151-52.771Q-13.981-52.724-13.711-52.724L-13.711-52.427L-15.567-52.427L-15.567-52.724Q-15.293-52.724-15.125-52.771Q-14.957-52.818-14.957-52.986L-14.957-54.861Q-14.957-55.243-15.078-55.472Q-15.200-55.700-15.551-55.700Q-15.864-55.700-16.118-55.538Q-16.371-55.376-16.518-55.107Q-16.664-54.837-16.664-54.540L-16.664-52.986Q-16.664-52.818-16.494-52.771Q-16.325-52.724-16.055-52.724",[1553],[1536,2467,2469],{"transform":2468},"translate(-43.578 166.99)",[1549,2470],{"d":2471,"fill":1712,"stroke":1712,"className":2472,"style":2473},"M-17.382-53.268L-17.382-55.165L-18.021-55.165L-18.021-55.387Q-17.703-55.387-17.486-55.597Q-17.269-55.807-17.169-56.117Q-17.068-56.426-17.068-56.734L-16.801-56.734L-16.801-55.445L-15.724-55.445L-15.724-55.165L-16.801-55.165L-16.801-53.281Q-16.801-53.005-16.697-52.806Q-16.593-52.608-16.333-52.608Q-16.176-52.608-16.070-52.712Q-15.964-52.817-15.914-52.970Q-15.865-53.124-15.865-53.281L-15.865-53.695L-15.598-53.695L-15.598-53.268Q-15.598-53.042-15.697-52.832Q-15.796-52.622-15.981-52.490Q-16.165-52.359-16.394-52.359Q-16.832-52.359-17.107-52.596Q-17.382-52.834-17.382-53.268M-14.829-53.962Q-14.829-54.283-14.704-54.572Q-14.579-54.861-14.354-55.084Q-14.128-55.308-13.833-55.428Q-13.537-55.548-13.219-55.548Q-12.891-55.548-12.629-55.448Q-12.368-55.349-12.192-55.167Q-12.016-54.984-11.922-54.726Q-11.828-54.468-11.828-54.136Q-11.828-54.044-11.910-54.023L-14.166-54.023L-14.166-53.962Q-14.166-53.374-13.882-52.991Q-13.598-52.608-13.031-52.608Q-12.710-52.608-12.442-52.801Q-12.173-52.994-12.084-53.309Q-12.077-53.350-12.002-53.364L-11.910-53.364Q-11.828-53.340-11.828-53.268Q-11.828-53.261-11.835-53.234Q-11.948-52.837-12.318-52.598Q-12.689-52.359-13.113-52.359Q-13.551-52.359-13.951-52.567Q-14.350-52.776-14.590-53.143Q-14.829-53.510-14.829-53.962M-14.159-54.232L-12.344-54.232Q-12.344-54.509-12.442-54.761Q-12.539-55.014-12.737-55.170Q-12.935-55.325-13.219-55.325Q-13.496-55.325-13.710-55.167Q-13.923-55.008-14.041-54.753Q-14.159-54.498-14.159-54.232M-11.182-53.155Q-11.182-53.487-10.958-53.714Q-10.734-53.941-10.391-54.069Q-10.047-54.198-9.675-54.250Q-9.302-54.303-8.998-54.303L-8.998-54.556Q-8.998-54.761-9.106-54.941Q-9.213-55.120-9.394-55.223Q-9.576-55.325-9.784-55.325Q-10.191-55.325-10.427-55.233Q-10.338-55.196-10.292-55.112Q-10.245-55.028-10.245-54.926Q-10.245-54.830-10.292-54.751Q-10.338-54.673-10.418-54.628Q-10.498-54.584-10.587-54.584Q-10.738-54.584-10.838-54.681Q-10.939-54.779-10.939-54.926Q-10.939-55.548-9.784-55.548Q-9.572-55.548-9.323-55.484Q-9.073-55.421-8.871-55.302Q-8.670-55.182-8.543-54.997Q-8.417-54.813-8.417-54.570L-8.417-52.994Q-8.417-52.878-8.355-52.782Q-8.294-52.687-8.181-52.687Q-8.072-52.687-8.007-52.781Q-7.942-52.875-7.942-52.994L-7.942-53.442L-7.675-53.442L-7.675-52.994Q-7.675-52.724-7.902-52.559Q-8.130-52.393-8.410-52.393Q-8.619-52.393-8.755-52.547Q-8.892-52.700-8.916-52.916Q-9.063-52.649-9.345-52.504Q-9.627-52.359-9.952-52.359Q-10.228-52.359-10.512-52.434Q-10.796-52.509-10.989-52.688Q-11.182-52.868-11.182-53.155M-10.567-53.155Q-10.567-52.981-10.466-52.851Q-10.365-52.721-10.210-52.651Q-10.054-52.581-9.890-52.581Q-9.671-52.581-9.463-52.678Q-9.254-52.776-9.126-52.957Q-8.998-53.138-8.998-53.364L-8.998-54.092Q-9.323-54.092-9.688-54.001Q-10.054-53.910-10.310-53.698Q-10.567-53.487-10.567-53.155",[1553],"stroke-width:0.210",[1536,2475,2477],{"transform":2476},"translate(-5.549 172.502)",[1549,2478],{"d":2479,"fill":1712,"stroke":1712,"className":2480,"style":2473},"M-17.382-53.268L-17.382-55.165L-18.021-55.165L-18.021-55.387Q-17.703-55.387-17.486-55.597Q-17.269-55.807-17.169-56.117Q-17.068-56.426-17.068-56.734L-16.801-56.734L-16.801-55.445L-15.724-55.445L-15.724-55.165L-16.801-55.165L-16.801-53.281Q-16.801-53.005-16.697-52.806Q-16.593-52.608-16.333-52.608Q-16.176-52.608-16.070-52.712Q-15.964-52.817-15.914-52.970Q-15.865-53.124-15.865-53.281L-15.865-53.695L-15.598-53.695L-15.598-53.268Q-15.598-53.042-15.697-52.832Q-15.796-52.622-15.981-52.490Q-16.165-52.359-16.394-52.359Q-16.832-52.359-17.107-52.596Q-17.382-52.834-17.382-53.268M-14.829-53.962Q-14.829-54.283-14.704-54.572Q-14.579-54.861-14.354-55.084Q-14.128-55.308-13.833-55.428Q-13.537-55.548-13.219-55.548Q-12.891-55.548-12.629-55.448Q-12.368-55.349-12.192-55.167Q-12.016-54.984-11.922-54.726Q-11.828-54.468-11.828-54.136Q-11.828-54.044-11.910-54.023L-14.166-54.023L-14.166-53.962Q-14.166-53.374-13.882-52.991Q-13.598-52.608-13.031-52.608Q-12.710-52.608-12.442-52.801Q-12.173-52.994-12.084-53.309Q-12.077-53.350-12.002-53.364L-11.910-53.364Q-11.828-53.340-11.828-53.268Q-11.828-53.261-11.835-53.234Q-11.948-52.837-12.318-52.598Q-12.689-52.359-13.113-52.359Q-13.551-52.359-13.951-52.567Q-14.350-52.776-14.590-53.143Q-14.829-53.510-14.829-53.962M-14.159-54.232L-12.344-54.232Q-12.344-54.509-12.442-54.761Q-12.539-55.014-12.737-55.170Q-12.935-55.325-13.219-55.325Q-13.496-55.325-13.710-55.167Q-13.923-55.008-14.041-54.753Q-14.159-54.498-14.159-54.232M-11.240-53.938Q-11.240-54.276-11.100-54.567Q-10.960-54.857-10.715-55.071Q-10.471-55.284-10.167-55.399Q-9.863-55.513-9.538-55.513Q-9.268-55.513-9.005-55.414Q-8.742-55.315-8.550-55.137L-8.550-56.535Q-8.550-56.805-8.658-56.867Q-8.765-56.928-9.077-56.928L-9.077-57.209L-8-57.284L-8-53.100Q-8-52.912-7.945-52.829Q-7.890-52.745-7.790-52.726Q-7.689-52.707-7.473-52.707L-7.473-52.427L-8.581-52.359L-8.581-52.776Q-8.998-52.359-9.623-52.359Q-10.054-52.359-10.427-52.571Q-10.799-52.782-11.020-53.143Q-11.240-53.504-11.240-53.938M-9.565-52.581Q-9.357-52.581-9.171-52.653Q-8.984-52.724-8.830-52.861Q-8.677-52.998-8.581-53.176L-8.581-54.785Q-8.666-54.932-8.812-55.052Q-8.957-55.172-9.126-55.231Q-9.295-55.291-9.476-55.291Q-10.037-55.291-10.305-54.902Q-10.574-54.512-10.574-53.931Q-10.574-53.360-10.339-52.970Q-10.105-52.581-9.565-52.581",[1553],[1536,2482,2484],{"transform":2483},"translate(32.696 166.99)",[1549,2485],{"d":2486,"fill":1712,"stroke":1712,"className":2487,"style":2473},"M-17.382-53.268L-17.382-55.165L-18.021-55.165L-18.021-55.387Q-17.703-55.387-17.486-55.597Q-17.269-55.807-17.169-56.117Q-17.068-56.426-17.068-56.734L-16.801-56.734L-16.801-55.445L-15.724-55.445L-15.724-55.165L-16.801-55.165L-16.801-53.281Q-16.801-53.005-16.697-52.806Q-16.593-52.608-16.333-52.608Q-16.176-52.608-16.070-52.712Q-15.964-52.817-15.914-52.970Q-15.865-53.124-15.865-53.281L-15.865-53.695L-15.598-53.695L-15.598-53.268Q-15.598-53.042-15.697-52.832Q-15.796-52.622-15.981-52.490Q-16.165-52.359-16.394-52.359Q-16.832-52.359-17.107-52.596Q-17.382-52.834-17.382-53.268M-14.829-53.962Q-14.829-54.283-14.704-54.572Q-14.579-54.861-14.354-55.084Q-14.128-55.308-13.833-55.428Q-13.537-55.548-13.219-55.548Q-12.891-55.548-12.629-55.448Q-12.368-55.349-12.192-55.167Q-12.016-54.984-11.922-54.726Q-11.828-54.468-11.828-54.136Q-11.828-54.044-11.910-54.023L-14.166-54.023L-14.166-53.962Q-14.166-53.374-13.882-52.991Q-13.598-52.608-13.031-52.608Q-12.710-52.608-12.442-52.801Q-12.173-52.994-12.084-53.309Q-12.077-53.350-12.002-53.364L-11.910-53.364Q-11.828-53.340-11.828-53.268Q-11.828-53.261-11.835-53.234Q-11.948-52.837-12.318-52.598Q-12.689-52.359-13.113-52.359Q-13.551-52.359-13.951-52.567Q-14.350-52.776-14.590-53.143Q-14.829-53.510-14.829-53.962M-14.159-54.232L-12.344-54.232Q-12.344-54.509-12.442-54.761Q-12.539-55.014-12.737-55.170Q-12.935-55.325-13.219-55.325Q-13.496-55.325-13.710-55.167Q-13.923-55.008-14.041-54.753Q-14.159-54.498-14.159-54.232M-9.558-52.427L-11.192-52.427L-11.192-52.707Q-10.963-52.707-10.815-52.741Q-10.666-52.776-10.666-52.916L-10.666-54.765Q-10.666-55.035-10.774-55.096Q-10.881-55.158-11.192-55.158L-11.192-55.438L-10.133-55.513L-10.133-54.864Q-9.962-55.172-9.658-55.343Q-9.353-55.513-9.008-55.513Q-8.502-55.513-8.219-55.290Q-7.935-55.066-7.935-54.570L-7.935-52.916Q-7.935-52.779-7.786-52.743Q-7.638-52.707-7.412-52.707L-7.412-52.427L-9.042-52.427L-9.042-52.707Q-8.813-52.707-8.665-52.741Q-8.516-52.776-8.516-52.916L-8.516-54.556Q-8.516-54.891-8.636-55.091Q-8.755-55.291-9.070-55.291Q-9.340-55.291-9.574-55.155Q-9.808-55.018-9.946-54.784Q-10.085-54.550-10.085-54.276L-10.085-52.916Q-10.085-52.779-9.934-52.743Q-9.784-52.707-9.558-52.707",[1553],[1536,2489,2490,2497,2503],{"fill":1712,"stroke":1542,"fontFamily":1543,"fontSize":1544},[1536,2491,2493],{"transform":2492},"translate(44.86 99.54)",[1549,2494],{"d":2495,"fill":1712,"stroke":1712,"className":2496,"style":1554},"M-16.102-50.876L-17.957-50.876L-17.957-51.169Q-17.688-51.169-17.520-51.214Q-17.352-51.259-17.352-51.435L-17.352-55.259Q-17.352-55.466-17.508-55.519Q-17.664-55.572-17.957-55.572L-17.957-55.868L-16.735-55.954L-16.735-55.489Q-16.504-55.712-16.190-55.833Q-15.875-55.954-15.535-55.954Q-15.063-55.954-14.659-55.708Q-14.254-55.462-14.022-55.046Q-13.789-54.630-13.789-54.154Q-13.789-53.779-13.938-53.450Q-14.086-53.122-14.356-52.870Q-14.625-52.618-14.969-52.484Q-15.313-52.349-15.672-52.349Q-15.961-52.349-16.233-52.470Q-16.504-52.591-16.711-52.802L-16.711-51.435Q-16.711-51.259-16.543-51.214Q-16.375-51.169-16.102-51.169L-16.102-50.876M-16.711-55.091L-16.711-53.251Q-16.559-52.962-16.297-52.782Q-16.035-52.603-15.727-52.603Q-15.442-52.603-15.219-52.741Q-14.996-52.880-14.844-53.111Q-14.692-53.341-14.614-53.613Q-14.535-53.884-14.535-54.154Q-14.535-54.486-14.660-54.843Q-14.785-55.200-15.034-55.437Q-15.282-55.673-15.629-55.673Q-15.953-55.673-16.248-55.517Q-16.543-55.361-16.711-55.091M-11.258-52.427L-13.239-52.427L-13.239-52.724Q-12.969-52.724-12.801-52.769Q-12.633-52.814-12.633-52.986L-12.633-55.122Q-12.633-55.337-12.696-55.433Q-12.758-55.529-12.875-55.550Q-12.993-55.572-13.239-55.572L-13.239-55.868L-12.071-55.954L-12.071-55.169Q-11.993-55.380-11.840-55.566Q-11.688-55.751-11.489-55.853Q-11.289-55.954-11.063-55.954Q-10.817-55.954-10.625-55.810Q-10.434-55.665-10.434-55.435Q-10.434-55.279-10.539-55.169Q-10.645-55.060-10.801-55.060Q-10.957-55.060-11.067-55.169Q-11.176-55.279-11.176-55.435Q-11.176-55.595-11.071-55.700Q-11.395-55.700-11.610-55.472Q-11.825-55.243-11.920-54.904Q-12.016-54.564-12.016-54.259L-12.016-52.986Q-12.016-52.818-11.789-52.771Q-11.563-52.724-11.258-52.724L-11.258-52.427M-9.953-54.181Q-9.953-54.661-9.721-55.077Q-9.489-55.493-9.078-55.743Q-8.668-55.993-8.192-55.993Q-7.461-55.993-7.063-55.552Q-6.664-55.111-6.664-54.380Q-6.664-54.275-6.758-54.251L-9.207-54.251L-9.207-54.181Q-9.207-53.771-9.086-53.415Q-8.965-53.060-8.694-52.843Q-8.422-52.626-7.993-52.626Q-7.629-52.626-7.332-52.855Q-7.035-53.083-6.934-53.435Q-6.926-53.482-6.840-53.497L-6.758-53.497Q-6.664-53.470-6.664-53.388Q-6.664-53.380-6.672-53.349Q-6.735-53.122-6.873-52.939Q-7.012-52.755-7.203-52.622Q-7.395-52.489-7.614-52.419Q-7.832-52.349-8.071-52.349Q-8.442-52.349-8.780-52.486Q-9.118-52.622-9.385-52.874Q-9.653-53.126-9.803-53.466Q-9.953-53.806-9.953-54.181M-9.200-54.489L-7.239-54.489Q-7.239-54.794-7.340-55.085Q-7.442-55.376-7.659-55.558Q-7.875-55.739-8.192-55.739Q-8.493-55.739-8.723-55.552Q-8.953-55.364-9.077-55.073Q-9.200-54.782-9.200-54.489M-4.317-52.427L-6.149-52.427L-6.149-52.724Q-5.879-52.724-5.711-52.769Q-5.543-52.814-5.543-52.986L-5.543-55.579L-6.184-55.579L-6.184-55.876L-5.543-55.876L-5.543-56.810Q-5.543-57.224-5.235-57.505Q-4.926-57.786-4.481-57.923Q-4.035-58.060-3.629-58.060Q-3.227-58.060-2.909-57.833Q-2.590-57.607-2.590-57.220Q-2.590-57.044-2.703-56.931Q-2.817-56.818-2.989-56.818Q-3.164-56.818-3.278-56.931Q-3.391-57.044-3.391-57.220Q-3.391-57.364-3.301-57.474Q-3.211-57.583-3.078-57.611Q-3.364-57.802-3.711-57.802Q-4.008-57.802-4.295-57.681Q-4.582-57.560-4.766-57.327Q-4.950-57.095-4.950-56.794L-4.950-55.876L-3.797-55.876L-2.575-55.970L-2.575-52.986Q-2.575-52.818-2.407-52.771Q-2.239-52.724-1.965-52.724L-1.965-52.427L-3.797-52.427L-3.797-52.724Q-3.528-52.724-3.360-52.769Q-3.192-52.814-3.192-52.986L-3.192-55.146Q-3.192-55.353-3.239-55.452Q-3.285-55.552-3.461-55.579L-4.926-55.579L-4.926-52.986Q-4.926-52.818-4.758-52.771Q-4.590-52.724-4.317-52.724L-4.317-52.427M-0.071-52.427L-1.567-52.427L-1.567-52.724Q-0.934-52.724-0.512-53.204L0.257-54.114L-0.735-55.314Q-0.891-55.493-1.053-55.536Q-1.215-55.579-1.520-55.579L-1.520-55.876L0.168-55.876L0.168-55.579Q0.074-55.579-0.002-55.536Q-0.078-55.493-0.078-55.404Q-0.078-55.361-0.047-55.314L0.609-54.525L1.090-55.099Q1.207-55.236 1.207-55.372Q1.207-55.462 1.156-55.521Q1.105-55.579 1.023-55.579L1.023-55.876L2.511-55.876L2.511-55.579Q1.875-55.579 1.465-55.099L0.785-54.298L1.871-52.986Q2.031-52.810 2.191-52.767Q2.351-52.724 2.656-52.724L2.656-52.427L0.968-52.427L0.968-52.724Q1.058-52.724 1.136-52.767Q1.215-52.810 1.215-52.900Q1.215-52.923 1.183-52.986L0.441-53.892L-0.145-53.204Q-0.262-53.068-0.262-52.931Q-0.262-52.845-0.211-52.784Q-0.160-52.724-0.071-52.724",[1553],[1536,2498,2499],{"transform":2492},[1549,2500],{"d":2501,"fill":1712,"stroke":1712,"className":2502,"style":1554},"M7.800-52.427L5.944-52.427L5.944-52.724Q6.218-52.724 6.386-52.771Q6.554-52.818 6.554-52.986L6.554-55.122Q6.554-55.337 6.491-55.433Q6.429-55.529 6.310-55.550Q6.191-55.572 5.944-55.572L5.944-55.868L7.136-55.954L7.136-55.220Q7.249-55.435 7.443-55.603Q7.636-55.771 7.874-55.863Q8.112-55.954 8.366-55.954Q9.534-55.954 9.534-54.876L9.534-52.986Q9.534-52.818 9.704-52.771Q9.874-52.724 10.144-52.724L10.144-52.427L8.288-52.427L8.288-52.724Q8.562-52.724 8.730-52.771Q8.898-52.818 8.898-52.986L8.898-54.861Q8.898-55.243 8.777-55.472Q8.655-55.700 8.304-55.700Q7.991-55.700 7.737-55.538Q7.484-55.376 7.337-55.107Q7.191-54.837 7.191-54.540L7.191-52.986Q7.191-52.818 7.361-52.771Q7.530-52.724 7.800-52.724L7.800-52.427M10.589-54.122Q10.589-54.626 10.845-55.058Q11.101-55.489 11.536-55.741Q11.972-55.993 12.472-55.993Q12.859-55.993 13.200-55.849Q13.542-55.704 13.804-55.443Q14.066-55.181 14.208-54.845Q14.351-54.509 14.351-54.122Q14.351-53.630 14.087-53.220Q13.823-52.810 13.394-52.579Q12.964-52.349 12.472-52.349Q11.980-52.349 11.546-52.581Q11.112-52.814 10.851-53.222Q10.589-53.630 10.589-54.122M12.472-52.626Q12.929-52.626 13.181-52.849Q13.433-53.072 13.521-53.423Q13.609-53.775 13.609-54.220Q13.609-54.650 13.515-54.988Q13.421-55.325 13.167-55.532Q12.913-55.739 12.472-55.739Q11.823-55.739 11.579-55.323Q11.335-54.907 11.335-54.220Q11.335-53.775 11.423-53.423Q11.511-53.072 11.763-52.849Q12.015-52.626 12.472-52.626",[1553],[1536,2504,2505],{"transform":2492},[1549,2506],{"d":2507,"fill":1712,"stroke":1712,"className":2508,"style":1554},"M16.895-52.349Q16.414-52.349 16.006-52.593Q15.598-52.837 15.360-53.251Q15.121-53.665 15.121-54.154Q15.121-54.646 15.379-55.062Q15.637-55.478 16.069-55.716Q16.500-55.954 16.992-55.954Q17.613-55.954 18.063-55.517L18.063-57.146Q18.063-57.361 18-57.456Q17.938-57.552 17.820-57.573Q17.703-57.595 17.457-57.595L17.457-57.892L18.680-57.978L18.680-53.169Q18.680-52.958 18.742-52.863Q18.805-52.767 18.922-52.745Q19.039-52.724 19.289-52.724L19.289-52.427L18.039-52.349L18.039-52.833Q17.574-52.349 16.895-52.349M16.961-52.603Q17.301-52.603 17.594-52.794Q17.887-52.986 18.039-53.282L18.039-55.114Q17.891-55.388 17.629-55.544Q17.367-55.700 17.055-55.700Q16.430-55.700 16.147-55.253Q15.863-54.806 15.863-54.146Q15.863-53.501 16.115-53.052Q16.367-52.603 16.961-52.603M19.797-54.181Q19.797-54.661 20.029-55.077Q20.262-55.493 20.672-55.743Q21.082-55.993 21.559-55.993Q22.289-55.993 22.688-55.552Q23.086-55.111 23.086-54.380Q23.086-54.275 22.992-54.251L20.543-54.251L20.543-54.181Q20.543-53.771 20.664-53.415Q20.785-53.060 21.057-52.843Q21.328-52.626 21.758-52.626Q22.121-52.626 22.418-52.855Q22.715-53.083 22.817-53.435Q22.824-53.482 22.910-53.497L22.992-53.497Q23.086-53.470 23.086-53.388Q23.086-53.380 23.078-53.349Q23.016-53.122 22.877-52.939Q22.738-52.755 22.547-52.622Q22.356-52.489 22.137-52.419Q21.918-52.349 21.680-52.349Q21.309-52.349 20.971-52.486Q20.633-52.622 20.365-52.874Q20.098-53.126 19.947-53.466Q19.797-53.806 19.797-54.181M20.551-54.489L22.512-54.489Q22.512-54.794 22.410-55.085Q22.309-55.376 22.092-55.558Q21.875-55.739 21.559-55.739Q21.258-55.739 21.027-55.552Q20.797-55.364 20.674-55.073Q20.551-54.782 20.551-54.489",[1553],[1536,2510,2511,2518,2524,2530,2536,2542],{"stroke":1542,"fontSize":1544},[1536,2512,2514],{"transform":2513},"translate(29.114 2)",[1549,2515],{"d":2516,"fill":1538,"stroke":1538,"className":2517,"style":1554},"M-16.399-52.458L-17.469-55.314Q-17.535-55.493-17.666-55.536Q-17.797-55.579-18.055-55.579L-18.055-55.876L-16.375-55.876L-16.375-55.579Q-16.825-55.579-16.825-55.380Q-16.821-55.364-16.819-55.347Q-16.817-55.329-16.817-55.314L-16.024-53.220L-15.313-55.130Q-15.348-55.224-15.348-55.269Q-15.348-55.314-15.383-55.314Q-15.450-55.493-15.580-55.536Q-15.711-55.579-15.965-55.579L-15.965-55.876L-14.375-55.876L-14.375-55.579Q-14.825-55.579-14.825-55.380Q-14.821-55.361-14.819-55.343Q-14.817-55.325-14.817-55.314L-13.985-53.099L-13.231-55.099Q-13.207-55.157-13.207-55.228Q-13.207-55.388-13.344-55.484Q-13.481-55.579-13.649-55.579L-13.649-55.876L-12.262-55.876L-12.262-55.579Q-12.496-55.579-12.674-55.452Q-12.852-55.325-12.934-55.099L-13.918-52.458Q-13.973-52.349-14.086-52.349L-14.145-52.349Q-14.258-52.349-14.301-52.458L-15.160-54.732L-16.016-52.458Q-16.055-52.349-16.176-52.349L-16.231-52.349Q-16.344-52.349-16.399-52.458",[1553],[1536,2519,2520],{"transform":2513},[1549,2521],{"d":2522,"fill":1538,"stroke":1538,"className":2523,"style":1554},"M-11.984-53.259Q-11.984-53.743-11.582-54.038Q-11.179-54.333-10.629-54.452Q-10.078-54.572-9.586-54.572L-9.586-54.861Q-9.586-55.087-9.701-55.294Q-9.816-55.501-10.013-55.620Q-10.211-55.739-10.441-55.739Q-10.867-55.739-11.152-55.634Q-11.082-55.607-11.035-55.552Q-10.988-55.497-10.963-55.427Q-10.937-55.357-10.937-55.282Q-10.937-55.177-10.988-55.085Q-11.039-54.993-11.131-54.943Q-11.222-54.892-11.328-54.892Q-11.433-54.892-11.525-54.943Q-11.617-54.993-11.668-55.085Q-11.718-55.177-11.718-55.282Q-11.718-55.700-11.330-55.847Q-10.941-55.993-10.441-55.993Q-10.109-55.993-9.756-55.863Q-9.402-55.732-9.174-55.478Q-8.945-55.224-8.945-54.876L-8.945-53.075Q-8.945-52.943-8.873-52.833Q-8.800-52.724-8.672-52.724Q-8.547-52.724-8.478-52.829Q-8.410-52.935-8.410-53.075L-8.410-53.587L-8.129-53.587L-8.129-53.075Q-8.129-52.872-8.246-52.714Q-8.363-52.556-8.545-52.472Q-8.726-52.388-8.929-52.388Q-9.160-52.388-9.312-52.560Q-9.465-52.732-9.496-52.962Q-9.656-52.681-9.965-52.515Q-10.273-52.349-10.625-52.349Q-11.136-52.349-11.560-52.572Q-11.984-52.794-11.984-53.259M-11.297-53.259Q-11.297-52.974-11.070-52.788Q-10.843-52.603-10.550-52.603Q-10.304-52.603-10.080-52.720Q-9.855-52.837-9.720-53.040Q-9.586-53.243-9.586-53.497L-9.586-54.329Q-9.851-54.329-10.136-54.275Q-10.422-54.220-10.693-54.091Q-10.965-53.962-11.131-53.755Q-11.297-53.548-11.297-53.259M-5.922-52.427L-7.754-52.427L-7.754-52.724Q-7.480-52.724-7.312-52.771Q-7.144-52.818-7.144-52.986L-7.144-57.146Q-7.144-57.361-7.207-57.456Q-7.269-57.552-7.388-57.573Q-7.508-57.595-7.754-57.595L-7.754-57.892L-6.531-57.978L-6.531-52.986Q-6.531-52.818-6.363-52.771Q-6.195-52.724-5.922-52.724L-5.922-52.427M-3.652-52.427L-5.449-52.427L-5.449-52.724Q-5.179-52.724-5.011-52.769Q-4.843-52.814-4.843-52.986L-4.843-57.146Q-4.843-57.361-4.906-57.456Q-4.968-57.552-5.086-57.573Q-5.203-57.595-5.449-57.595L-5.449-57.892L-4.226-57.978L-4.226-54.212L-3.129-55.099Q-2.922-55.279-2.922-55.427Q-2.922-55.493-2.974-55.536Q-3.027-55.579-3.097-55.579L-3.097-55.876L-1.562-55.876L-1.562-55.579Q-2.093-55.579-2.691-55.099L-3.300-54.603L-2.226-53.204Q-2.090-53.029-1.982-52.921Q-1.875-52.814-1.740-52.769Q-1.605-52.724-1.379-52.724L-1.379-52.427L-3.004-52.427L-3.004-52.724Q-2.761-52.724-2.761-52.876Q-2.761-52.954-2.804-53.025Q-2.847-53.095-2.929-53.204L-3.730-54.251L-4.258-53.825L-4.258-52.986Q-4.258-52.818-4.090-52.771Q-3.922-52.724-3.652-52.724",[1553],[1536,2525,2526],{"transform":2513},[1549,2527],{"d":2528,"fill":1538,"stroke":1538,"className":2529,"style":1554},"M2.017-54.427Q2.017-55.103 2.320-55.753Q2.623-56.404 3.152-56.929Q3.681-57.454 4.343-57.757Q5.006-58.060 5.673-58.060Q6.154-58.060 6.550-57.902Q6.947-57.743 7.242-57.450Q7.537-57.157 7.697-56.753Q7.857-56.349 7.857-55.868Q7.857-55.185 7.556-54.534Q7.256-53.884 6.730-53.366Q6.205-52.849 5.554-52.554Q4.904-52.259 4.220-52.259Q3.752-52.259 3.341-52.417Q2.931-52.575 2.636-52.864Q2.341-53.154 2.179-53.552Q2.017-53.950 2.017-54.427M4.298-52.556Q4.892-52.556 5.414-52.894Q5.935-53.232 6.308-53.779Q6.681-54.325 6.882-54.958Q7.084-55.591 7.084-56.146Q7.084-56.603 6.912-56.978Q6.740-57.353 6.406-57.566Q6.072-57.779 5.603-57.779Q4.986-57.779 4.470-57.458Q3.955-57.138 3.591-56.611Q3.228-56.083 3.035-55.454Q2.841-54.825 2.841-54.251Q2.841-53.532 3.220-53.044Q3.599-52.556 4.298-52.556",[1553],[1536,2531,2532],{"transform":2513},[1549,2533],{"d":2534,"fill":1538,"stroke":1538,"className":2535,"style":1554},"M10.913-50.435Q10.300-50.892 9.898-51.527Q9.495-52.161 9.300-52.907Q9.105-53.654 9.105-54.427Q9.105-55.200 9.300-55.947Q9.495-56.693 9.898-57.327Q10.300-57.962 10.913-58.419Q10.925-58.423 10.933-58.425Q10.941-58.427 10.952-58.427L11.030-58.427Q11.069-58.427 11.095-58.400Q11.120-58.372 11.120-58.329Q11.120-58.279 11.089-58.259Q10.581-57.806 10.259-57.183Q9.937-56.560 9.796-55.864Q9.655-55.169 9.655-54.427Q9.655-53.693 9.794-52.993Q9.933-52.294 10.257-51.669Q10.581-51.044 11.089-50.595Q11.120-50.575 11.120-50.525Q11.120-50.482 11.095-50.454Q11.069-50.427 11.030-50.427L10.952-50.427Q10.944-50.431 10.935-50.433Q10.925-50.435 10.913-50.435",[1553],[1536,2537,2538],{"transform":2513},[1549,2539],{"d":2540,"fill":1538,"stroke":1538,"className":2541,"style":1554},"M16.250-52.427L12.082-52.427Q11.985-52.458 11.985-52.556L12.008-52.657Q12.043-52.712 12.106-52.724Q12.547-52.724 12.706-52.763Q12.864-52.802 12.907-53.029L13.985-57.349Q14.008-57.419 14.008-57.482Q14.008-57.544 13.946-57.564Q13.801-57.595 13.379-57.595Q13.274-57.622 13.274-57.724L13.305-57.825Q13.336-57.884 13.395-57.892L15.754-57.892Q15.793-57.892 15.821-57.855Q15.848-57.818 15.848-57.771L15.825-57.665Q15.793-57.607 15.731-57.595Q15.145-57.595 14.946-57.556Q14.778-57.505 14.723-57.290L13.641-52.970Q13.610-52.845 13.610-52.771Q13.610-52.724 13.860-52.724L14.680-52.724Q15.141-52.724 15.477-52.839Q15.813-52.954 16.047-53.177Q16.282-53.400 16.448-53.708Q16.614-54.017 16.778-54.466Q16.825-54.525 16.875-54.540L16.954-54.540Q17.051-54.513 17.051-54.427Q17.051-54.419 17.043-54.380L16.344-52.497Q16.305-52.435 16.250-52.427",[1553],[1536,2543,2544],{"transform":2513},[1549,2545],{"d":2546,"fill":1538,"stroke":1538,"className":2547,"style":1554},"M18.024-50.427L17.942-50.427Q17.906-50.427 17.881-50.456Q17.856-50.486 17.856-50.525Q17.856-50.575 17.887-50.595Q18.274-50.931 18.557-51.380Q18.840-51.829 19.006-52.329Q19.172-52.829 19.246-53.347Q19.320-53.864 19.320-54.427Q19.320-54.997 19.246-55.513Q19.172-56.029 19.006-56.525Q18.840-57.021 18.561-57.468Q18.281-57.915 17.887-58.259Q17.856-58.279 17.856-58.329Q17.856-58.368 17.881-58.398Q17.906-58.427 17.942-58.427L18.024-58.427Q18.035-58.427 18.045-58.425Q18.055-58.423 18.063-58.419Q18.676-57.962 19.078-57.327Q19.481-56.693 19.676-55.947Q19.871-55.200 19.871-54.427Q19.871-53.654 19.676-52.907Q19.481-52.161 19.078-51.527Q18.676-50.892 18.063-50.435Q18.051-50.435 18.043-50.433Q18.035-50.431 18.024-50.427",[1553],[1767,2549,2551,2552,2576,2577,2612],{"className":2550},[1770],"Autocomplete for prefix \\texttt{te}: walk to the prefix node in ",[385,2553,2555],{"className":2554},[388],[385,2556,2558],{"className":2557,"ariaHidden":393},[392],[385,2559,2561,2564,2567,2570,2573],{"className":2560},[397],[385,2562],{"className":2563,"style":402},[401],[385,2565,409],{"className":2566,"style":408},[406,407],[385,2568,414],{"className":2569},[413],[385,2571,513],{"className":2572},[406,407],[385,2574,438],{"className":2575},[437]," (accent path ",[385,2578,2580],{"className":2579},[388],[385,2581,2583,2602],{"className":2582,"ariaHidden":393},[392],[385,2584,2586,2589,2592,2595,2599],{"className":2585},[397],[385,2587],{"className":2588,"style":925},[401],[385,2590,842],{"className":2591},[406,407],[385,2593],{"className":2594,"style":910},[428],[385,2596,2598],{"className":2597},[914],"→",[385,2600],{"className":2601,"style":910},[428],[385,2603,2605,2608],{"className":2604},[397],[385,2606],{"className":2607,"style":492},[401],[385,2609,2611],{"className":2610},[406,407],"e","), then DFS the subtree to emit every completion — \\texttt{tea}, \\texttt{ted}, \\texttt{ten} — already grouped under that node",[381,2614,2615,1477,2621,2624,2625,2627,2628,2630,2631,2634,2635,2659,2660,2662],{},[578,2616,2617,2618,2620],{},"Wildcard dictionary (the ",[583,2619,932],{}," problem).",[441,2622,2623],{},"Design Add and Search Words"," asks for a\ndictionary where a query may contain ",[472,2626,932],{}," matching any single character. Plain\nsearch no longer follows one path: at a ",[472,2629,932],{}," we must branch into ",[441,2632,2633],{},"all"," children\nand recurse. Concrete characters keep the search ",[385,2636,2638],{"className":2637},[388],[385,2639,2641],{"className":2640,"ariaHidden":393},[392],[385,2642,2644,2647,2650,2653,2656],{"className":2643},[397],[385,2645],{"className":2646,"style":402},[401],[385,2648,409],{"className":2649,"style":408},[406,407],[385,2651,414],{"className":2652},[413],[385,2654,513],{"className":2655},[406,407],[385,2657,438],{"className":2658},[437],"; each ",[472,2661,932],{}," multiplies the\nbranching, but the trie still prunes any path that cannot match.",[1084,2664,2666],{"className":1086,"code":2665,"language":1088,"meta":376,"style":376},"caption: $\\textsc{WildSearch}(x, w, i)$ — match $w$ from node $x$, $w_i$ may be $\\texttt{.}$\nif $i > L$ then\n  return $isEnd(x)$\nif $w_i = \\texttt{\".\"}$ then\n  for each child $c$ of $x$ do\n    if $\\textsc{WildSearch}(c, w, i+1)$ then return true\n  return false\nelse\n  if $child(x, w_i) = \\text{nil}$ then return false\n  return $\\textsc{WildSearch}(child(x, w_i), w, i+1)$\n",[472,2667,2668,2673,2678,2683,2688,2693,2698,2703,2708,2713],{"__ignoreMap":376},[385,2669,2670],{"class":1093,"line":6},[385,2671,2672],{},"caption: $\\textsc{WildSearch}(x, w, i)$ — match $w$ from node $x$, $w_i$ may be $\\texttt{.}$\n",[385,2674,2675],{"class":1093,"line":18},[385,2676,2677],{},"if $i > L$ then\n",[385,2679,2680],{"class":1093,"line":24},[385,2681,2682],{},"  return $isEnd(x)$\n",[385,2684,2685],{"class":1093,"line":73},[385,2686,2687],{},"if $w_i = \\texttt{\".\"}$ then\n",[385,2689,2690],{"class":1093,"line":102},[385,2691,2692],{},"  for each child $c$ of $x$ do\n",[385,2694,2695],{"class":1093,"line":108},[385,2696,2697],{},"    if $\\textsc{WildSearch}(c, w, i+1)$ then return true\n",[385,2699,2700],{"class":1093,"line":116},[385,2701,2702],{},"  return false\n",[385,2704,2705],{"class":1093,"line":196},[385,2706,2707],{},"else\n",[385,2709,2710],{"class":1093,"line":202},[385,2711,2712],{},"  if $child(x, w_i) = \\text{nil}$ then return false\n",[385,2714,2715],{"class":1093,"line":283},[385,2716,2717],{},"  return $\\textsc{WildSearch}(child(x, w_i), w, i+1)$\n",[1523,2719,2721,2866],{"className":2720},[1526,1527],[1529,2722,2726],{"xmlns":1531,"width":2723,"height":2724,"viewBox":2725},"232.069","250.967","-75 -75 174.052 188.225",[1536,2727,2728,2731,2737,2740,2745,2759,2775,2790,2805,2824,2831],{"stroke":1538,"style":1539},[1549,2729],{"fill":1542,"d":2730},"M11.036-63.534a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.536 0",[1536,2732,2733],{"transform":1869},[1549,2734],{"d":2735,"fill":1538,"stroke":1538,"className":2736,"style":1874},"M2.750-64.488Q2.750-64.844 2.966-65.160Q3.181-65.476 3.524-65.696Q3.194-65.942 3.194-66.307Q3.194-66.720 3.542-67.017Q3.889-67.313 4.374-67.463Q4.860-67.612 5.273-67.612Q5.436-67.612 5.719-67.542Q6.002-67.471 6.222-67.348Q6.442-67.225 6.442-67.072Q6.442-66.975 6.356-66.883Q6.271-66.790 6.174-66.790Q6.121-66.790 5.939-66.889Q5.756-66.988 5.587-67.056Q5.418-67.124 5.198-67.124Q4.895-67.124 4.491-67.052Q4.086-66.979 3.783-66.795Q3.480-66.610 3.480-66.316Q3.480-66.030 3.805-65.837Q4.209-66.008 4.614-66.008Q5.334-66.008 5.334-65.740Q5.334-65.534 5.088-65.474Q4.842-65.415 4.517-65.415Q4.078-65.415 3.796-65.542Q3.502-65.393 3.276-65.120Q3.049-64.848 3.049-64.549Q3.049-64.132 3.447-63.978Q3.845-63.824 4.328-63.824Q4.645-63.824 4.913-63.855Q5.181-63.886 5.416-64.006Q5.651-64.127 5.765-64.360Q5.800-64.426 5.884-64.426Q5.994-64.400 5.994-64.281Q5.994-64.255 5.976-64.220Q5.827-63.921 5.550-63.721Q5.273-63.521 4.941-63.429Q4.609-63.336 4.253-63.336Q3.889-63.336 3.544-63.464Q3.199-63.591 2.975-63.850Q2.750-64.110 2.750-64.488M4.209-65.705Q4.363-65.674 4.543-65.674Q4.877-65.674 5.018-65.722Q4.886-65.749 4.605-65.749Q4.420-65.749 4.209-65.705",[1553],[1549,2738],{"fill":1542,"d":2739},"M11.036-14.765a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0ZM-41.152 28.888a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0ZM46.153 28.888a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,2741,2742],{"fill":1880,"stroke":1712,"style":1881},[1549,2743],{"d":2744},"M46.153 78.057a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,2746,2747,2750,2753],{"stroke":1712,"style":1586},[1549,2748],{"fill":1542,"d":2749},"M2.5-54.798V-26.1",[1549,2751],{"fill":1712,"stroke":1542,"d":2752},"m2.5-23.5 2.08-4.16L2.5-26.1.42-27.66",[1536,2754,2755],{"transform":2407},[1549,2756],{"d":2757,"fill":1538,"stroke":1538,"className":2758,"style":1554},"M3.363-64.495L3.363-66.686L2.660-66.686L2.660-66.940Q3.016-66.940 3.258-67.173Q3.500-67.405 3.611-67.753Q3.723-68.100 3.723-68.456L4.004-68.456L4.004-66.983L5.180-66.983L5.180-66.686L4.004-66.686L4.004-64.511Q4.004-64.190 4.123-63.962Q4.242-63.733 4.523-63.733Q4.703-63.733 4.820-63.856Q4.938-63.979 4.990-64.159Q5.043-64.339 5.043-64.511L5.043-64.983L5.324-64.983L5.324-64.495Q5.324-64.241 5.219-64.001Q5.113-63.761 4.916-63.608Q4.719-63.456 4.461-63.456Q4.145-63.456 3.893-63.579Q3.641-63.702 3.502-63.936Q3.363-64.171 3.363-64.495",[1553],[1536,2760,2762,2765,2768],{"stroke":2761,"style":1586},"var(--tk-warn)",[1549,2763],{"fill":1542,"d":2764},"m-4.2-9.16-36.793 30.775",[1549,2766],{"fill":2761,"stroke":1542,"d":2767},"m-42.987 23.283 4.525-1.073-2.531-.595-.138-2.596",[1536,2769,2771],{"transform":2770},"translate(-37.155 72.318)",[1549,2772],{"d":2773,"fill":1538,"stroke":1538,"className":2774,"style":1554},"M2.738-65.229Q2.738-65.733 2.994-66.165Q3.250-66.596 3.686-66.848Q4.121-67.100 4.621-67.100Q5.008-67.100 5.350-66.956Q5.691-66.811 5.953-66.550Q6.215-66.288 6.357-65.952Q6.500-65.616 6.500-65.229Q6.500-64.737 6.236-64.327Q5.973-63.917 5.543-63.686Q5.113-63.456 4.621-63.456Q4.129-63.456 3.695-63.688Q3.262-63.921 3-64.329Q2.738-64.737 2.738-65.229M4.621-63.733Q5.078-63.733 5.330-63.956Q5.582-64.179 5.670-64.530Q5.758-64.882 5.758-65.327Q5.758-65.757 5.664-66.095Q5.570-66.432 5.316-66.639Q5.063-66.846 4.621-66.846Q3.973-66.846 3.729-66.430Q3.484-66.014 3.484-65.327Q3.484-64.882 3.572-64.530Q3.660-64.179 3.912-63.956Q4.164-63.733 4.621-63.733",[1553],[1536,2776,2777,2780,2783],{"stroke":2761,"style":1586},[1549,2778],{"fill":1542,"d":2779},"m7.976-7.958 22.536 28.014",[1549,2781],{"fill":2761,"stroke":1542,"d":2782},"m32.141 22.081-.986-4.544-.643 2.519-2.599.088",[1536,2784,2786],{"transform":2785},"translate(24.605 72.318)",[1549,2787],{"d":2788,"fill":1538,"stroke":1538,"className":2789,"style":1554},"M2.738-65.288Q2.738-65.768 2.971-66.184Q3.203-66.600 3.613-66.850Q4.023-67.100 4.500-67.100Q5.230-67.100 5.629-66.659Q6.027-66.218 6.027-65.487Q6.027-65.382 5.934-65.358L3.484-65.358L3.484-65.288Q3.484-64.878 3.605-64.522Q3.727-64.167 3.998-63.950Q4.270-63.733 4.699-63.733Q5.063-63.733 5.359-63.962Q5.656-64.190 5.758-64.542Q5.766-64.589 5.852-64.604L5.934-64.604Q6.027-64.577 6.027-64.495Q6.027-64.487 6.020-64.456Q5.957-64.229 5.818-64.046Q5.680-63.862 5.488-63.729Q5.297-63.596 5.078-63.526Q4.859-63.456 4.621-63.456Q4.250-63.456 3.912-63.593Q3.574-63.729 3.307-63.981Q3.039-64.233 2.889-64.573Q2.738-64.913 2.738-65.288M3.492-65.596L5.453-65.596Q5.453-65.901 5.352-66.192Q5.250-66.483 5.033-66.665Q4.816-66.846 4.500-66.846Q4.199-66.846 3.969-66.659Q3.738-66.471 3.615-66.180Q3.492-65.889 3.492-65.596",[1553],[1536,2791,2792,2795,2798],{"stroke":1712,"style":1586},[1549,2793],{"fill":1542,"d":2794},"M37.617 37.624v28.698",[1549,2796],{"fill":1712,"stroke":1542,"d":2797},"m37.617 68.922 2.08-4.16-2.08 1.56-2.08-1.56",[1536,2799,2801],{"transform":2800},"translate(41.691 118.529)",[1549,2802],{"d":2803,"fill":1538,"stroke":1538,"className":2804,"style":1554},"M4.668-63.534L2.813-63.534L2.813-63.831Q3.086-63.831 3.254-63.878Q3.422-63.925 3.422-64.093L3.422-66.229Q3.422-66.444 3.359-66.540Q3.297-66.636 3.178-66.657Q3.059-66.679 2.813-66.679L2.813-66.975L4.004-67.061L4.004-66.327Q4.117-66.542 4.311-66.710Q4.504-66.878 4.742-66.970Q4.980-67.061 5.234-67.061Q6.402-67.061 6.402-65.983L6.402-64.093Q6.402-63.925 6.572-63.878Q6.742-63.831 7.012-63.831L7.012-63.534L5.156-63.534L5.156-63.831Q5.430-63.831 5.598-63.878Q5.766-63.925 5.766-64.093L5.766-65.968Q5.766-66.350 5.645-66.579Q5.523-66.807 5.172-66.807Q4.859-66.807 4.605-66.645Q4.352-66.483 4.205-66.214Q4.059-65.944 4.059-65.647L4.059-64.093Q4.059-63.925 4.229-63.878Q4.398-63.831 4.668-63.831",[1553],[1536,2806,2807],{"fill":2761,"stroke":2761},[1536,2808,2811,2818],{"fill":2761,"stroke":1542,"fontFamily":2809,"fontSize":2810},"cmr7","7",[1536,2812,2814],{"transform":2813},"translate(-67.917 116.392)",[1549,2815],{"d":2816,"fill":2761,"stroke":2761,"className":2817,"style":2473},"M2.814-65.045Q2.814-65.383 2.955-65.674Q3.095-65.964 3.339-66.178Q3.583-66.391 3.888-66.506Q4.192-66.620 4.517-66.620Q4.787-66.620 5.050-66.521Q5.313-66.422 5.504-66.244L5.504-67.642Q5.504-67.912 5.397-67.974Q5.289-68.035 4.978-68.035L4.978-68.316L6.055-68.391L6.055-64.207Q6.055-64.019 6.109-63.936Q6.164-63.852 6.265-63.833Q6.366-63.814 6.581-63.814L6.581-63.534L5.474-63.466L5.474-63.883Q5.057-63.466 4.431-63.466Q4-63.466 3.628-63.678Q3.255-63.889 3.035-64.250Q2.814-64.611 2.814-65.045M4.489-63.688Q4.698-63.688 4.884-63.760Q5.070-63.831 5.224-63.968Q5.378-64.105 5.474-64.283L5.474-65.892Q5.388-66.039 5.243-66.159Q5.098-66.279 4.928-66.338Q4.759-66.398 4.578-66.398Q4.018-66.398 3.749-66.009Q3.481-65.619 3.481-65.038Q3.481-64.467 3.715-64.077Q3.949-63.688 4.489-63.688M7.189-65.069Q7.189-65.390 7.314-65.679Q7.439-65.968 7.665-66.191Q7.890-66.415 8.186-66.535Q8.481-66.655 8.799-66.655Q9.127-66.655 9.389-66.555Q9.650-66.456 9.826-66.274Q10.002-66.091 10.096-65.833Q10.190-65.575 10.190-65.243Q10.190-65.151 10.108-65.130L7.853-65.130L7.853-65.069Q7.853-64.481 8.136-64.098Q8.420-63.715 8.987-63.715Q9.309-63.715 9.577-63.908Q9.845-64.101 9.934-64.416Q9.941-64.457 10.016-64.471L10.108-64.471Q10.190-64.447 10.190-64.375Q10.190-64.368 10.184-64.341Q10.071-63.944 9.700-63.705Q9.329-63.466 8.905-63.466Q8.468-63.466 8.068-63.674Q7.668-63.883 7.429-64.250Q7.189-64.617 7.189-65.069M7.859-65.339L9.674-65.339Q9.674-65.616 9.577-65.868Q9.479-66.121 9.281-66.277Q9.083-66.432 8.799-66.432Q8.522-66.432 8.309-66.274Q8.095-66.115 7.977-65.860Q7.859-65.605 7.859-65.339M10.836-64.262Q10.836-64.594 11.060-64.821Q11.284-65.048 11.628-65.176Q11.971-65.305 12.344-65.357Q12.716-65.410 13.021-65.410L13.021-65.663Q13.021-65.868 12.913-66.048Q12.805-66.227 12.624-66.330Q12.443-66.432 12.234-66.432Q11.828-66.432 11.592-66.340Q11.681-66.303 11.727-66.219Q11.773-66.135 11.773-66.033Q11.773-65.937 11.727-65.858Q11.681-65.780 11.600-65.735Q11.520-65.691 11.431-65.691Q11.281-65.691 11.180-65.788Q11.079-65.886 11.079-66.033Q11.079-66.655 12.234-66.655Q12.446-66.655 12.696-66.591Q12.945-66.528 13.147-66.409Q13.349-66.289 13.475-66.104Q13.602-65.920 13.602-65.677L13.602-64.101Q13.602-63.985 13.663-63.889Q13.725-63.794 13.837-63.794Q13.947-63.794 14.012-63.888Q14.077-63.982 14.077-64.101L14.077-64.549L14.343-64.549L14.343-64.101Q14.343-63.831 14.116-63.666Q13.889-63.500 13.608-63.500Q13.400-63.500 13.263-63.654Q13.126-63.807 13.103-64.023Q12.956-63.756 12.674-63.611Q12.392-63.466 12.067-63.466Q11.790-63.466 11.506-63.541Q11.223-63.616 11.030-63.795Q10.836-63.975 10.836-64.262M11.452-64.262Q11.452-64.088 11.552-63.958Q11.653-63.828 11.809-63.758Q11.964-63.688 12.128-63.688Q12.347-63.688 12.556-63.785Q12.764-63.883 12.892-64.064Q13.021-64.245 13.021-64.471L13.021-65.199Q12.696-65.199 12.330-65.108Q11.964-65.017 11.708-64.805Q11.452-64.594 11.452-64.262M14.760-65.045Q14.760-65.383 14.900-65.674Q15.041-65.964 15.285-66.178Q15.529-66.391 15.833-66.506Q16.138-66.620 16.462-66.620Q16.732-66.620 16.996-66.521Q17.259-66.422 17.450-66.244L17.450-67.642Q17.450-67.912 17.343-67.974Q17.235-68.035 16.924-68.035L16.924-68.316L18-68.391L18-64.207Q18-64.019 18.055-63.936Q18.110-63.852 18.211-63.833Q18.312-63.814 18.527-63.814L18.527-63.534L17.419-63.466L17.419-63.883Q17.002-63.466 16.377-63.466Q15.946-63.466 15.574-63.678Q15.201-63.889 14.981-64.250Q14.760-64.611 14.760-65.045M16.435-63.688Q16.644-63.688 16.830-63.760Q17.016-63.831 17.170-63.968Q17.324-64.105 17.419-64.283L17.419-65.892Q17.334-66.039 17.189-66.159Q17.043-66.279 16.874-66.338Q16.705-66.398 16.524-66.398Q15.963-66.398 15.695-66.009Q15.427-65.619 15.427-65.038Q15.427-64.467 15.661-64.077Q15.895-63.688 16.435-63.688",[1553],[1536,2819,2820],{"transform":2813},[1549,2821],{"d":2822,"fill":2761,"stroke":2761,"className":2823,"style":2473},"M21.843-65.069Q21.843-65.390 21.968-65.679Q22.093-65.968 22.319-66.191Q22.544-66.415 22.840-66.535Q23.135-66.655 23.453-66.655Q23.781-66.655 24.043-66.555Q24.304-66.456 24.480-66.274Q24.656-66.091 24.750-65.833Q24.844-65.575 24.844-65.243Q24.844-65.151 24.762-65.130L22.507-65.130L22.507-65.069Q22.507-64.481 22.790-64.098Q23.074-63.715 23.641-63.715Q23.963-63.715 24.231-63.908Q24.499-64.101 24.588-64.416Q24.595-64.457 24.670-64.471L24.762-64.471Q24.844-64.447 24.844-64.375Q24.844-64.368 24.838-64.341Q24.725-63.944 24.354-63.705Q23.983-63.466 23.559-63.466Q23.122-63.466 22.722-63.674Q22.322-63.883 22.083-64.250Q21.843-64.617 21.843-65.069M22.513-65.339L24.328-65.339Q24.328-65.616 24.231-65.868Q24.133-66.121 23.935-66.277Q23.737-66.432 23.453-66.432Q23.176-66.432 22.963-66.274Q22.749-66.115 22.631-65.860Q22.513-65.605 22.513-65.339M27.114-63.534L25.480-63.534L25.480-63.814Q25.709-63.814 25.858-63.848Q26.007-63.883 26.007-64.023L26.007-65.872Q26.007-66.142 25.899-66.203Q25.791-66.265 25.480-66.265L25.480-66.545L26.540-66.620L26.540-65.971Q26.711-66.279 27.015-66.450Q27.319-66.620 27.664-66.620Q28.170-66.620 28.454-66.397Q28.737-66.173 28.737-65.677L28.737-64.023Q28.737-63.886 28.886-63.850Q29.035-63.814 29.260-63.814L29.260-63.534L27.630-63.534L27.630-63.814Q27.859-63.814 28.008-63.848Q28.156-63.883 28.156-64.023L28.156-65.663Q28.156-65.998 28.037-66.198Q27.917-66.398 27.603-66.398Q27.333-66.398 27.099-66.262Q26.864-66.125 26.726-65.891Q26.588-65.657 26.588-65.383L26.588-64.023Q26.588-63.886 26.738-63.850Q26.888-63.814 27.114-63.814L27.114-63.534M29.848-65.045Q29.848-65.383 29.988-65.674Q30.129-65.964 30.373-66.178Q30.617-66.391 30.922-66.506Q31.226-66.620 31.550-66.620Q31.820-66.620 32.084-66.521Q32.347-66.422 32.538-66.244L32.538-67.642Q32.538-67.912 32.431-67.974Q32.323-68.035 32.012-68.035L32.012-68.316L33.089-68.391L33.089-64.207Q33.089-64.019 33.143-63.936Q33.198-63.852 33.299-63.833Q33.400-63.814 33.615-63.814L33.615-63.534L32.508-63.466L32.508-63.883Q32.091-63.466 31.465-63.466Q31.034-63.466 30.662-63.678Q30.289-63.889 30.069-64.250Q29.848-64.611 29.848-65.045M31.523-63.688Q31.732-63.688 31.918-63.760Q32.104-63.831 32.258-63.968Q32.412-64.105 32.508-64.283L32.508-65.892Q32.422-66.039 32.277-66.159Q32.132-66.279 31.962-66.338Q31.793-66.398 31.612-66.398Q31.051-66.398 30.783-66.009Q30.515-65.619 30.515-65.038Q30.515-64.467 30.749-64.077Q30.983-63.688 31.523-63.688",[1553],[1536,2825,2827],{"transform":2826},"translate(29.568 167.107)",[1549,2828],{"d":2829,"fill":1712,"stroke":1712,"className":2830,"style":2473},"M3.341-64.375L3.341-66.272L2.702-66.272L2.702-66.494Q3.020-66.494 3.237-66.704Q3.454-66.914 3.554-67.224Q3.655-67.533 3.655-67.841L3.922-67.841L3.922-66.552L4.999-66.552L4.999-66.272L3.922-66.272L3.922-64.388Q3.922-64.112 4.026-63.913Q4.130-63.715 4.390-63.715Q4.547-63.715 4.653-63.819Q4.759-63.924 4.809-64.077Q4.858-64.231 4.858-64.388L4.858-64.802L5.125-64.802L5.125-64.375Q5.125-64.149 5.026-63.939Q4.927-63.729 4.742-63.597Q4.558-63.466 4.329-63.466Q3.891-63.466 3.616-63.703Q3.341-63.941 3.341-64.375M5.894-65.069Q5.894-65.390 6.019-65.679Q6.144-65.968 6.369-66.191Q6.595-66.415 6.890-66.535Q7.186-66.655 7.504-66.655Q7.832-66.655 8.094-66.555Q8.355-66.456 8.531-66.274Q8.707-66.091 8.801-65.833Q8.895-65.575 8.895-65.243Q8.895-65.151 8.813-65.130L6.557-65.130L6.557-65.069Q6.557-64.481 6.841-64.098Q7.125-63.715 7.692-63.715Q8.013-63.715 8.281-63.908Q8.550-64.101 8.639-64.416Q8.646-64.457 8.721-64.471L8.813-64.471Q8.895-64.447 8.895-64.375Q8.895-64.368 8.888-64.341Q8.775-63.944 8.405-63.705Q8.034-63.466 7.610-63.466Q7.172-63.466 6.772-63.674Q6.373-63.883 6.133-64.250Q5.894-64.617 5.894-65.069M6.564-65.339L8.379-65.339Q8.379-65.616 8.281-65.868Q8.184-66.121 7.986-66.277Q7.788-66.432 7.504-66.432Q7.227-66.432 7.013-66.274Q6.800-66.115 6.682-65.860Q6.564-65.605 6.564-65.339M11.165-63.534L9.531-63.534L9.531-63.814Q9.760-63.814 9.908-63.848Q10.057-63.883 10.057-64.023L10.057-65.872Q10.057-66.142 9.949-66.203Q9.842-66.265 9.531-66.265L9.531-66.545L10.590-66.620L10.590-65.971Q10.761-66.279 11.065-66.450Q11.370-66.620 11.715-66.620Q12.221-66.620 12.504-66.397Q12.788-66.173 12.788-65.677L12.788-64.023Q12.788-63.886 12.937-63.850Q13.085-63.814 13.311-63.814L13.311-63.534L11.681-63.534L11.681-63.814Q11.910-63.814 12.058-63.848Q12.207-63.883 12.207-64.023L12.207-65.663Q12.207-65.998 12.087-66.198Q11.968-66.398 11.653-66.398Q11.383-66.398 11.149-66.262Q10.915-66.125 10.777-65.891Q10.638-65.657 10.638-65.383L10.638-64.023Q10.638-63.886 10.789-63.850Q10.939-63.814 11.165-63.814",[1553],[1536,2832,2833],{"fill":2761,"stroke":2761},[1536,2834,2835,2842,2848,2854,2860],{"fill":2761,"stroke":1542,"fontSize":1544},[1536,2836,2838],{"transform":2837},"translate(50.668 56.202)",[1549,2839],{"d":2840,"fill":2761,"stroke":2761,"className":2841,"style":1554},"M12.661-73.593Q12.661-73.815 12.827-73.981Q12.993-74.147 13.224-74.147Q13.372-74.147 13.499-74.069Q13.626-73.991 13.700-73.866Q13.775-73.741 13.775-73.593Q13.775-73.366 13.609-73.200Q13.443-73.034 13.224-73.034Q12.997-73.034 12.829-73.202Q12.661-73.370 12.661-73.593",[1553],[1536,2843,2844],{"transform":2837},[1549,2845],{"d":2846,"fill":2761,"stroke":2761,"className":2847,"style":1554},"M19.986-73.995L19.986-76.186L19.283-76.186L19.283-76.440Q19.639-76.440 19.881-76.673Q20.123-76.905 20.234-77.253Q20.346-77.600 20.346-77.956L20.627-77.956L20.627-76.483L21.803-76.483L21.803-76.186L20.627-76.186L20.627-74.011Q20.627-73.690 20.746-73.462Q20.865-73.233 21.146-73.233Q21.326-73.233 21.443-73.356Q21.561-73.479 21.613-73.659Q21.666-73.839 21.666-74.011L21.666-74.483L21.947-74.483L21.947-73.995Q21.947-73.741 21.842-73.501Q21.736-73.261 21.539-73.108Q21.342-72.956 21.084-72.956Q20.768-72.956 20.516-73.079Q20.264-73.202 20.125-73.436Q19.986-73.671 19.986-73.995M24.674-73.034L22.693-73.034L22.693-73.331Q22.963-73.331 23.131-73.376Q23.299-73.421 23.299-73.593L23.299-75.729Q23.299-75.944 23.236-76.040Q23.174-76.136 23.057-76.157Q22.939-76.179 22.693-76.179L22.693-76.475L23.861-76.561L23.861-75.776Q23.939-75.987 24.092-76.173Q24.244-76.358 24.443-76.460Q24.643-76.561 24.869-76.561Q25.115-76.561 25.307-76.417Q25.498-76.272 25.498-76.042Q25.498-75.886 25.393-75.776Q25.287-75.667 25.131-75.667Q24.975-75.667 24.865-75.776Q24.756-75.886 24.756-76.042Q24.756-76.202 24.861-76.307Q24.537-76.307 24.322-76.079Q24.107-75.850 24.012-75.511Q23.916-75.171 23.916-74.866L23.916-73.593Q23.916-73.425 24.143-73.378Q24.369-73.331 24.674-73.331L24.674-73.034M27.838-73.034L26.061-73.034L26.061-73.331Q26.334-73.331 26.502-73.378Q26.670-73.425 26.670-73.593L26.670-75.729Q26.670-75.944 26.613-76.040Q26.557-76.136 26.443-76.157Q26.330-76.179 26.084-76.179L26.084-76.475L27.283-76.561L27.283-73.593Q27.283-73.425 27.430-73.378Q27.576-73.331 27.838-73.331L27.838-73.034M26.396-77.956Q26.396-78.147 26.531-78.278Q26.666-78.409 26.861-78.409Q26.982-78.409 27.086-78.347Q27.189-78.284 27.252-78.180Q27.314-78.077 27.314-77.956Q27.314-77.761 27.184-77.626Q27.053-77.491 26.861-77.491Q26.662-77.491 26.529-77.624Q26.396-77.757 26.396-77.956M28.338-74.788Q28.338-75.268 28.570-75.684Q28.803-76.100 29.213-76.350Q29.623-76.600 30.100-76.600Q30.830-76.600 31.228-76.159Q31.627-75.718 31.627-74.987Q31.627-74.882 31.533-74.858L29.084-74.858L29.084-74.788Q29.084-74.378 29.205-74.022Q29.326-73.667 29.598-73.450Q29.869-73.233 30.299-73.233Q30.662-73.233 30.959-73.462Q31.256-73.690 31.357-74.042Q31.365-74.089 31.451-74.104L31.533-74.104Q31.627-74.077 31.627-73.995Q31.627-73.987 31.619-73.956Q31.557-73.729 31.418-73.546Q31.279-73.362 31.088-73.229Q30.896-73.097 30.678-73.026Q30.459-72.956 30.221-72.956Q29.850-72.956 29.512-73.093Q29.174-73.229 28.906-73.481Q28.639-73.733 28.488-74.073Q28.338-74.413 28.338-74.788M29.092-75.097L31.053-75.097Q31.053-75.401 30.951-75.692Q30.850-75.983 30.633-76.165Q30.416-76.347 30.100-76.347Q29.799-76.347 29.568-76.159Q29.338-75.972 29.215-75.680Q29.092-75.389 29.092-75.097M32.158-73.042L32.158-74.264Q32.158-74.292 32.189-74.323Q32.221-74.354 32.244-74.354L32.350-74.354Q32.420-74.354 32.436-74.292Q32.498-73.972 32.637-73.731Q32.775-73.491 33.008-73.350Q33.240-73.210 33.549-73.210Q33.787-73.210 33.996-73.270Q34.205-73.331 34.342-73.479Q34.478-73.628 34.478-73.874Q34.478-74.128 34.268-74.294Q34.057-74.460 33.787-74.514L33.166-74.628Q32.760-74.706 32.459-74.962Q32.158-75.218 32.158-75.593Q32.158-75.960 32.359-76.182Q32.561-76.405 32.885-76.503Q33.209-76.600 33.549-76.600Q34.014-76.600 34.311-76.393L34.533-76.577Q34.557-76.600 34.588-76.600L34.639-76.600Q34.670-76.600 34.697-76.573Q34.725-76.546 34.725-76.514L34.725-75.530Q34.725-75.499 34.699-75.470Q34.674-75.440 34.639-75.440L34.533-75.440Q34.498-75.440 34.471-75.468Q34.443-75.495 34.443-75.530Q34.443-75.929 34.191-76.149Q33.939-76.370 33.541-76.370Q33.186-76.370 32.902-76.247Q32.619-76.124 32.619-75.819Q32.619-75.600 32.820-75.468Q33.021-75.335 33.268-75.292L33.893-75.179Q34.322-75.089 34.631-74.792Q34.939-74.495 34.939-74.081Q34.939-73.511 34.541-73.233Q34.143-72.956 33.549-72.956Q32.998-72.956 32.646-73.292L32.350-72.979Q32.326-72.956 32.291-72.956L32.244-72.956Q32.221-72.956 32.189-72.987Q32.158-73.018 32.158-73.042",[1553],[1536,2849,2850],{"transform":2837},[1549,2851],{"d":2852,"fill":2761,"stroke":2761,"className":2853,"style":1554},"M2.836-64.366Q2.836-64.850 3.238-65.145Q3.641-65.440 4.191-65.559Q4.742-65.679 5.234-65.679L5.234-65.968Q5.234-66.194 5.119-66.401Q5.004-66.608 4.807-66.727Q4.609-66.846 4.379-66.846Q3.953-66.846 3.668-66.741Q3.738-66.714 3.785-66.659Q3.832-66.604 3.857-66.534Q3.883-66.464 3.883-66.389Q3.883-66.284 3.832-66.192Q3.781-66.100 3.689-66.050Q3.598-65.999 3.492-65.999Q3.387-65.999 3.295-66.050Q3.203-66.100 3.152-66.192Q3.102-66.284 3.102-66.389Q3.102-66.807 3.490-66.954Q3.879-67.100 4.379-67.100Q4.711-67.100 5.064-66.970Q5.418-66.839 5.646-66.585Q5.875-66.331 5.875-65.983L5.875-64.182Q5.875-64.050 5.947-63.940Q6.020-63.831 6.148-63.831Q6.273-63.831 6.342-63.936Q6.410-64.042 6.410-64.182L6.410-64.694L6.691-64.694L6.691-64.182Q6.691-63.979 6.574-63.821Q6.457-63.663 6.275-63.579Q6.094-63.495 5.891-63.495Q5.660-63.495 5.508-63.667Q5.355-63.839 5.324-64.069Q5.164-63.788 4.855-63.622Q4.547-63.456 4.195-63.456Q3.684-63.456 3.260-63.679Q2.836-63.901 2.836-64.366M3.523-64.366Q3.523-64.081 3.750-63.895Q3.977-63.710 4.270-63.710Q4.516-63.710 4.740-63.827Q4.965-63.944 5.100-64.147Q5.234-64.350 5.234-64.604L5.234-65.436Q4.969-65.436 4.684-65.382Q4.398-65.327 4.127-65.198Q3.855-65.069 3.689-64.862Q3.523-64.655 3.523-64.366M8.898-63.534L7.066-63.534L7.066-63.831Q7.340-63.831 7.508-63.878Q7.676-63.925 7.676-64.093L7.676-68.253Q7.676-68.468 7.613-68.563Q7.551-68.659 7.432-68.680Q7.313-68.702 7.066-68.702L7.066-68.999L8.289-69.085L8.289-64.093Q8.289-63.925 8.457-63.878Q8.625-63.831 8.898-63.831L8.898-63.534M11.258-63.534L9.426-63.534L9.426-63.831Q9.699-63.831 9.867-63.878Q10.035-63.925 10.035-64.093L10.035-68.253Q10.035-68.468 9.973-68.563Q9.910-68.659 9.791-68.680Q9.672-68.702 9.426-68.702L9.426-68.999L10.648-69.085L10.648-64.093Q10.648-63.925 10.816-63.878Q10.984-63.831 11.258-63.831",[1553],[1536,2855,2856],{"transform":2837},[1549,2857],{"d":2858,"fill":2761,"stroke":2761,"className":2859,"style":1554},"M14.587-65.261Q14.587-65.757 14.837-66.182Q15.087-66.608 15.507-66.854Q15.927-67.100 16.427-67.100Q16.966-67.100 17.357-66.975Q17.747-66.850 17.747-66.436Q17.747-66.331 17.697-66.239Q17.646-66.147 17.554-66.096Q17.462-66.046 17.353-66.046Q17.247-66.046 17.156-66.096Q17.064-66.147 17.013-66.239Q16.962-66.331 16.962-66.436Q16.962-66.659 17.130-66.764Q16.908-66.823 16.435-66.823Q16.138-66.823 15.923-66.684Q15.708-66.546 15.577-66.315Q15.447-66.085 15.388-65.815Q15.329-65.546 15.329-65.261Q15.329-64.866 15.462-64.516Q15.595-64.167 15.867-63.950Q16.138-63.733 16.536-63.733Q16.911-63.733 17.187-63.950Q17.462-64.167 17.564-64.526Q17.579-64.589 17.642-64.589L17.747-64.589Q17.783-64.589 17.808-64.561Q17.833-64.534 17.833-64.495L17.833-64.471Q17.701-63.991 17.316-63.723Q16.931-63.456 16.427-63.456Q16.064-63.456 15.730-63.593Q15.396-63.729 15.136-63.979Q14.876-64.229 14.732-64.565Q14.587-64.901 14.587-65.261",[1553],[1536,2861,2862],{"transform":2837},[1549,2863],{"d":2864,"fill":2761,"stroke":2761,"className":2865,"style":1554},"M20.016-63.534L18.160-63.534L18.160-63.831Q18.434-63.831 18.602-63.878Q18.770-63.925 18.770-64.093L18.770-68.253Q18.770-68.468 18.707-68.563Q18.645-68.659 18.526-68.680Q18.407-68.702 18.160-68.702L18.160-68.999L19.383-69.085L19.383-66.382Q19.508-66.593 19.696-66.743Q19.883-66.893 20.110-66.977Q20.336-67.061 20.582-67.061Q21.750-67.061 21.750-65.983L21.750-64.093Q21.750-63.925 21.920-63.878Q22.090-63.831 22.360-63.831L22.360-63.534L20.504-63.534L20.504-63.831Q20.778-63.831 20.946-63.878Q21.114-63.925 21.114-64.093L21.114-65.968Q21.114-66.350 20.993-66.579Q20.871-66.807 20.520-66.807Q20.207-66.807 19.953-66.645Q19.700-66.483 19.553-66.214Q19.407-65.944 19.407-65.647L19.407-64.093Q19.407-63.925 19.577-63.878Q19.746-63.831 20.016-63.831L20.016-63.534M24.664-63.534L22.887-63.534L22.887-63.831Q23.160-63.831 23.328-63.878Q23.496-63.925 23.496-64.093L23.496-66.229Q23.496-66.444 23.440-66.540Q23.383-66.636 23.270-66.657Q23.157-66.679 22.910-66.679L22.910-66.975L24.110-67.061L24.110-64.093Q24.110-63.925 24.256-63.878Q24.403-63.831 24.664-63.831L24.664-63.534M23.223-68.456Q23.223-68.647 23.358-68.778Q23.493-68.909 23.688-68.909Q23.809-68.909 23.912-68.846Q24.016-68.784 24.078-68.680Q24.141-68.577 24.141-68.456Q24.141-68.261 24.010-68.126Q23.879-67.991 23.688-67.991Q23.489-67.991 23.356-68.124Q23.223-68.257 23.223-68.456M27.078-63.534L25.246-63.534L25.246-63.831Q25.520-63.831 25.688-63.878Q25.856-63.925 25.856-64.093L25.856-68.253Q25.856-68.468 25.793-68.563Q25.731-68.659 25.612-68.680Q25.493-68.702 25.246-68.702L25.246-68.999L26.469-69.085L26.469-64.093Q26.469-63.925 26.637-63.878Q26.805-63.831 27.078-63.831L27.078-63.534M29.340-63.456Q28.860-63.456 28.452-63.700Q28.043-63.944 27.805-64.358Q27.567-64.772 27.567-65.261Q27.567-65.753 27.825-66.169Q28.082-66.585 28.514-66.823Q28.946-67.061 29.438-67.061Q30.059-67.061 30.508-66.624L30.508-68.253Q30.508-68.468 30.446-68.563Q30.383-68.659 30.266-68.680Q30.149-68.702 29.903-68.702L29.903-68.999L31.125-69.085L31.125-64.276Q31.125-64.065 31.188-63.970Q31.250-63.874 31.368-63.852Q31.485-63.831 31.735-63.831L31.735-63.534L30.485-63.456L30.485-63.940Q30.020-63.456 29.340-63.456M29.407-63.710Q29.746-63.710 30.039-63.901Q30.332-64.093 30.485-64.389L30.485-66.221Q30.336-66.495 30.075-66.651Q29.813-66.807 29.500-66.807Q28.875-66.807 28.592-66.360Q28.309-65.913 28.309-65.253Q28.309-64.608 28.561-64.159Q28.813-63.710 29.407-63.710M34.250-63.534L32.270-63.534L32.270-63.831Q32.539-63.831 32.707-63.876Q32.875-63.921 32.875-64.093L32.875-66.229Q32.875-66.444 32.813-66.540Q32.750-66.636 32.633-66.657Q32.516-66.679 32.270-66.679L32.270-66.975L33.438-67.061L33.438-66.276Q33.516-66.487 33.668-66.673Q33.821-66.858 34.020-66.960Q34.219-67.061 34.446-67.061Q34.692-67.061 34.883-66.917Q35.075-66.772 35.075-66.542Q35.075-66.386 34.969-66.276Q34.864-66.167 34.707-66.167Q34.551-66.167 34.442-66.276Q34.332-66.386 34.332-66.542Q34.332-66.702 34.438-66.807Q34.114-66.807 33.899-66.579Q33.684-66.350 33.588-66.011Q33.493-65.671 33.493-65.366L33.493-64.093Q33.493-63.925 33.719-63.878Q33.946-63.831 34.250-63.831L34.250-63.534M35.555-65.288Q35.555-65.768 35.787-66.184Q36.020-66.600 36.430-66.850Q36.840-67.100 37.317-67.100Q38.047-67.100 38.446-66.659Q38.844-66.218 38.844-65.487Q38.844-65.382 38.750-65.358L36.301-65.358L36.301-65.288Q36.301-64.878 36.422-64.522Q36.543-64.167 36.815-63.950Q37.086-63.733 37.516-63.733Q37.879-63.733 38.176-63.962Q38.473-64.190 38.575-64.542Q38.582-64.589 38.668-64.604L38.750-64.604Q38.844-64.577 38.844-64.495Q38.844-64.487 38.836-64.456Q38.774-64.229 38.635-64.046Q38.496-63.862 38.305-63.729Q38.114-63.596 37.895-63.526Q37.676-63.456 37.438-63.456Q37.067-63.456 36.729-63.593Q36.391-63.729 36.123-63.981Q35.856-64.233 35.705-64.573Q35.555-64.913 35.555-65.288M36.309-65.596L38.270-65.596Q38.270-65.901 38.168-66.192Q38.067-66.483 37.850-66.665Q37.633-66.846 37.317-66.846Q37.016-66.846 36.785-66.659Q36.555-66.471 36.432-66.180Q36.309-65.889 36.309-65.596M41.262-63.534L39.407-63.534L39.407-63.831Q39.680-63.831 39.848-63.878Q40.016-63.925 40.016-64.093L40.016-66.229Q40.016-66.444 39.953-66.540Q39.891-66.636 39.772-66.657Q39.653-66.679 39.407-66.679L39.407-66.975L40.598-67.061L40.598-66.327Q40.711-66.542 40.905-66.710Q41.098-66.878 41.336-66.970Q41.575-67.061 41.828-67.061Q42.996-67.061 42.996-65.983L42.996-64.093Q42.996-63.925 43.166-63.878Q43.336-63.831 43.606-63.831L43.606-63.534L41.750-63.534L41.750-63.831Q42.024-63.831 42.192-63.878Q42.360-63.925 42.360-64.093L42.360-65.968Q42.360-66.350 42.239-66.579Q42.118-66.807 41.766-66.807Q41.453-66.807 41.200-66.645Q40.946-66.483 40.799-66.214Q40.653-65.944 40.653-65.647L40.653-64.093Q40.653-63.925 40.823-63.878Q40.993-63.831 41.262-63.831",[1553],[1767,2867,2869],{"className":2868},[1770],"Wildcard search for \\texttt{t.n}: the concrete \\texttt{t} follows one edge, the \\texttt{.} branches into every child (red, both \\texttt{o} and \\texttt{e}), and only the \\texttt{e} branch survives to spell \\texttt{ten}. A \\texttt{.} fans the search; concrete characters keep it on one path",[381,2871,2872,1477,2875,2878,2879,2882],{},[578,2873,2874],{},"Word search on a board.",[441,2876,2877],{},"Word Search II"," hunts for many dictionary words in a\ngrid simultaneously. Building a trie of all target words lets one DFS over the\nboard carry a trie pointer alongside the grid position: the instant the current\nboard path spells a string that is ",[441,2880,2881],{},"not a prefix of any target",", the missing trie\nedge prunes the entire branch. One traversal finds all words, and the shared\nprefixes mean overlapping targets share work.",[2884,2885,2887],"h3",{"id":2886},"the-binary-trie-maximum-xor-pair","The binary trie: maximum XOR pair",[381,2889,2890,2891,2940,2941,2944,2945,3133,3134,3189,3190,3233,3234,3249],{},"A beautiful non-string use treats a fixed-width integer as a string of bits over\n",[385,2892,2894],{"className":2893},[388],[385,2895,2897,2915],{"className":2896,"ariaHidden":393},[392],[385,2898,2900,2903,2906,2909,2912],{"className":2899},[397],[385,2901],{"className":2902,"style":509},[401],[385,2904,677],{"className":2905},[406],[385,2907],{"className":2908,"style":910},[428],[385,2910,915],{"className":2911},[914],[385,2913],{"className":2914,"style":910},[428],[385,2916,2918,2921,2924,2928,2931,2934,2937],{"className":2917},[397],[385,2919],{"className":2920,"style":402},[401],[385,2922,797],{"className":2923},[413],[385,2925,2927],{"className":2926},[406],"0",[385,2929,811],{"className":2930},[810],[385,2932],{"className":2933,"style":429},[428],[385,2935,466],{"className":2936},[406],[385,2938,838],{"className":2939},[437],". ",[441,2942,2943],{},"Maximum XOR of Two Numbers"," asks for\n",[385,2946,2948],{"className":2947},[388],[385,2949,2951,3084],{"className":2950,"ariaHidden":393},[392],[385,2952,2954,2958,3029,3032,3074,3077,3081],{"className":2953},[397],[385,2955],{"className":2956,"style":2957},[401],"height:1.0361em;vertical-align:-0.2861em;",[385,2959,2961,2968],{"className":2960},[418],[385,2962,2964],{"className":2963},[418],[385,2965,2967],{"className":2966},[406,422],"max",[385,2969,2972],{"className":2970},[2971],"msupsub",[385,2973,2977,3020],{"className":2974},[2975,2976],"vlist-t","vlist-t2",[385,2978,2981,3015],{"className":2979},[2980],"vlist-r",[385,2982,2986],{"className":2983,"style":2985},[2984],"vlist","height:0.3117em;",[385,2987,2989,2994],{"style":2988},"top:-2.55em;margin-right:0.05em;",[385,2990],{"className":2991,"style":2993},[2992],"pstrut","height:2.7em;",[385,2995,3001],{"className":2996},[2997,2998,2999,3000],"sizing","reset-size6","size3","mtight",[385,3002,3004,3007,3010],{"className":3003},[406,3000],[385,3005,748],{"className":3006},[406,407,3000],[385,3008,811],{"className":3009},[810,3000],[385,3011,3014],{"className":3012,"style":3013},[406,407,3000],"margin-right:0.0572em;","j",[385,3016,3019],{"className":3017},[3018],"vlist-s","​",[385,3021,3023],{"className":3022},[2980],[385,3024,3027],{"className":3025,"style":3026},[2984],"height:0.2861em;",[385,3028],{},[385,3030,414],{"className":3031},[413],[385,3033,3035,3038],{"className":3034},[406],[385,3036,556],{"className":3037},[406,407],[385,3039,3041],{"className":3040},[2971],[385,3042,3044,3065],{"className":3043},[2975,2976],[385,3045,3047,3062],{"className":3046},[2980],[385,3048,3050],{"className":3049,"style":2985},[2984],[385,3051,3053,3056],{"style":3052},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[385,3054],{"className":3055,"style":2993},[2992],[385,3057,3059],{"className":3058},[2997,2998,2999,3000],[385,3060,748],{"className":3061},[406,407,3000],[385,3063,3019],{"className":3064},[3018],[385,3066,3068],{"className":3067},[2980],[385,3069,3072],{"className":3070,"style":3071},[2984],"height:0.15em;",[385,3073],{},[385,3075],{"className":3076,"style":2106},[428],[385,3078,3080],{"className":3079},[2110],"⊕",[385,3082],{"className":3083,"style":2106},[428],[385,3085,3087,3090,3130],{"className":3086},[397],[385,3088],{"className":3089,"style":2957},[401],[385,3091,3093,3096],{"className":3092},[406],[385,3094,556],{"className":3095},[406,407],[385,3097,3099],{"className":3098},[2971],[385,3100,3102,3122],{"className":3101},[2975,2976],[385,3103,3105,3119],{"className":3104},[2980],[385,3106,3108],{"className":3107,"style":2985},[2984],[385,3109,3110,3113],{"style":3052},[385,3111],{"className":3112,"style":2993},[2992],[385,3114,3116],{"className":3115},[2997,2998,2999,3000],[385,3117,3014],{"className":3118,"style":3013},[406,407,3000],[385,3120,3019],{"className":3121},[3018],[385,3123,3125],{"className":3124},[2980],[385,3126,3128],{"className":3127,"style":3026},[2984],[385,3129],{},[385,3131,438],{"className":3132},[437],". Brute force is ",[385,3135,3137],{"className":3136},[388],[385,3138,3140],{"className":3139,"ariaHidden":393},[392],[385,3141,3143,3147,3151,3154,3186],{"className":3142},[397],[385,3144],{"className":3145,"style":3146},[401],"height:1.0641em;vertical-align:-0.25em;",[385,3148,3150],{"className":3149},[406],"Θ",[385,3152,414],{"className":3153},[413],[385,3155,3157,3160],{"className":3156},[406],[385,3158,433],{"className":3159},[406,407],[385,3161,3163],{"className":3162},[2971],[385,3164,3166],{"className":3165},[2975],[385,3167,3169],{"className":3168},[2980],[385,3170,3173],{"className":3171,"style":3172},[2984],"height:0.8141em;",[385,3174,3176,3179],{"style":3175},"top:-3.063em;margin-right:0.05em;",[385,3177],{"className":3178,"style":2993},[2992],[385,3180,3182],{"className":3181},[2997,2998,2999,3000],[385,3183,3185],{"className":3184},[406,3000],"2",[385,3187,438],{"className":3188},[437],"; a binary trie solves\nit in ",[385,3191,3193],{"className":3192},[388],[385,3194,3196,3220],{"className":3195,"ariaHidden":393},[392],[385,3197,3199,3202,3205,3208,3211,3214,3217],{"className":3198},[397],[385,3200],{"className":3201,"style":402},[401],[385,3203,409],{"className":3204,"style":408},[406,407],[385,3206,414],{"className":3207},[413],[385,3209,433],{"className":3210},[406,407],[385,3212],{"className":3213,"style":2106},[428],[385,3215,2111],{"className":3216},[2110],[385,3218],{"className":3219,"style":2106},[428],[385,3221,3223,3226,3230],{"className":3222},[397],[385,3224],{"className":3225,"style":402},[401],[385,3227,3229],{"className":3228},[406,407],"b",[385,3231,438],{"className":3232},[437]," for ",[385,3235,3237],{"className":3236},[388],[385,3238,3240],{"className":3239,"ariaHidden":393},[392],[385,3241,3243,3246],{"className":3242},[397],[385,3244],{"className":3245,"style":856},[401],[385,3247,3229],{"className":3248},[406,407],"-bit numbers.",[381,3251,3252,3253,3256,3257,3272,3273,3288,3289,3292,3293,3308,3309,3325,3326,932],{},"Insert every number bit-by-bit from the ",[578,3254,3255],{},"high bit down",", so each root-to-leaf\npath of length ",[385,3258,3260],{"className":3259},[388],[385,3261,3263],{"className":3262,"ariaHidden":393},[392],[385,3264,3266,3269],{"className":3265},[397],[385,3267],{"className":3268,"style":856},[401],[385,3270,3229],{"className":3271},[406,407]," is one number. To maximize the XOR of a query ",[385,3274,3276],{"className":3275},[388],[385,3277,3279],{"className":3278,"ariaHidden":393},[392],[385,3280,3282,3285],{"className":3281},[397],[385,3283],{"className":3284,"style":492},[401],[385,3286,556],{"className":3287},[406,407]," against the\nstored set, walk down from the root and at each bit ",[441,3290,3291],{},"greedily steer toward the\nopposite bit"," of ",[385,3294,3296],{"className":3295},[388],[385,3297,3299],{"className":3298,"ariaHidden":393},[392],[385,3300,3302,3305],{"className":3301},[397],[385,3303],{"className":3304,"style":492},[401],[385,3306,556],{"className":3307},[406,407],": a differing bit contributes a ",[385,3310,3312],{"className":3311},[388],[385,3313,3315],{"className":3314,"ariaHidden":393},[392],[385,3316,3318,3322],{"className":3317},[397],[385,3319],{"className":3320,"style":3321},[401],"height:0.6444em;",[385,3323,466],{"className":3324},[406]," at that (high) position,\nworth more than every lower bit combined. If the opposite child exists, take it;\notherwise follow the only child available. The path traced spells the stored\nnumber that maximizes ",[385,3327,3329],{"className":3328},[388],[385,3330,3332,3351],{"className":3331,"ariaHidden":393},[392],[385,3333,3335,3339,3342,3345,3348],{"className":3334},[397],[385,3336],{"className":3337,"style":3338},[401],"height:0.6667em;vertical-align:-0.0833em;",[385,3340,556],{"className":3341},[406,407],[385,3343],{"className":3344,"style":2106},[428],[385,3346,3080],{"className":3347},[2110],[385,3349],{"className":3350,"style":2106},[428],[385,3352,3354,3357,3360,3363],{"className":3353},[397],[385,3355],{"className":3356,"style":402},[401],[385,3358,414],{"className":3359},[413],[385,3361,2111],{"className":3362},[406],[385,3364,438],{"className":3365},[437],[1523,3367,3369,3506],{"className":3368},[1526,1527],[1529,3370,3373],{"xmlns":1531,"width":3371,"height":2724,"viewBox":3372},"246.054","-75 -75 184.540 188.225",[1536,3374,3375,3378,3383,3388,3393,3408,3411,3414,3421,3435,3438,3441,3447,3450,3453,3459,3473,3476,3479,3485,3492,3499],{"stroke":1538,"style":1539},[1549,3376],{"fill":1542,"d":3377},"M39.656-63.534a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0ZM-18.223-19.882a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0ZM97.534-19.882a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0ZM-18.223 28.888a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0ZM97.534 28.888a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.535 0",[1536,3379,3380],{"style":1881},[1549,3381],{"fill":1542,"d":3382},"M-47.932 72.823a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.536 0",[1536,3384,3385],{"fill":1880,"stroke":1712,"style":1881},[1549,3386],{"d":3387},"M11.486 72.823a8.536 8.536 0 1 0-17.072 0 8.536 8.536 0 0 0 17.072 0Zm-8.536 0",[1536,3389,3390],{"style":1881},[1549,3391],{"fill":1542,"d":3392},"M97.534 78.057a8.536 8.536 0 1 0-17.071 0 8.536 8.536 0 0 0 17.071 0Zm-8.535 0",[1536,3394,3395,3398,3401],{"stroke":1712,"style":1586},[1549,3396],{"fill":1542,"d":3397},"m24.145-58.274-41.853 31.566",[1549,3399],{"fill":1712,"stroke":1542,"d":3400},"m-19.784-25.142 4.573-.844-2.497-.722-.007-2.6",[1536,3402,3404],{"transform":3403},"translate(-40 24.404)",[1549,3405],{"d":3406,"fill":1538,"stroke":1538,"className":3407,"style":1554},"M33.241-63.366Q32.538-63.366 32.138-63.766Q31.737-64.167 31.593-64.776Q31.448-65.386 31.448-66.085Q31.448-66.608 31.518-67.071Q31.589-67.534 31.782-67.946Q31.975-68.358 32.333-68.606Q32.690-68.854 33.241-68.854Q33.792-68.854 34.149-68.606Q34.507-68.358 34.698-67.948Q34.890-67.538 34.960-67.069Q35.030-66.600 35.030-66.085Q35.030-65.386 34.888-64.778Q34.745-64.171 34.345-63.768Q33.944-63.366 33.241-63.366M33.241-63.624Q33.714-63.624 33.946-64.059Q34.179-64.495 34.233-65.034Q34.288-65.573 34.288-66.214Q34.288-67.210 34.104-67.903Q33.921-68.596 33.241-68.596Q32.874-68.596 32.653-68.358Q32.433-68.120 32.337-67.763Q32.241-67.405 32.216-67.034Q32.190-66.663 32.190-66.214Q32.190-65.573 32.245-65.034Q32.300-64.495 32.532-64.059Q32.765-63.624 33.241-63.624",[1553],[1549,3409],{"fill":1542,"d":3410},"m38.094-58.274 42.333 31.928",[1549,3412],{"stroke":1542,"d":3413},"m82.024-25.142-1.591-3.204-.006 2-1.921.555",[1536,3415,3417],{"transform":3416},"translate(35.55 24.404)",[1549,3418],{"d":3419,"fill":1538,"stroke":1538,"className":3420,"style":1554},"M34.714-63.534L31.921-63.534L31.921-63.831Q32.983-63.831 32.983-64.093L32.983-68.261Q32.554-68.046 31.874-68.046L31.874-68.343Q32.893-68.343 33.409-68.854L33.554-68.854Q33.628-68.835 33.647-68.757L33.647-64.093Q33.647-63.831 34.714-63.831",[1553],[1536,3422,3423,3426,3429],{"stroke":1712,"style":1586},[1549,3424],{"fill":1542,"d":3425},"M-26.759-11.146v28.698",[1549,3427],{"fill":1712,"stroke":1542,"d":3428},"m-26.759 20.152 2.08-4.16-2.08 1.56-2.08-1.56",[1536,3430,3432],{"transform":3431},"translate(-68.94 70.615)",[1549,3433],{"d":3419,"fill":1538,"stroke":1538,"className":3434,"style":1554},[1553],[1549,3436],{"fill":1542,"d":3437},"M88.999-11.146v29.298",[1549,3439],{"stroke":1542,"d":3440},"m88.999 20.152 1.6-3.2-1.6 1.2-1.6-1.2",[1536,3442,3444],{"transform":3443},"translate(64.49 70.615)",[1549,3445],{"d":3419,"fill":1538,"stroke":1538,"className":3446,"style":1554},[1553],[1549,3448],{"fill":1542,"d":3449},"M-31.652 36.124-50.23 63.598",[1549,3451],{"stroke":1542,"d":3452},"m-51.35 65.255 3.117-1.754-1.997.097-.653-1.89",[1536,3454,3456],{"transform":3455},"translate(-83.482 116.802)",[1549,3457],{"d":3406,"fill":1538,"stroke":1538,"className":3458,"style":1554},[1553],[1536,3460,3461,3464,3467],{"stroke":1712,"style":1586},[1549,3462],{"fill":1542,"d":3463},"m-21.866 36.124 18.242 26.977",[1549,3465],{"fill":1712,"stroke":1542,"d":3466},"m-2.167 65.255-.607-4.61-.85 2.456-2.596-.127",[1536,3468,3470],{"transform":3469},"translate(-36.326 116.802)",[1549,3471],{"d":3419,"fill":1538,"stroke":1538,"className":3472,"style":1554},[1553],[1549,3474],{"fill":1542,"d":3475},"M88.999 37.624v29.298",[1549,3477],{"stroke":1542,"d":3478},"m88.999 68.922 1.6-3.2-1.6 1.2-1.6-1.2",[1536,3480,3482],{"transform":3481},"translate(64.49 119.385)",[1549,3483],{"d":3406,"fill":1538,"stroke":1538,"className":3484,"style":1554},[1553],[1536,3486,3488],{"transform":3487},"translate(-93.567 161.975)",[1549,3489],{"d":3490,"fill":1538,"stroke":1538,"className":3491,"style":2473},"M33.109-63.394Q32.474-63.394 32.110-63.739Q31.745-64.084 31.610-64.609Q31.475-65.134 31.475-65.759Q31.475-66.784 31.831-67.483Q32.186-68.182 33.109-68.182Q34.036-68.182 34.388-67.483Q34.740-66.784 34.740-65.759Q34.740-65.134 34.605-64.609Q34.470-64.084 34.107-63.739Q33.745-63.394 33.109-63.394M33.109-63.619Q33.547-63.619 33.760-63.994Q33.974-64.368 34.024-64.835Q34.073-65.301 34.073-65.879Q34.073-66.432 34.024-66.860Q33.974-67.287 33.762-67.622Q33.550-67.957 33.109-67.957Q32.767-67.957 32.564-67.750Q32.361-67.543 32.274-67.231Q32.186-66.918 32.164-66.602Q32.142-66.285 32.142-65.879Q32.142-65.462 32.164-65.120Q32.186-64.778 32.275-64.430Q32.364-64.081 32.569-63.850Q32.774-63.619 33.109-63.619M38.428-63.534L35.898-63.534L35.898-63.814Q36.866-63.814 36.866-64.023L36.866-67.642Q36.473-67.454 35.850-67.454L35.850-67.735Q36.267-67.735 36.631-67.836Q36.995-67.936 37.252-68.182L37.378-68.182Q37.443-68.165 37.460-68.097L37.460-64.023Q37.460-63.814 38.428-63.814L38.428-63.534M41.073-63.394Q40.437-63.394 40.073-63.739Q39.709-64.084 39.574-64.609Q39.439-65.134 39.439-65.759Q39.439-66.784 39.795-67.483Q40.150-68.182 41.073-68.182Q41.999-68.182 42.351-67.483Q42.703-66.784 42.703-65.759Q42.703-65.134 42.568-64.609Q42.433-64.084 42.071-63.739Q41.709-63.394 41.073-63.394M41.073-63.619Q41.511-63.619 41.724-63.994Q41.938-64.368 41.987-64.835Q42.037-65.301 42.037-65.879Q42.037-66.432 41.987-66.860Q41.938-67.287 41.726-67.622Q41.514-67.957 41.073-67.957Q40.731-67.957 40.528-67.750Q40.325-67.543 40.237-67.231Q40.150-66.918 40.128-66.602Q40.106-66.285 40.106-65.879Q40.106-65.462 40.128-65.120Q40.150-64.778 40.239-64.430Q40.328-64.081 40.533-63.850Q40.738-63.619 41.073-63.619",[1553],[1536,3493,3495],{"transform":3494},"translate(-34.15 161.975)",[1549,3496],{"d":3497,"fill":1712,"stroke":1712,"className":3498,"style":2473},"M33.109-63.394Q32.474-63.394 32.110-63.739Q31.745-64.084 31.610-64.609Q31.475-65.134 31.475-65.759Q31.475-66.784 31.831-67.483Q32.186-68.182 33.109-68.182Q34.036-68.182 34.388-67.483Q34.740-66.784 34.740-65.759Q34.740-65.134 34.605-64.609Q34.470-64.084 34.107-63.739Q33.745-63.394 33.109-63.394M33.109-63.619Q33.547-63.619 33.760-63.994Q33.974-64.368 34.024-64.835Q34.073-65.301 34.073-65.879Q34.073-66.432 34.024-66.860Q33.974-67.287 33.762-67.622Q33.550-67.957 33.109-67.957Q32.767-67.957 32.564-67.750Q32.361-67.543 32.274-67.231Q32.186-66.918 32.164-66.602Q32.142-66.285 32.142-65.879Q32.142-65.462 32.164-65.120Q32.186-64.778 32.275-64.430Q32.364-64.081 32.569-63.850Q32.774-63.619 33.109-63.619M38.428-63.534L35.898-63.534L35.898-63.814Q36.866-63.814 36.866-64.023L36.866-67.642Q36.473-67.454 35.850-67.454L35.850-67.735Q36.267-67.735 36.631-67.836Q36.995-67.936 37.252-68.182L37.378-68.182Q37.443-68.165 37.460-68.097L37.460-64.023Q37.460-63.814 38.428-63.814L38.428-63.534M42.410-63.534L39.880-63.534L39.880-63.814Q40.848-63.814 40.848-64.023L40.848-67.642Q40.454-67.454 39.832-67.454L39.832-67.735Q40.249-67.735 40.613-67.836Q40.977-67.936 41.234-68.182L41.360-68.182Q41.425-68.165 41.442-68.097L41.442-64.023Q41.442-63.814 42.410-63.814",[1553],[1536,3500,3502],{"transform":3501},"translate(51.9 167.21)",[1549,3503],{"d":3504,"fill":1538,"stroke":1538,"className":3505,"style":2473},"M34.446-63.534L31.916-63.534L31.916-63.814Q32.884-63.814 32.884-64.023L32.884-67.642Q32.491-67.454 31.869-67.454L31.869-67.735Q32.286-67.735 32.650-67.836Q33.014-67.936 33.270-68.182L33.396-68.182Q33.461-68.165 33.478-68.097L33.478-64.023Q33.478-63.814 34.446-63.814L34.446-63.534M38.428-63.534L35.898-63.534L35.898-63.814Q36.866-63.814 36.866-64.023L36.866-67.642Q36.473-67.454 35.850-67.454L35.850-67.735Q36.267-67.735 36.631-67.836Q36.995-67.936 37.252-68.182L37.378-68.182Q37.443-68.165 37.460-68.097L37.460-64.023Q37.460-63.814 38.428-63.814L38.428-63.534M41.073-63.394Q40.437-63.394 40.073-63.739Q39.709-64.084 39.574-64.609Q39.439-65.134 39.439-65.759Q39.439-66.784 39.795-67.483Q40.150-68.182 41.073-68.182Q41.999-68.182 42.351-67.483Q42.703-66.784 42.703-65.759Q42.703-65.134 42.568-64.609Q42.433-64.084 42.071-63.739Q41.709-63.394 41.073-63.394M41.073-63.619Q41.511-63.619 41.724-63.994Q41.938-64.368 41.987-64.835Q42.037-65.301 42.037-65.879Q42.037-66.432 41.987-66.860Q41.938-67.287 41.726-67.622Q41.514-67.957 41.073-67.957Q40.731-67.957 40.528-67.750Q40.325-67.543 40.237-67.231Q40.150-66.918 40.128-66.602Q40.106-66.285 40.106-65.879Q40.106-65.462 40.128-65.120Q40.150-64.778 40.239-64.430Q40.328-64.081 40.533-63.850Q40.738-63.619 41.073-63.619",[1553],[1767,3507,3509],{"className":3508},[1770],"Binary trie on {010, 011, 110}; greedy walk for a query maximizes XOR by taking opposite bits",[381,3511,3512,3513,3555,3556,3590,3591,3625,3626,3641,3642,3657,3658,3673,3674,3689,3690,3705,3706,3721,3722,3737,3738,3791],{},"The trie holds ",[385,3514,3516],{"className":3515},[388],[385,3517,3519],{"className":3518,"ariaHidden":393},[392],[385,3520,3522,3525,3528,3532,3535,3538,3542,3545,3548,3552],{"className":3521},[397],[385,3523],{"className":3524,"style":402},[401],[385,3526,797],{"className":3527},[413],[385,3529,3531],{"className":3530},[406],"010",[385,3533,811],{"className":3534},[810],[385,3536],{"className":3537,"style":429},[428],[385,3539,3541],{"className":3540},[406],"011",[385,3543,811],{"className":3544},[810],[385,3546],{"className":3547,"style":429},[428],[385,3549,3551],{"className":3550},[406],"110",[385,3553,838],{"className":3554},[437],". For the query ",[385,3557,3559],{"className":3558},[388],[385,3560,3562,3580],{"className":3561,"ariaHidden":393},[392],[385,3563,3565,3568,3571,3574,3577],{"className":3564},[397],[385,3566],{"className":3567,"style":492},[401],[385,3569,556],{"className":3570},[406,407],[385,3572],{"className":3573,"style":910},[428],[385,3575,915],{"className":3576},[914],[385,3578],{"className":3579,"style":910},[428],[385,3581,3583,3586],{"className":3582},[397],[385,3584],{"className":3585,"style":3321},[401],[385,3587,3589],{"className":3588},[406],"100"," the greedy walk wants\nthe opposite bit at each level: ",[385,3592,3594],{"className":3593},[388],[385,3595,3597],{"className":3596,"ariaHidden":393},[392],[385,3598,3600,3604,3607,3610,3613,3616,3619,3622],{"className":3599},[397],[385,3601],{"className":3602,"style":3603},[401],"height:0.8389em;vertical-align:-0.1944em;",[385,3605,2927],{"className":3606},[406],[385,3608,811],{"className":3609},[810],[385,3611],{"className":3612,"style":429},[428],[385,3614,466],{"className":3615},[406],[385,3617,811],{"className":3618},[810],[385,3620],{"className":3621,"style":429},[428],[385,3623,466],{"className":3624},[406],". The high bit of ",[385,3627,3629],{"className":3628},[388],[385,3630,3632],{"className":3631,"ariaHidden":393},[392],[385,3633,3635,3638],{"className":3634},[397],[385,3636],{"className":3637,"style":492},[401],[385,3639,556],{"className":3640},[406,407]," is ",[385,3643,3645],{"className":3644},[388],[385,3646,3648],{"className":3647,"ariaHidden":393},[392],[385,3649,3651,3654],{"className":3650},[397],[385,3652],{"className":3653,"style":3321},[401],[385,3655,466],{"className":3656},[406],", so it takes\nthe ",[385,3659,3661],{"className":3660},[388],[385,3662,3664],{"className":3663,"ariaHidden":393},[392],[385,3665,3667,3670],{"className":3666},[397],[385,3668],{"className":3669,"style":3321},[401],[385,3671,2927],{"className":3672},[406],"-child; the remaining two bits of ",[385,3675,3677],{"className":3676},[388],[385,3678,3680],{"className":3679,"ariaHidden":393},[392],[385,3681,3683,3686],{"className":3682},[397],[385,3684],{"className":3685,"style":492},[401],[385,3687,556],{"className":3688},[406,407]," are ",[385,3691,3693],{"className":3692},[388],[385,3694,3696],{"className":3695,"ariaHidden":393},[392],[385,3697,3699,3702],{"className":3698},[397],[385,3700],{"className":3701,"style":3321},[401],[385,3703,2927],{"className":3704},[406],", so at each step the wanted\nopposite bit ",[385,3707,3709],{"className":3708},[388],[385,3710,3712],{"className":3711,"ariaHidden":393},[392],[385,3713,3715,3718],{"className":3714},[397],[385,3716],{"className":3717,"style":3321},[401],[385,3719,466],{"className":3720},[406]," is available and the walk follows it. It lands on the stored\nnumber ",[385,3723,3725],{"className":3724},[388],[385,3726,3728],{"className":3727,"ariaHidden":393},[392],[385,3729,3731,3734],{"className":3730},[397],[385,3732],{"className":3733,"style":3321},[401],[385,3735,3541],{"className":3736},[406],", giving ",[385,3739,3741],{"className":3740},[388],[385,3742,3744,3763,3781],{"className":3743,"ariaHidden":393},[392],[385,3745,3747,3751,3754,3757,3760],{"className":3746},[397],[385,3748],{"className":3749,"style":3750},[401],"height:0.7278em;vertical-align:-0.0833em;",[385,3752,3589],{"className":3753},[406],[385,3755],{"className":3756,"style":2106},[428],[385,3758,3080],{"className":3759},[2110],[385,3761],{"className":3762,"style":2106},[428],[385,3764,3766,3769,3772,3775,3778],{"className":3765},[397],[385,3767],{"className":3768,"style":3321},[401],[385,3770,3541],{"className":3771},[406],[385,3773],{"className":3774,"style":910},[428],[385,3776,915],{"className":3777},[914],[385,3779],{"className":3780,"style":910},[428],[385,3782,3784,3787],{"className":3783},[397],[385,3785],{"className":3786,"style":3321},[401],[385,3788,3790],{"className":3789},[406],"111",", the maximum.",[2884,3793,3795],{"id":3794},"multi-pattern-and-compressed-variants","Multi-pattern and compressed variants",[381,3797,3798,3799,3802,3803,3806,3807,3812,3813,3816,3817,3819,3820,3827,3828,3831,3832,3835,3836,3839,3840,3843,3844,3847,3848,3851,3852],{},"A trie of ",[441,3800,3801],{},"patterns"," augmented with ",[578,3804,3805],{},"failure links",", pointers that, on a\nmismatch, jump to the longest proper suffix of the current match that is also a\nprefix in the trie, is the ",[556,3808,3809],{"href":143},[578,3810,3811],{},"Aho–Corasick"," automaton: it scans a text once and\nreports ",[441,3814,3815],{},"every"," occurrence of ",[441,3818,3815],{}," pattern in linear time, the multi-string\ngeneralization of KMP (which is single-pattern failure-link matching).",[636,3821,3822],{},[556,3823,3185],{"href":3824,"ariaDescribedBy":3825,"dataFootnoteRef":376,"id":3826},"#user-content-fn-erickson-ds",[642],"user-content-fnref-erickson-ds","\nFor storage, a ",[578,3829,3830],{},"compressed trie"," (a ",[441,3833,3834],{},"radix tree"," or ",[578,3837,3838],{},"Patricia"," trie) contracts\neach chain of single-child nodes into one edge labeled by a whole substring,\nshrinking the node count dramatically; ",[578,3841,3842],{},"suffix trees"," and ",[578,3845,3846],{},"suffix arrays"," push\nthe idea further, indexing ",[441,3849,3850],{},"all suffixes"," of a text for fast substring search,\nthe subject of later lessons.",[636,3853,3854],{},[556,3855,3859],{"href":3856,"ariaDescribedBy":3857,"dataFootnoteRef":376,"id":3858},"#user-content-fn-sedgewick-trie",[642],"user-content-fnref-sedgewick-trie","3",[645,3861,3863],{"id":3862},"takeaways","Takeaways",[937,3865,3866,3918,4009,4085,4140],{},[940,3867,576,3868,3870,3871,3873,3874,3901,3902,3917],{},[578,3869,580],{}," is a rooted tree whose edges are labeled by characters; a\nroot-to-node path spells a ",[578,3872,715],{},", and an ",[385,3875,3877],{"className":3876},[388],[385,3878,3880],{"className":3879,"ariaHidden":393},[392],[385,3881,3883,3886,3889,3892,3895,3898],{"className":3882},[397],[385,3884],{"className":3885,"style":856},[401],[385,3887,748],{"className":3888},[406,407],[385,3890,752],{"className":3891},[406,407],[385,3893,757],{"className":3894,"style":756},[406,407],[385,3896,433],{"className":3897},[406,407],[385,3899,764],{"className":3900},[406,407]," flag marks nodes that\ncomplete a stored key. Children are an array of size ",[385,3903,3905],{"className":3904},[388],[385,3906,3908],{"className":3907,"ariaHidden":393},[392],[385,3909,3911,3914],{"className":3910},[397],[385,3912],{"className":3913,"style":402},[401],[385,3915,961],{"className":3916},[406]," or a per-node map.",[940,3919,3920,3950,3951,3969,3970,932],{},[578,3921,3922,3923,3925,3926],{},"Insert, search, and ",[472,3924,2320],{}," all run in ",[385,3927,3929],{"className":3928},[388],[385,3930,3932],{"className":3931,"ariaHidden":393},[392],[385,3933,3935,3938,3941,3944,3947],{"className":3934},[397],[385,3936],{"className":3937,"style":402},[401],[385,3939,409],{"className":3940,"style":408},[406,407],[385,3942,414],{"className":3943},[413],[385,3945,513],{"className":3946},[406,407],[385,3948,438],{"className":3949},[437],", the key length, and are\n",[578,3952,3953,3954],{},"independent of ",[385,3955,3957],{"className":3956},[388],[385,3958,3960],{"className":3959,"ariaHidden":393},[392],[385,3961,3963,3966],{"className":3962},[397],[385,3964],{"className":3965,"style":492},[401],[385,3967,433],{"className":3968},[406,407],", beating a BST's ",[385,3971,3973],{"className":3972},[388],[385,3974,3976],{"className":3975,"ariaHidden":393},[392],[385,3977,3979,3982,3985,3988,3991,3994,4000,4003,4006],{"className":3978},[397],[385,3980],{"className":3981,"style":402},[401],[385,3983,409],{"className":3984,"style":408},[406,407],[385,3986,414],{"className":3987},[413],[385,3989,513],{"className":3990},[406,407],[385,3992],{"className":3993,"style":429},[428],[385,3995,3997],{"className":3996},[418],[385,3998,424],{"className":3999,"style":423},[406,422],[385,4001],{"className":4002,"style":429},[428],[385,4004,433],{"className":4005},[406,407],[385,4007,438],{"className":4008},[437],[940,4010,4011,4012,4072,4073,4076,4077,563,4080,566,4082,932],{},"Space is up to ",[385,4013,4015],{"className":4014},[388],[385,4016,4018,4042,4060],{"className":4017,"ariaHidden":393},[392],[385,4019,4021,4024,4027,4030,4033,4036,4039],{"className":4020},[397],[385,4022],{"className":4023,"style":402},[401],[385,4025,409],{"className":4026,"style":408},[406,407],[385,4028,414],{"className":4029},[413],[385,4031,433],{"className":4032},[406,407],[385,4034],{"className":4035,"style":2106},[428],[385,4037,2111],{"className":4038},[2110],[385,4040],{"className":4041,"style":2106},[428],[385,4043,4045,4048,4051,4054,4057],{"className":4044},[397],[385,4046],{"className":4047,"style":509},[401],[385,4049,513],{"className":4050},[406,407],[385,4052],{"className":4053,"style":2106},[428],[385,4055,2111],{"className":4056},[2110],[385,4058],{"className":4059,"style":2106},[428],[385,4061,4063,4066,4069],{"className":4062},[397],[385,4064],{"className":4065,"style":402},[401],[385,4067,961],{"className":4068},[406],[385,4070,438],{"className":4071},[437]," with array children, but ",[578,4074,4075],{},"shared\nprefixes are stored once",", so prefix-heavy sets compress well; tries beat hash\nsets by giving ",[578,4078,4079],{},"ordered traversal",[578,4081,2288],{},[578,4083,4084],{},"no collisions",[940,4086,4087,4088,563,4091,566,4097,4100,4101,4131,4132,4135,4136,4139],{},"Tries power ",[578,4089,4090],{},"autocomplete",[578,4092,4093,4094,4096],{},"wildcard ",[472,4095,932],{}," matching",[578,4098,4099],{},"board word-search\npruning","; over ",[385,4102,4104],{"className":4103},[388],[385,4105,4107],{"className":4106,"ariaHidden":393},[392],[385,4108,4110,4113,4116,4119,4122,4125,4128],{"className":4109},[397],[385,4111],{"className":4112,"style":402},[401],[385,4114,797],{"className":4115},[413],[385,4117,2927],{"className":4118},[406],[385,4120,811],{"className":4121},[810],[385,4123],{"className":4124,"style":429},[428],[385,4126,466],{"className":4127},[406],[385,4129,838],{"className":4130},[437]," a ",[578,4133,4134],{},"binary trie"," solves ",[578,4137,4138],{},"maximum-XOR pair"," by\ngreedily walking toward the opposite bit from the high bit down.",[940,4141,4142,4144,4145,4148,4149,4152],{},[578,4143,3811],{}," = trie + failure links = multi-pattern KMP; ",[578,4146,4147],{},"Patricia \u002F radix\ntrees"," compress single-child chains, and ",[578,4150,4151],{},"suffix trees \u002F arrays"," index all\nsuffixes of a text.",[4154,4155,4158,4163],"section",{"className":4156,"dataFootnotes":376},[4157],"footnotes",[645,4159,4162],{"className":4160,"id":642},[4161],"sr-only","Footnotes",[4164,4165,4166,4205,4217],"ol",{},[940,4167,4169,4172,4173,4197,4198],{"id":4168},"user-content-fn-skiena-trie",[578,4170,4171],{},"Skiena",", § — String Data Structures: tries route keys character-by-character, giving ",[385,4174,4176],{"className":4175},[388],[385,4177,4179],{"className":4178,"ariaHidden":393},[392],[385,4180,4182,4185,4188,4191,4194],{"className":4181},[397],[385,4183],{"className":4184,"style":402},[401],[385,4186,409],{"className":4187,"style":408},[406,407],[385,4189,414],{"className":4190},[413],[385,4192,513],{"className":4193},[406,407],[385,4195,438],{"className":4196},[437]," search independent of the number of stored strings. ",[556,4199,4204],{"href":4200,"ariaLabel":4201,"className":4202,"dataFootnoteBackref":376},"#user-content-fnref-skiena-trie","Back to reference 1",[4203],"data-footnote-backref","↩",[940,4206,4208,4211,4212],{"id":4207},"user-content-fn-erickson-ds",[578,4209,4210],{},"Erickson",", Ch. — Data Structures: tries as a string dictionary; failure links extend a trie into the Aho–Corasick multi-pattern matcher. ",[556,4213,4204],{"href":4214,"ariaLabel":4215,"className":4216,"dataFootnoteBackref":376},"#user-content-fnref-erickson-ds","Back to reference 2",[4203],[940,4218,4220,4223,4224,4241,4242],{"id":4219},"user-content-fn-sedgewick-trie",[578,4221,4222],{},"Sedgewick",", §5.2 — Tries: ",[385,4225,4227],{"className":4226},[388],[385,4228,4230],{"className":4229,"ariaHidden":393},[392],[385,4231,4233,4236],{"className":4232},[397],[385,4234],{"className":4235,"style":509},[401],[385,4237,4240],{"className":4238,"style":4239},[406,407],"margin-right:0.0077em;","R","-way and ternary tries, prefix operations, and compressed (Patricia) variants for space. ",[556,4243,4204],{"href":4244,"ariaLabel":4245,"className":4246,"dataFootnoteBackref":376},"#user-content-fnref-sedgewick-trie","Back to reference 3",[4203],[4248,4249,4250],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark-mode .shiki span {color: var(--shiki-dark-mode);background: var(--shiki-dark-mode-bg);font-style: var(--shiki-dark-mode-font-style);font-weight: var(--shiki-dark-mode-font-weight);text-decoration: var(--shiki-dark-mode-text-decoration);}html.dark-mode .shiki span {color: var(--shiki-dark-mode);background: var(--shiki-dark-mode-bg);font-style: var(--shiki-dark-mode-font-style);font-weight: var(--shiki-dark-mode-font-weight);text-decoration: var(--shiki-dark-mode-text-decoration);}",{"title":376,"searchDepth":18,"depth":18,"links":4252},[4253,4254,4256,4257,4261,4262],{"id":647,"depth":18,"text":648},{"id":1022,"depth":18,"text":4255},"Operations: all O(L)",{"id":2077,"depth":18,"text":2078},{"id":2327,"depth":18,"text":2328,"children":4258},[4259,4260],{"id":2886,"depth":24,"text":2887},{"id":3794,"depth":24,"text":3795},{"id":3862,"depth":18,"text":3863},{"id":642,"depth":18,"text":4162},"A balanced search tree gives us O(logn) lookups by comparing whole keys to\neach other. But when the keys are strings, a single comparison is not O(1):\ndeciding whether \"international\" precedes \"internet\" already costs five\ncharacter comparisons, so a BST of n strings of length L really spends\nO(Llogn) per operation. Worse, the BST throws away an obvious source of\nstructure, namely that \"intern\", \"internet\", and \"international\" all share a\nprefix, and re-examines those shared characters on every descent.","md",{"moduleNumber":102,"lessonNumber":102,"order":4266},505,true,[4269,4273,4276,4279],{"title":4270,"slug":4271,"difficulty":4272},"Implement Trie (Prefix Tree)","implement-trie-prefix-tree","Medium",{"title":4274,"slug":4275,"difficulty":4272},"Design Add and Search Words Data Structure","design-add-and-search-words-data-structure",{"title":2877,"slug":4277,"difficulty":4278},"word-search-ii","Hard",{"title":4280,"slug":4281,"difficulty":4272},"Maximum XOR of Two Numbers in an Array","maximum-xor-of-two-numbers-in-an-array","---\ntitle: Tries & Prefix Trees\nmodule: Sequences & Strings\nmoduleNumber: 5\nlessonNumber: 5\norder: 505\nsummary: >-\n  A **trie** stores a set of strings in a tree keyed by _characters_, so that\n  insert, search, and prefix-test all run in $O(L)$ time — the length of the\n  key, _independent of how many keys are stored_. Shared prefixes are stored\n  once, which makes tries the natural structure for autocomplete, wildcard\n  dictionaries, board word-search, and — over the alphabet $\\{0,1\\}$ — the\n  maximum-XOR-pair problem.\ntopics: [Strings]\nsources:\n  - book: Skiena\n    ref: \"§ — String Data Structures\"\n  - book: Erickson\n    ref: \"Ch. — Data Structures\"\n  - book: Sedgewick\n    ref: \"§5.2 — Tries\"\npractice:\n  - title: 'Implement Trie (Prefix Tree)'\n    slug: implement-trie-prefix-tree\n    difficulty: Medium\n  - title: 'Design Add and Search Words Data Structure'\n    slug: design-add-and-search-words-data-structure\n    difficulty: Medium\n  - title: 'Word Search II'\n    slug: word-search-ii\n    difficulty: Hard\n  - title: 'Maximum XOR of Two Numbers in an Array'\n    slug: maximum-xor-of-two-numbers-in-an-array\n    difficulty: Medium\n---\n\nA balanced search tree gives us $O(\\log n)$ lookups by comparing whole keys to\neach other. But when the keys are _strings_, a single comparison is not $O(1)$:\ndeciding whether `\"international\"` precedes `\"internet\"` already costs five\ncharacter comparisons, so a BST of $n$ strings of length $L$ really spends\n$O(L \\log n)$ per operation. Worse, the [BST](\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees) throws away an obvious source of\nstructure, namely that `\"intern\"`, `\"internet\"`, and `\"international\"` all _share a\nprefix_, and re-examines those shared characters on every descent.\n\nA **trie** (from re_trie_val; usually pronounced \"try\") exploits exactly that\nstructure. Instead of comparing keys against each other, it routes each key\n_one character at a time_ down a tree whose edges are labeled by characters. A\nroot-to-node path spells a prefix; following the characters of a key leads to\nthe unique node that key reaches. Lookup costs $O(L)$, where the work depends only on\nthe key being searched for, **never on $n$**, the number of stored keys.[^skiena-trie]\n\n## The structure\n\n> **Definition (trie).** A _trie_ over an alphabet $\\Sigma$ is a rooted tree in\n> which every edge is labeled by a character of $\\Sigma$, the edges leaving any\n> node carry distinct labels, and the concatenation of labels on the path from\n> the root to a node $v$ is the _prefix_ represented by $v$. A boolean flag\n> $isEnd(v)$ marks the nodes whose prefix is a complete stored key.\n\nThe root represents the empty prefix. Note the two-level bookkeeping: a node can\nexist purely as an interior waypoint (a prefix of some longer key) yet _not_ be a\nkey itself. In the word set $\\{\\texttt{to}, \\texttt{tea}, \\texttt{ted}\\}$ the node\nat path `t` exists but is not a stored word, so its $isEnd$ is false; the nodes at\n`to`, `tea`, and `ted` have $isEnd = \\text{true}$.\n\nEach node needs a way to find a child by character. Two standard choices:\n\n- **Array children.** A fixed array of $|\\Sigma|$ pointers per node (e.g. 26 for\n  lowercase letters, or `children[2]` for a binary trie). Child lookup is a single\n  $O(1)$ index, at the cost of $|\\Sigma|$ slots per node whether used or not.\n- **[Hash-map](\u002Falgorithms\u002Fdata-structures\u002Fhash-tables) children.** A `char → node` map per node, so a node stores only the\n  children it actually has. Smaller for sparse, large alphabets (Unicode), with a\n  small constant-factor hashing overhead.\n\n## Operations: all $O(L)$\n\nInsertion walks down from the root, _creating_ a child node whenever the needed\nedge is missing, and sets $isEnd$ on the final node. Search walks the same path\nbut never creates; it fails the moment a needed edge is absent.\n\n```algorithm\ncaption: $\\textsc{Insert}(T, w)$ — add word $w = w_1 w_2 \\dots w_L$\n$x \\gets root(T)$\nfor $i \\gets 1$ to $L$ do\n  $c \\gets w_i$\n  if $child(x, c) = \\text{nil}$ then\n    $child(x, c) \\gets \\textsc{NewNode}()$\n  $x \\gets child(x, c)$\n$isEnd(x) \\gets \\text{true}$\n```\n\n```algorithm\ncaption: $\\textsc{Search}(T, w)$ — is $w$ a stored key?\n$x \\gets root(T)$\nfor $i \\gets 1$ to $L$ do\n  $c \\gets w_i$\n  if $child(x, c) = \\text{nil}$ then\n    return false\n  $x \\gets child(x, c)$\nreturn $isEnd(x)$\n```\n\nEach loop runs $L$ times and does $O(1)$ work per character (one indexed slot or\none hash probe), so **insert, search, and the prefix test all run in $O(L)$**.\n`startsWith(p)` is identical to $\\textsc{Search}$ except it returns _true_ as soon as\nthe path for $p$ exists, ignoring $isEnd$, because any node on a valid path\nwitnesses that $p$ is a prefix of some stored key.\n\n> **Remark (The decisive contrast).** A balanced BST of strings pays\n> $O(L \\log n)$ per operation: $\\log n$ comparisons, each up to $L$ characters.\n> A hash set of strings pays $O(L)$ to hash the key but loses all ordering and\n> prefix structure. A trie pays $O(L)$ _and_ keeps the keys in sorted order and\n> answers prefix queries directly. The $\\log n$ factor simply disappears: trie\n> cost is independent of $n$.\n\n$$\n% caption: Cost of the three string-dictionary structures per operation on $n$ keys of length $L$. The trie alone drops the $\\log n$ factor and answers prefix queries directly; the hash set is $O(L)$ but unordered\n\\begin{tikzpicture}[>=stealth, font=\\small]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node[font=\\footnotesize] at (2.0,0.4) {search};\n  \\node[font=\\footnotesize] at (4.0,0.4) {ordered?};\n  \\node[font=\\footnotesize] at (6.2,0.4) {prefix query?};\n  \\draw[thick] (-1.4,0.1) -- (7.3,0.1);\n  \\node[font=\\footnotesize] at (-0.7,-0.4) {BST};\n  \\node[font=\\footnotesize] at (2.0,-0.4) {$O(L\\log n)$};\n  \\node[font=\\footnotesize] at (4.0,-0.4) {yes};\n  \\node[font=\\footnotesize] at (6.2,-0.4) {no};\n  \\node[font=\\footnotesize] at (-0.7,-1.0) {hash set};\n  \\node[font=\\footnotesize] at (2.0,-1.0) {$O(L)$};\n  \\node[font=\\footnotesize] at (4.0,-1.0) {no};\n  \\node[font=\\footnotesize] at (6.2,-1.0) {no};\n  \\node[font=\\footnotesize, text=acc] at (-0.7,-1.6) {trie};\n  \\node[font=\\footnotesize, text=acc] at (2.0,-1.6) {$O(L)$};\n  \\node[font=\\footnotesize, text=acc] at (4.0,-1.6) {yes};\n  \\node[font=\\footnotesize, text=acc] at (6.2,-1.6) {yes};\n  \\draw[acc, thick] (-1.4,-1.3) rectangle (7.3,-1.9);\n\\end{tikzpicture}\n$$\n\n$$\n% caption: A trie over \\{to, tea, ted, ten, in, inn\\}; shared prefixes stored once, lookup is $O(L)$\n\\begin{tikzpicture}[\n  every node\u002F.style={circle, draw, minimum size=6mm, inner sep=0, font=\\small},\n  acc\u002F.style={circle, draw=acc, very thick, fill=acc!15, minimum size=6mm, inner sep=0, font=\\small},\n  level distance=11mm,\n  edgelbl\u002F.style={draw=none, font=\\footnotesize, fill=none},\n  >=stealth]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node (root) {$\\varepsilon$};\n  % t branch\n  \\node (t)  [below left=11mm and 16mm of root] {};\n  \\node (to) [below left=11mm and 9mm of t, acc] {};\n  \\node (te) [below right=11mm and 5mm of t] {};\n  \\node (tea)[below left=11mm and 5mm of te, acc] {};\n  \\node (ted)[below=11mm of te, acc] {};\n  \\node (ten)[below right=11mm and 5mm of te, acc] {};\n  % i branch\n  \\node (i)  [below right=11mm and 16mm of root] {};\n  \\node (in) [below=11mm of i, acc] {};\n  \\node (inn)[below=11mm of in, acc] {};\n  \\draw[->] (root) -- node[edgelbl,left] {t} (t);\n  \\draw[->] (root) -- node[edgelbl,right] {i} (i);\n  \\draw[->] (t) -- node[edgelbl,left] {o} (to);\n  \\draw[->] (t) -- node[edgelbl,right] {e} (te);\n  \\draw[->] (te) -- node[edgelbl,left] {a} (tea);\n  \\draw[->] (te) -- node[edgelbl,left] {d} (ted);\n  \\draw[->] (te) -- node[edgelbl,right] {n} (ten);\n  \\draw[->] (i) -- node[edgelbl,right] {n} (in);\n  \\draw[->] (in) -- node[edgelbl,right] {n} (inn);\n\\end{tikzpicture}\n$$\n\nThe blue nodes are the six stored words; the white interior nodes (`t`, `te`,\n`i`) are prefixes shared among them and stored exactly once. Looking up `ten`\nvisits three edges regardless of whether the trie holds six words or six million.\n\n## Space and trade-offs\n\nWith array children the worst case is $O(n \\cdot L \\cdot |\\Sigma|)$ pointers:\n$n$ keys, up to $L$ nodes each, $|\\Sigma|$ slots per node. That bound is\npessimistic, and tries are far better than it suggests _precisely when prefixes\nare shared_: every common prefix collapses to a single path, so a dictionary of\nEnglish words (densely overlapping) stores far fewer than $n\\cdot L$ nodes.\nHash-map children replace the $|\\Sigma|$ factor with the actual child count,\ntrading a constant for the array's $O(1)$ indexing.\n\n> **Remark (When to reach for a trie).** Over a hash set, a trie gives **ordered\n> traversal** (an in-order DFS emits the keys sorted lexicographically), direct\n> **prefix queries**, and **no hashing \u002F no collisions**; its bound is a true\n> worst case, not an expected one. Over a balanced BST it drops the $\\log n$\n> comparison factor and answers `startsWith` for free. The price is space when\n> the alphabet is large and prefixes are _not_ shared.\n\n## Applications\n\n**Autocomplete and prefix search.** To offer completions for what a user has\ntyped, walk to the node for the typed prefix in $O(L)$, then DFS the subtree\nbeneath it to enumerate every stored key with that prefix, since the trie has already\ngrouped them.\n\n$$\n% caption: Autocomplete for prefix \\texttt{te}: walk to the prefix node in $O(L)$ (accent path $t\\to e$), then DFS the subtree to emit every completion — \\texttt{tea}, \\texttt{ted}, \\texttt{ten} — already grouped under that node\n\\begin{tikzpicture}[\n  every node\u002F.style={circle, draw, minimum size=6mm, inner sep=0, font=\\small},\n  acc\u002F.style={circle, draw=acc, very thick, fill=acc!15, minimum size=6mm, inner sep=0, font=\\small},\n  edgelbl\u002F.style={draw=none, font=\\footnotesize, fill=none},\n  accedge\u002F.style={draw=acc, thick, ->},\n  level distance=11mm, >=stealth]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node (root) {$\\varepsilon$};\n  \\node (t)  [below=11mm of root] {};\n  \\node (te) [below=11mm of t] {};\n  \\node (tea)[below left=11mm and 9mm of te, acc] {};\n  \\node (ted)[below=11mm of te, acc] {};\n  \\node (ten)[below right=11mm and 9mm of te, acc] {};\n  \\draw[accedge] (root) -- node[edgelbl,left] {t} (t);\n  \\draw[accedge] (t) -- node[edgelbl,left] {e} (te);\n  \\draw[->] (te) -- node[edgelbl,left] {a} (tea);\n  \\draw[->] (te) -- node[edgelbl,left] {d} (ted);\n  \\draw[->] (te) -- node[edgelbl,right] {n} (ten);\n  \\node[draw=none, font=\\scriptsize, text=acc] at ([yshift=-5mm]tea.south) {tea};\n  \\node[draw=none, font=\\scriptsize, text=acc] at ([yshift=-5mm]ted.south) {ted};\n  \\node[draw=none, font=\\scriptsize, text=acc] at ([yshift=-5mm]ten.south) {ten};\n  \\node[draw=none, font=\\footnotesize, text=acc] at ([xshift=20mm]te.east) {prefix node};\n  \\node[draw=none, font=\\footnotesize] at ([xshift=14mm]root.east) {walk $O(L)$};\n\\end{tikzpicture}\n$$\n\n**Wildcard dictionary (the \".\" problem).** _Design Add and Search Words_ asks for a\ndictionary where a query may contain `.` matching any single character. Plain\nsearch no longer follows one path: at a `.` we must branch into _all_ children\nand recurse. Concrete characters keep the search $O(L)$; each `.` multiplies the\nbranching, but the trie still prunes any path that cannot match.\n\n```algorithm\ncaption: $\\textsc{WildSearch}(x, w, i)$ — match $w$ from node $x$, $w_i$ may be $\\texttt{.}$\nif $i > L$ then\n  return $isEnd(x)$\nif $w_i = \\texttt{\".\"}$ then\n  for each child $c$ of $x$ do\n    if $\\textsc{WildSearch}(c, w, i+1)$ then return true\n  return false\nelse\n  if $child(x, w_i) = \\text{nil}$ then return false\n  return $\\textsc{WildSearch}(child(x, w_i), w, i+1)$\n```\n\n$$\n% caption: Wildcard search for \\texttt{t.n}: the concrete \\texttt{t} follows one edge, the \\texttt{.} branches into every child (red, both \\texttt{o} and \\texttt{e}), and only the \\texttt{e} branch survives to spell \\texttt{ten}. A \\texttt{.} fans the search; concrete characters keep it on one path\n\\begin{tikzpicture}[\n  every node\u002F.style={circle, draw, minimum size=6mm, inner sep=0, font=\\small},\n  acc\u002F.style={circle, draw=acc, very thick, fill=acc!15, minimum size=6mm, inner sep=0, font=\\small},\n  edgelbl\u002F.style={draw=none, font=\\footnotesize, fill=none},\n  accedge\u002F.style={draw=acc, thick, ->},\n  redge\u002F.style={draw=red!75!black, thick, ->},\n  level distance=11mm, >=stealth]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node (root) {$\\varepsilon$};\n  \\node (t)  [below=11mm of root] {};\n  \\node (to) [below left=11mm and 14mm of t] {};\n  \\node (te) [below right=11mm and 8mm of t] {};\n  \\node (ten)[below=11mm of te, acc] {};\n  \\draw[accedge] (root) -- node[edgelbl,left] {t} (t);\n  \\draw[redge] (t) -- node[edgelbl,left] {o} (to);\n  \\draw[redge] (t) -- node[edgelbl,right] {e} (te);\n  \\draw[accedge] (te) -- node[edgelbl,right] {n} (ten);\n  \\node[draw=none, font=\\scriptsize, red!75!black] at ([yshift=-4.5mm]to.south) {dead end};\n  \\node[draw=none, font=\\scriptsize, text=acc] at ([yshift=-5mm]ten.south) {ten};\n  \\node[draw=none, font=\\footnotesize, red!75!black, align=center] at ([xshift=22mm]t.east)\n    {\\texttt{.} tries\\\\all children};\n\\end{tikzpicture}\n$$\n\n**Word search on a board.** _Word Search II_ hunts for many dictionary words in a\ngrid simultaneously. Building a trie of all target words lets one DFS over the\nboard carry a trie pointer alongside the grid position: the instant the current\nboard path spells a string that is _not a prefix of any target_, the missing trie\nedge prunes the entire branch. One traversal finds all words, and the shared\nprefixes mean overlapping targets share work.\n\n### The binary trie: maximum XOR pair\n\nA beautiful non-string use treats a fixed-width integer as a string of bits over\n$\\Sigma = \\{0, 1\\}$. _Maximum XOR of Two Numbers_ asks for\n$\\max_{i,j} (a_i \\oplus a_j)$. Brute force is $\\Theta(n^2)$; a binary trie solves\nit in $O(n \\cdot b)$ for $b$-bit numbers.\n\nInsert every number bit-by-bit from the **high bit down**, so each root-to-leaf\npath of length $b$ is one number. To maximize the XOR of a query $a$ against the\nstored set, walk down from the root and at each bit _greedily steer toward the\nopposite bit_ of $a$: a differing bit contributes a $1$ at that (high) position,\nworth more than every lower bit combined. If the opposite child exists, take it;\notherwise follow the only child available. The path traced spells the stored\nnumber that maximizes $a \\oplus (\\cdot)$.\n\n$$\n% caption: Binary trie on \\{010, 011, 110\\}; greedy walk for a query maximizes XOR by taking opposite bits\n\\begin{tikzpicture}[\n  every node\u002F.style={circle, draw, minimum size=6mm, inner sep=0, font=\\small},\n  term\u002F.style={circle, draw, very thick, minimum size=6mm, inner sep=0, font=\\small},\n  acc\u002F.style={circle, draw=acc, very thick, fill=acc!15, minimum size=6mm, inner sep=0, font=\\small},\n  edgelbl\u002F.style={draw=none, font=\\footnotesize, fill=none},\n  accedge\u002F.style={draw=acc, thick, ->},\n  level distance=11mm, >=stealth]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node (r)   {};\n  \\node (z)   [below left=11mm and 16mm of r] {};\n  \\node (o)   [below right=11mm and 16mm of r] {};\n  \\node (z1)  [below=11mm of z] {};\n  \\node (o1)  [below=11mm of o] {};\n  \\node[term] (z10) [below left=11mm and 6mm of z1] {};\n  \\node[acc]  (z11) [below right=11mm and 6mm of z1] {};\n  \\node[term] (o10) [below=11mm of o1] {};\n  \\draw[accedge] (r) -- node[edgelbl,left] {0} (z);\n  \\draw[->] (r) -- node[edgelbl,right] {1} (o);\n  \\draw[accedge] (z) -- node[edgelbl,left] {1} (z1);\n  \\draw[->] (o) -- node[edgelbl,right] {1} (o1);\n  \\draw[->] (z1) -- node[edgelbl,left] {0} (z10);\n  \\draw[accedge] (z1) -- node[edgelbl,right] {1} (z11);\n  \\draw[->] (o1) -- node[edgelbl,right] {0} (o10);\n  \\node[draw=none, font=\\scriptsize] at ([yshift=-5mm]z10.south) {$010$};\n  \\node[draw=none, font=\\scriptsize, text=acc] at ([yshift=-5mm]z11.south) {$011$};\n  \\node[draw=none, font=\\scriptsize] at ([yshift=-5mm]o10.south) {$110$};\n\\end{tikzpicture}\n$$\n\nThe trie holds $\\{010, 011, 110\\}$. For the query $a = 100$ the greedy walk wants\nthe opposite bit at each level: $0, 1, 1$. The high bit of $a$ is $1$, so it takes\nthe $0$-child; the remaining two bits of $a$ are $0$, so at each step the wanted\nopposite bit $1$ is available and the walk follows it. It lands on the stored\nnumber $011$, giving $100 \\oplus 011 = 111$, the maximum.\n\n### Multi-pattern and compressed variants\n\nA trie of _patterns_ augmented with **failure links**, pointers that, on a\nmismatch, jump to the longest proper suffix of the current match that is also a\nprefix in the trie, is the [**Aho–Corasick**](\u002Falgorithms\u002Fsequences\u002Fstring-matching) automaton: it scans a text once and\nreports _every_ occurrence of _every_ pattern in linear time, the multi-string\ngeneralization of KMP (which is single-pattern failure-link matching).[^erickson-ds]\nFor storage, a **compressed trie** (a _radix tree_ or **Patricia** trie) contracts\neach chain of single-child nodes into one edge labeled by a whole substring,\nshrinking the node count dramatically; **suffix trees** and **suffix arrays** push\nthe idea further, indexing _all suffixes_ of a text for fast substring search,\nthe subject of later lessons.[^sedgewick-trie]\n\n## Takeaways\n\n- A **trie** is a rooted tree whose edges are labeled by characters; a\n  root-to-node path spells a **prefix**, and an $isEnd$ flag marks nodes that\n  complete a stored key. Children are an array of size $|\\Sigma|$ or a per-node map.\n- **Insert, search, and `startsWith` all run in $O(L)$**, the key length, and are\n  **independent of $n$**, beating a BST's $O(L\\log n)$.\n- Space is up to $O(n\\cdot L\\cdot|\\Sigma|)$ with array children, but **shared\n  prefixes are stored once**, so prefix-heavy sets compress well; tries beat hash\n  sets by giving **ordered traversal**, **prefix queries**, and **no collisions**.\n- Tries power **autocomplete**, **wildcard `.` matching**, and **board word-search\n  pruning**; over $\\{0,1\\}$ a **binary trie** solves **maximum-XOR pair** by\n  greedily walking toward the opposite bit from the high bit down.\n- **Aho–Corasick** = trie + failure links = multi-pattern KMP; **Patricia \u002F radix\n  trees** compress single-child chains, and **suffix trees \u002F arrays** index all\n  suffixes of a text.\n\n[^skiena-trie]: **Skiena**, § — String Data Structures: tries route keys character-by-character, giving $O(L)$ search independent of the number of stored strings.\n[^erickson-ds]: **Erickson**, Ch. — Data Structures: tries as a string dictionary; failure links extend a trie into the Aho–Corasick multi-pattern matcher.\n[^sedgewick-trie]: **Sedgewick**, §5.2 — Tries: $R$-way and ternary tries, prefix operations, and compressed (Patricia) variants for space.\n",{"text":4284,"minutes":4285,"time":4286,"words":4287},"8 min read",7.405,444300,1481,{"title":148,"description":4263},[4290,4292,4294],{"book":4171,"ref":4291},"§ — String Data Structures",{"book":4210,"ref":4293},"Ch. — Data Structures",{"book":4222,"ref":4295},"§5.2 — Tries","available","01.algorithms\u002F05.sequences\u002F05.tries",[145],"5Z8eTiPrYDPtfsvselM7ITJdA69-1UyGT4TVkT3Loqc",{"\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm":4301,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":4302,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":4303,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":4304,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":4305,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":4306,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":4307,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":4308,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":4309,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":4310,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":4311,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":4312,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":4313,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":4314,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":4315,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":4316,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":4317,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":4318,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":4319,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":4320,"\u002Falgorithms\u002Fsequences\u002Ftries":4287,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":4321,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":4322,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":4323,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":4324,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":4325,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":4326,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":4327,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":4328,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":4329,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":4330,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":4331,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":4332,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":4333,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":4334,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":4335,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":4336,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":4337,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":4338,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":4339,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":4340,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":4341,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":4342,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":4343,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":4344,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":4345,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":4346,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":4317,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":4347,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":4348,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":4349,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":4350,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":4332,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":4351,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":4352,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":4313,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":4353,"\u002Falgorithms":4354,"\u002Ftheory-of-computation":4355,"\u002Fcomputer-architecture":4355,"\u002Fphysical-computing":4355,"\u002Fdatabases":4355,"\u002Fdeep-learning":4355},1763,2107,1738,2628,1723,2048,1697,1044,1542,1565,1679,1586,1388,1465,1971,1455,1533,1483,1578,1791,2704,1658,2070,1978,2080,1568,1451,1291,1543,1883,1443,1599,2038,2241,1744,1678,2288,1929,1657,1412,1554,1418,1713,1798,1694,1762,1534,1595,1262,1495,1630,2306,2142,107,0,{"\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm":4357,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":4358,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":4359,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":4360,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":4361,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":4362,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":4363,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":4364,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":4365,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":4366,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":4367,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":4368,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":4369,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":4370,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":4371,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":4372,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":4373,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":4374,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":4375,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":4376,"\u002Falgorithms\u002Fsequences\u002Ftries":4377,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":4378,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":4379,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":4380,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":4381,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":4382,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":4383,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":4384,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":4385,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":4386,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":4387,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":4388,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":4389,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":4390,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":4391,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":4392,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":4393,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":4394,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":4395,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":4396,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":4397,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":4398,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":4399,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":4400,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":4401,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":4402,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":4403,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":4404,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":4405,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":4406,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":4407,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":4408,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":4409,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":4410,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":4411,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":4412,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":4413,"\u002Falgorithms":4414,"\u002Ftheory-of-computation":4417,"\u002Fcomputer-architecture":4420,"\u002Fphysical-computing":4423,"\u002Fdatabases":4426,"\u002Fdeep-learning":4429},{"path":11,"title":10,"module":5,"summary":14},{"path":17,"title":16,"module":5,"summary":20},{"path":23,"title":22,"module":5,"summary":27},{"path":34,"title":33,"module":29,"summary":37},{"path":40,"title":39,"module":29,"summary":43},{"path":46,"title":45,"module":29,"summary":49},{"path":56,"title":55,"module":51,"summary":59},{"path":62,"title":61,"module":51,"summary":64},{"path":67,"title":66,"module":51,"summary":70},{"path":78,"title":77,"module":72,"summary":81},{"path":84,"title":83,"module":72,"summary":87},{"path":90,"title":89,"module":72,"summary":92},{"path":95,"title":94,"module":72,"summary":98},{"path":101,"title":100,"module":72,"summary":104},{"path":107,"title":106,"module":72,"summary":112},{"path":115,"title":114,"module":72,"summary":119},{"path":126,"title":125,"module":121,"summary":129},{"path":132,"title":131,"module":121,"summary":134},{"path":137,"title":136,"module":121,"summary":140},{"path":143,"title":142,"module":121,"summary":146},{"path":149,"title":148,"module":121,"summary":151},{"path":158,"title":157,"module":153,"summary":162},{"path":165,"title":164,"module":153,"summary":167},{"path":170,"title":169,"module":153,"summary":172},{"path":175,"title":174,"module":153,"summary":177},{"path":180,"title":179,"module":153,"summary":182},{"path":185,"title":184,"module":153,"summary":187},{"path":190,"title":189,"module":153,"summary":192},{"path":195,"title":194,"module":153,"summary":198},{"path":201,"title":200,"module":153,"summary":204},{"path":211,"title":210,"module":206,"summary":213},{"path":216,"title":215,"module":206,"summary":219},{"path":222,"title":221,"module":206,"summary":224},{"path":227,"title":226,"module":206,"summary":229},{"path":236,"title":235,"module":231,"summary":238},{"path":241,"title":240,"module":231,"summary":244},{"path":247,"title":246,"module":231,"summary":249},{"path":252,"title":251,"module":231,"summary":254},{"path":257,"title":256,"module":231,"summary":259},{"path":262,"title":261,"module":231,"summary":264},{"path":267,"title":266,"module":231,"summary":269},{"path":272,"title":271,"module":231,"summary":274},{"path":277,"title":276,"module":231,"summary":279},{"path":282,"title":281,"module":231,"summary":285},{"path":292,"title":291,"module":287,"summary":295},{"path":298,"title":297,"module":287,"summary":300},{"path":303,"title":302,"module":287,"summary":305},{"path":312,"title":311,"module":307,"summary":315},{"path":318,"title":317,"module":307,"summary":320},{"path":323,"title":322,"module":307,"summary":325},{"path":328,"title":327,"module":307,"summary":330},{"path":338,"title":337,"module":332,"summary":341},{"path":344,"title":343,"module":332,"summary":346},{"path":349,"title":348,"module":332,"summary":351},{"path":359,"title":358,"module":353,"summary":362},{"path":364,"title":361,"module":353,"summary":366},{"path":369,"title":368,"module":353,"summary":373},{"path":4415,"title":4416,"module":376,"summary":376},"\u002Falgorithms","Algorithms",{"path":4418,"title":4419,"module":376,"summary":376},"\u002Ftheory-of-computation","Theory of Computation",{"path":4421,"title":4422,"module":376,"summary":376},"\u002Fcomputer-architecture","Computer Architecture",{"path":4424,"title":4425,"module":376,"summary":376},"\u002Fphysical-computing","Physical Computing",{"path":4427,"title":4428,"module":376,"summary":376},"\u002Fdatabases","Databases",{"path":4430,"title":4431,"module":376,"summary":376},"\u002Fdeep-learning","Deep Learning",1781526656200]