[{"data":1,"prerenderedAt":6136},["ShallowReactive",2],{"nav:algorithms":3,"lesson:\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":374,"course-wordcounts":6004,"ref-card-index":6060},[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":164,"blurb":376,"body":377,"description":5963,"extension":5964,"meta":5965,"module":153,"navigation":5967,"path":165,"practice":5968,"rawbody":5986,"readingTime":5987,"seo":5992,"sources":5993,"status":6000,"stem":6001,"summary":167,"topics":6002,"__hash__":6003},"course\u002F01.algorithms\u002F06.graphs\u002F02.topological-sort-and-scc.md","",{"type":378,"value":379,"toc":5951},"minimark",[380,408,413,423,575,754,758,892,955,1108,1167,1176,1183,1187,1200,1212,1359,1447,1458,1512,1557,1831,1913,1968,2431,2436,3056,3222,3518,3558,3561,3670,3852,4149,4153,4164,4272,4299,4306,4309,4486,4694,4823,4827,4926,4961,5086,5159,5607,5708,5712,5854,5947],[381,382,383,384,388,389,393,394,398,399,402,403,407],"p",{},"Many problems are really questions about ",[385,386,387],"em",{},"order",". To compile a program you must\nbuild each module before the ones that depend on it; to follow a recipe you must\nchop before you sauté; to finish a degree you must clear the prerequisites of\neach course. Each of these is a ",[390,391,392],"strong",{},"directed acyclic graph",", a digraph with no\ndirected cycles, and the task of ",[395,396,397],"q",{},"find a consistent order"," is ",[390,400,401],{},"topological\nsorting",". ",[404,405,406],"a",{"href":158},"Depth-first search",",\nwith its finish-time timestamps from the previous lesson, solves it almost\nincidentally.",[409,410,412],"h2",{"id":411},"directed-acyclic-graphs","Directed acyclic graphs",[414,415,417],"callout",{"type":416},"definition",[381,418,419,422],{},[390,420,421],{},"Definition (Directed acyclic graph)."," A directed acyclic graph (DAG) is a directed graph that contains no\ndirected cycle.",[381,424,425,426,450,451,468,469,450,484,499,500,540,541,574],{},"The absence of cycles is exactly what makes a consistent ordering possible: if\ntask ",[427,428,431],"span",{"className":429},[430],"katex",[427,432,436],{"className":433,"ariaHidden":435},[434],"katex-html","true",[427,437,440,445],{"className":438},[439],"base",[427,441],{"className":442,"style":444},[443],"strut","height:0.4306em;",[427,446,404],{"className":447},[448,449],"mord","mathnormal"," must precede ",[427,452,454],{"className":453},[430],[427,455,457],{"className":456,"ariaHidden":435},[434],[427,458,460,464],{"className":459},[439],[427,461],{"className":462,"style":463},[443],"height:0.6944em;",[427,465,467],{"className":466},[448,449],"b"," and ",[427,470,472],{"className":471},[430],[427,473,475],{"className":474,"ariaHidden":435},[434],[427,476,478,481],{"className":477},[439],[427,479],{"className":480,"style":463},[443],[427,482,467],{"className":483},[448,449],[427,485,487],{"className":486},[430],[427,488,490],{"className":489,"ariaHidden":435},[434],[427,491,493,496],{"className":492},[439],[427,494],{"className":495,"style":444},[443],[427,497,404],{"className":498},[448,449],", no linear order can satisfy\nboth. Here is a small DAG of course prerequisites, where an edge ",[427,501,503],{"className":502},[430],[427,504,506,529],{"className":505,"ariaHidden":435},[434],[427,507,509,512,516,521,526],{"className":508},[439],[427,510],{"className":511,"style":444},[443],[427,513,515],{"className":514},[448,449],"u",[427,517],{"className":518,"style":520},[519],"mspace","margin-right:0.2778em;",[427,522,525],{"className":523},[524],"mrel","→",[427,527],{"className":528,"style":520},[519],[427,530,532,535],{"className":531},[439],[427,533],{"className":534,"style":444},[443],[427,536,539],{"className":537,"style":538},[448,449],"margin-right:0.0359em;","v"," means\n",[395,542,543,558,559],{},[427,544,546],{"className":545},[430],[427,547,549],{"className":548,"ariaHidden":435},[434],[427,550,552,555],{"className":551},[439],[427,553],{"className":554,"style":444},[443],[427,556,515],{"className":557},[448,449]," must come before ",[427,560,562],{"className":561},[430],[427,563,565],{"className":564,"ariaHidden":435},[434],[427,566,568,571],{"className":567},[439],[427,569],{"className":570,"style":444},[443],[427,572,539],{"className":573,"style":538},[448,449],":",[576,577,581,684],"figure",{"className":578},[579,580],"tikz-figure","tikz-diagram-rendered",[582,583,588],"svg",{"xmlns":584,"width":585,"height":586,"viewBox":587},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","226.492","115.290","-75 -75 169.869 86.468",[589,590,593,598,607,610,617,620,627,630,637,640,647,650,653,656,659,662,665,668,671,674,678,681],"g",{"stroke":591,"style":592},"currentColor","stroke-miterlimit:10;stroke-width:.4",[594,595],"path",{"fill":596,"d":597},"none","M-45.975-60.689c0-6.286-5.095-11.381-11.38-11.381s-11.382 5.095-11.382 11.381 5.096 11.381 11.381 11.381 11.381-5.095 11.381-11.38Zm-11.38 0",[589,599,601],{"transform":600},"translate(-2.45 1.937)",[594,602],{"d":603,"fill":591,"stroke":591,"className":604,"style":606},"M-55.734-60.588Q-56.130-60.588-56.416-60.792Q-56.701-60.997-56.848-61.331Q-56.996-61.665-56.996-62.056Q-56.996-62.491-56.822-62.952Q-56.648-63.414-56.336-63.805Q-56.024-64.196-55.614-64.431Q-55.203-64.666-54.763-64.666Q-54.495-64.666-54.278-64.528Q-54.060-64.389-53.928-64.143Q-53.889-64.293-53.781-64.389Q-53.673-64.486-53.533-64.486Q-53.410-64.486-53.326-64.413Q-53.243-64.341-53.243-64.218Q-53.243-64.165-53.252-64.134L-53.871-61.643Q-53.928-61.445-53.928-61.247Q-53.928-60.852-53.665-60.852Q-53.379-60.852-53.245-61.175Q-53.111-61.498-52.992-62.003Q-52.983-62.034-52.959-62.058Q-52.935-62.082-52.900-62.082L-52.794-62.082Q-52.746-62.082-52.724-62.049Q-52.702-62.016-52.702-61.968Q-52.816-61.537-52.907-61.284Q-52.997-61.032-53.190-60.810Q-53.383-60.588-53.682-60.588Q-53.990-60.588-54.238-60.759Q-54.486-60.931-54.557-61.221Q-54.812-60.935-55.108-60.762Q-55.405-60.588-55.734-60.588M-55.717-60.852Q-55.387-60.852-55.077-61.093Q-54.768-61.335-54.557-61.651Q-54.548-61.660-54.548-61.678L-54.051-63.642Q-54.108-63.959-54.300-64.183Q-54.491-64.407-54.781-64.407Q-55.150-64.407-55.449-64.088Q-55.748-63.770-55.915-63.361Q-56.051-63.014-56.176-62.504Q-56.301-61.994-56.301-61.669Q-56.301-61.344-56.163-61.098Q-56.024-60.852-55.717-60.852",[605],"tikz-text","stroke-width:0.270",[594,608],{"fill":596,"d":609},"M22.712-60.689c0-6.286-5.095-11.381-11.381-11.381S-.05-66.975-.05-60.689 5.045-49.308 11.33-49.308s11.381-5.095 11.381-11.38Zm-11.381 0",[589,611,613],{"transform":612},"translate(66.705 3.125)",[594,614],{"d":615,"fill":591,"stroke":591,"className":616,"style":606},"M-55.734-60.588Q-56.310-60.588-56.631-61.019Q-56.952-61.449-56.952-62.029Q-56.952-62.434-56.868-62.662L-55.989-66.160Q-55.954-66.310-55.954-66.384Q-55.954-66.521-56.521-66.521Q-56.618-66.521-56.618-66.639Q-56.618-66.696-56.587-66.767Q-56.556-66.837-56.490-66.837L-55.269-66.934Q-55.216-66.934-55.183-66.905Q-55.150-66.876-55.150-66.828L-55.150-66.793L-55.809-64.183Q-55.286-64.666-54.763-64.666Q-54.377-64.666-54.086-64.462Q-53.796-64.257-53.649-63.923Q-53.502-63.589-53.502-63.198Q-53.502-62.614-53.805-62.005Q-54.108-61.397-54.629-60.992Q-55.150-60.588-55.734-60.588M-55.717-60.852Q-55.348-60.852-55.044-61.175Q-54.741-61.498-54.583-61.893Q-54.438-62.249-54.317-62.757Q-54.196-63.264-54.196-63.585Q-54.196-63.910-54.341-64.158Q-54.486-64.407-54.781-64.407Q-55.383-64.407-55.954-63.607L-56.196-62.614Q-56.341-61.990-56.341-61.726Q-56.341-61.383-56.189-61.117Q-56.038-60.852-55.717-60.852",[605],[594,618],{"fill":596,"d":619},"M91.399-60.689c0-6.286-5.096-11.381-11.381-11.381s-11.382 5.095-11.382 11.381 5.096 11.381 11.382 11.381 11.38-5.095 11.38-11.38Zm-11.381 0",[589,621,623],{"transform":622},"translate(135.37 1.937)",[594,624],{"d":625,"fill":591,"stroke":591,"className":626,"style":606},"M-56.266-61.796Q-56.266-61.401-56.053-61.126Q-55.840-60.852-55.458-60.852Q-54.913-60.852-54.407-61.087Q-53.902-61.322-53.585-61.744Q-53.564-61.779-53.502-61.779Q-53.445-61.779-53.399-61.728Q-53.353-61.678-53.353-61.625Q-53.353-61.590-53.379-61.564Q-53.726-61.089-54.289-60.838Q-54.851-60.588-55.475-60.588Q-55.906-60.588-56.255-60.790Q-56.605-60.992-56.796-61.348Q-56.987-61.704-56.987-62.130Q-56.987-62.592-56.785-63.049Q-56.583-63.506-56.227-63.875Q-55.871-64.244-55.427-64.455Q-54.983-64.666-54.513-64.666Q-54.245-64.666-53.996-64.585Q-53.748-64.503-53.581-64.325Q-53.414-64.147-53.414-63.884Q-53.414-63.647-53.564-63.469Q-53.713-63.291-53.946-63.291Q-54.086-63.291-54.192-63.385Q-54.297-63.480-54.297-63.625Q-54.297-63.827-54.150-63.981Q-54.003-64.134-53.801-64.134Q-53.906-64.275-54.111-64.341Q-54.315-64.407-54.522-64.407Q-55.058-64.407-55.455-63.978Q-55.853-63.550-56.060-62.930Q-56.266-62.311-56.266-61.796",[605],[594,628],{"fill":596,"d":629},"M-45.975-3.383c0-6.286-5.095-11.382-11.38-11.382S-68.738-9.669-68.738-3.383s5.096 11.38 11.381 11.38 11.381-5.095 11.381-11.38Zm-11.38 0",[589,631,633],{"transform":632},"translate(-2.396 60.43)",[594,634],{"d":635,"fill":591,"stroke":591,"className":636,"style":606},"M-55.734-60.588Q-56.130-60.588-56.416-60.792Q-56.701-60.997-56.848-61.331Q-56.996-61.665-56.996-62.056Q-56.996-62.491-56.822-62.952Q-56.648-63.414-56.336-63.805Q-56.024-64.196-55.614-64.431Q-55.203-64.666-54.763-64.666Q-54.495-64.666-54.278-64.528Q-54.060-64.389-53.928-64.143L-53.423-66.160Q-53.388-66.310-53.388-66.384Q-53.388-66.521-53.955-66.521Q-54.051-66.521-54.051-66.639Q-54.051-66.696-54.021-66.767Q-53.990-66.837-53.928-66.837L-52.702-66.934Q-52.649-66.934-52.619-66.905Q-52.588-66.876-52.588-66.828L-52.588-66.793L-53.871-61.643Q-53.871-61.585-53.900-61.454Q-53.928-61.322-53.928-61.247Q-53.928-60.852-53.665-60.852Q-53.379-60.852-53.245-61.175Q-53.111-61.498-52.992-62.003Q-52.983-62.034-52.959-62.058Q-52.935-62.082-52.900-62.082L-52.794-62.082Q-52.746-62.082-52.724-62.049Q-52.702-62.016-52.702-61.968Q-52.816-61.537-52.907-61.284Q-52.997-61.032-53.190-60.810Q-53.383-60.588-53.682-60.588Q-53.990-60.588-54.238-60.759Q-54.486-60.931-54.557-61.221Q-54.812-60.935-55.108-60.762Q-55.405-60.588-55.734-60.588M-55.717-60.852Q-55.387-60.852-55.077-61.093Q-54.768-61.335-54.557-61.651Q-54.548-61.660-54.548-61.687L-54.051-63.642Q-54.108-63.959-54.300-64.183Q-54.491-64.407-54.781-64.407Q-55.150-64.407-55.449-64.088Q-55.748-63.770-55.915-63.361Q-56.051-63.014-56.176-62.504Q-56.301-61.994-56.301-61.669Q-56.301-61.344-56.163-61.098Q-56.024-60.852-55.717-60.852",[605],[594,638],{"fill":596,"d":639},"M22.712-3.383c0-6.286-5.095-11.382-11.381-11.382S-.05-9.669-.05-3.383 5.045 7.997 11.33 7.997s11.381-5.095 11.381-11.38Zm-11.381 0",[589,641,643],{"transform":642},"translate(66.536 59.243)",[594,644],{"d":645,"fill":591,"stroke":591,"className":646,"style":606},"M-56.240-61.867Q-56.240-61.454-56.044-61.153Q-55.849-60.852-55.458-60.852Q-54.913-60.852-54.407-61.087Q-53.902-61.322-53.585-61.744Q-53.564-61.779-53.502-61.779Q-53.445-61.779-53.399-61.728Q-53.353-61.678-53.353-61.625Q-53.353-61.590-53.379-61.564Q-53.726-61.089-54.289-60.838Q-54.851-60.588-55.475-60.588Q-56.148-60.588-56.545-61.069Q-56.943-61.550-56.943-62.236Q-56.943-62.882-56.609-63.447Q-56.275-64.011-55.715-64.339Q-55.154-64.666-54.513-64.666Q-54.108-64.666-53.801-64.464Q-53.493-64.262-53.493-63.884Q-53.493-63.484-53.759-63.244Q-54.025-63.005-54.442-62.893Q-54.860-62.781-55.236-62.757Q-55.611-62.732-56.077-62.732L-56.112-62.732Q-56.240-62.170-56.240-61.867M-56.042-62.992Q-55.181-62.992-54.522-63.148Q-53.862-63.304-53.862-63.875Q-53.862-64.126-54.062-64.266Q-54.262-64.407-54.522-64.407Q-55.093-64.407-55.484-64Q-55.875-63.594-56.042-62.992",[605],[594,648],{"fill":596,"d":649},"M-45.775-60.689h42.45",[594,651],{"d":652},"m-.82-60.689-3.584-1.35 1.179 1.35-1.18 1.35Z",[594,654],{"fill":596,"d":655},"M22.912-60.689h42.45",[594,657],{"d":658},"m67.867-60.689-3.585-1.35 1.18 1.35-1.18 1.35Z",[594,660],{"fill":596,"d":661},"M-57.356-49.108v31.068",[594,663],{"d":664},"m-57.356-15.534 1.351-3.585-1.35 1.18-1.351-1.18Z",[594,666],{"fill":596,"d":667},"M-45.775-3.383h42.45",[594,669],{"d":670},"m-.82-3.383-3.584-1.351 1.179 1.35-1.18 1.351Z",[594,672],{"fill":596,"d":673},"M20.223-10.802 68.764-51.3",[594,675],{"d":676,"style":677},"m70.688-52.905-3.618 1.26 1.77.281-.039 1.792Z","stroke-width:.399984",[594,679],{"fill":596,"d":680},"M11.331-49.108v31.068",[594,682],{"d":683},"m11.331-15.534 1.35-3.585-1.35 1.18-1.35-1.18Z",[685,686,689,690,705,706,721,722,737,738,753],"figcaption",{"className":687},[688],"tikz-cap","A small DAG of course prerequisites where an edge ",[427,691,693],{"className":692},[430],[427,694,696],{"className":695,"ariaHidden":435},[434],[427,697,699,702],{"className":698},[439],[427,700],{"className":701,"style":444},[443],[427,703,515],{"className":704},[448,449]," to ",[427,707,709],{"className":708},[430],[427,710,712],{"className":711,"ariaHidden":435},[434],[427,713,715,718],{"className":714},[439],[427,716],{"className":717,"style":444},[443],[427,719,539],{"className":720,"style":538},[448,449]," means ",[427,723,725],{"className":724},[430],[427,726,728],{"className":727,"ariaHidden":435},[434],[427,729,731,734],{"className":730},[439],[427,732],{"className":733,"style":444},[443],[427,735,515],{"className":736},[448,449]," precedes ",[427,739,741],{"className":740},[430],[427,742,744],{"className":743,"ariaHidden":435},[434],[427,745,747,750],{"className":746},[439],[427,748],{"className":749,"style":444},[443],[427,751,539],{"className":752,"style":538},[448,449],".",[409,755,757],{"id":756},"topological-order","Topological order",[414,759,760],{"type":416},[381,761,762,765,766,829,830,860,861,876,877,753],{},[390,763,764],{},"Definition (Topological order)."," A topological order of a DAG ",[427,767,769],{"className":768},[430],[427,770,772,793],{"className":771,"ariaHidden":435},[434],[427,773,775,779,783,786,790],{"className":774},[439],[427,776],{"className":777,"style":778},[443],"height:0.6833em;",[427,780,782],{"className":781},[448,449],"G",[427,784],{"className":785,"style":520},[519],[427,787,789],{"className":788},[524],"=",[427,791],{"className":792,"style":520},[519],[427,794,796,800,805,810,815,819,824],{"className":795},[439],[427,797],{"className":798,"style":799},[443],"height:1em;vertical-align:-0.25em;",[427,801,804],{"className":802},[803],"mopen","(",[427,806,809],{"className":807,"style":808},[448,449],"margin-right:0.2222em;","V",[427,811,814],{"className":812},[813],"mpunct",",",[427,816],{"className":817,"style":818},[519],"margin-right:0.1667em;",[427,820,823],{"className":821,"style":822},[448,449],"margin-right:0.0576em;","E",[427,825,828],{"className":826},[827],"mclose",")"," is a linear ordering of its\nvertices such that for every edge ",[427,831,833],{"className":832},[430],[427,834,836],{"className":835,"ariaHidden":435},[434],[427,837,839,842,845,848,851,854,857],{"className":838},[439],[427,840],{"className":841,"style":799},[443],[427,843,804],{"className":844},[803],[427,846,515],{"className":847},[448,449],[427,849,814],{"className":850},[813],[427,852],{"className":853,"style":818},[519],[427,855,539],{"className":856,"style":538},[448,449],[427,858,828],{"className":859},[827],", vertex ",[427,862,864],{"className":863},[430],[427,865,867],{"className":866,"ariaHidden":435},[434],[427,868,870,873],{"className":869},[439],[427,871],{"className":872,"style":444},[443],[427,874,515],{"className":875},[448,449]," appears before ",[427,878,880],{"className":879},[430],[427,881,883],{"className":882,"ariaHidden":435},[434],[427,884,886,889],{"className":885},[439],[427,887],{"className":888,"style":444},[443],[427,890,539],{"className":891,"style":538},[448,449],[381,893,894,895,898,899,954],{},"Picture all the vertices pinned along a horizontal line so that ",[385,896,897],{},"every"," edge\npoints rightward. The DAG above admits the order ",[427,900,902],{"className":901},[430],[427,903,905],{"className":904,"ariaHidden":435},[434],[427,906,908,912,915,918,921,924,927,930,934,937,940,944,947,950],{"className":907},[439],[427,909],{"className":910,"style":911},[443],"height:0.8889em;vertical-align:-0.1944em;",[427,913,404],{"className":914},[448,449],[427,916,814],{"className":917},[813],[427,919],{"className":920,"style":818},[519],[427,922,467],{"className":923},[448,449],[427,925,814],{"className":926},[813],[427,928],{"className":929,"style":818},[519],[427,931,933],{"className":932},[448,449],"d",[427,935,814],{"className":936},[813],[427,938],{"className":939,"style":818},[519],[427,941,943],{"className":942},[448,449],"e",[427,945,814],{"className":946},[813],[427,948],{"className":949,"style":818},[519],[427,951,953],{"className":952},[448,449],"c",", and you can\ncheck that each of its six edges goes left to right:",[576,956,958,1052],{"className":957},[579,580],[582,959,963],{"xmlns":584,"width":960,"height":961,"viewBox":962},"379.306","113.891","-75 -75 284.480 85.418",[589,964,965,968,974,977,984,987,994,997,1004,1007,1014,1017,1021,1024,1027,1030,1033,1036,1039,1042,1045,1048],{"stroke":591,"style":592},[594,966],{"fill":596,"d":967},"M-45.975-19.498c0-6.285-5.095-11.38-11.38-11.38s-11.382 5.095-11.382 11.38S-63.64-8.117-57.356-8.117s11.381-5.095 11.381-11.38Zm-11.38 0",[589,969,970],{"transform":600},[594,971],{"d":972,"fill":591,"stroke":591,"className":973,"style":606},"M-55.734-19.397Q-56.130-19.397-56.416-19.601Q-56.701-19.806-56.848-20.140Q-56.996-20.474-56.996-20.865Q-56.996-21.300-56.822-21.761Q-56.648-22.223-56.336-22.614Q-56.024-23.005-55.614-23.240Q-55.203-23.475-54.763-23.475Q-54.495-23.475-54.278-23.337Q-54.060-23.198-53.928-22.952Q-53.889-23.102-53.781-23.198Q-53.673-23.295-53.533-23.295Q-53.410-23.295-53.326-23.222Q-53.243-23.150-53.243-23.027Q-53.243-22.974-53.252-22.943L-53.871-20.452Q-53.928-20.254-53.928-20.056Q-53.928-19.661-53.665-19.661Q-53.379-19.661-53.245-19.984Q-53.111-20.307-52.992-20.812Q-52.983-20.843-52.959-20.867Q-52.935-20.891-52.900-20.891L-52.794-20.891Q-52.746-20.891-52.724-20.858Q-52.702-20.825-52.702-20.777Q-52.816-20.346-52.907-20.093Q-52.997-19.841-53.190-19.619Q-53.383-19.397-53.682-19.397Q-53.990-19.397-54.238-19.568Q-54.486-19.740-54.557-20.030Q-54.812-19.744-55.108-19.571Q-55.405-19.397-55.734-19.397M-55.717-19.661Q-55.387-19.661-55.077-19.902Q-54.768-20.144-54.557-20.460Q-54.548-20.469-54.548-20.487L-54.051-22.451Q-54.108-22.768-54.300-22.992Q-54.491-23.216-54.781-23.216Q-55.150-23.216-55.449-22.897Q-55.748-22.579-55.915-22.170Q-56.051-21.823-56.176-21.313Q-56.301-20.803-56.301-20.478Q-56.301-20.153-56.163-19.907Q-56.024-19.661-55.717-19.661",[605],[594,975],{"fill":596,"d":976},"M17.022-19.498c0-6.285-5.096-11.38-11.382-11.38s-11.38 5.095-11.38 11.38S-.646-8.117 5.64-8.117s11.382-5.095 11.382-11.38Zm-11.382 0",[589,978,980],{"transform":979},"translate(61.014 3.125)",[594,981],{"d":982,"fill":591,"stroke":591,"className":983,"style":606},"M-55.734-19.397Q-56.310-19.397-56.631-19.828Q-56.952-20.258-56.952-20.838Q-56.952-21.243-56.868-21.471L-55.989-24.969Q-55.954-25.119-55.954-25.193Q-55.954-25.330-56.521-25.330Q-56.618-25.330-56.618-25.448Q-56.618-25.505-56.587-25.576Q-56.556-25.646-56.490-25.646L-55.269-25.743Q-55.216-25.743-55.183-25.714Q-55.150-25.686-55.150-25.637L-55.150-25.602L-55.809-22.992Q-55.286-23.475-54.763-23.475Q-54.377-23.475-54.086-23.271Q-53.796-23.066-53.649-22.732Q-53.502-22.398-53.502-22.007Q-53.502-21.423-53.805-20.814Q-54.108-20.206-54.629-19.801Q-55.150-19.397-55.734-19.397M-55.717-19.661Q-55.348-19.661-55.044-19.984Q-54.741-20.307-54.583-20.702Q-54.438-21.058-54.317-21.566Q-54.196-22.073-54.196-22.394Q-54.196-22.719-54.341-22.967Q-54.486-23.216-54.781-23.216Q-55.383-23.216-55.954-22.416L-56.196-21.423Q-56.341-20.799-56.341-20.535Q-56.341-20.192-56.189-19.926Q-56.038-19.661-55.717-19.661",[605],[594,985],{"fill":596,"d":986},"M80.018-19.498c0-6.285-5.096-11.38-11.382-11.38s-11.38 5.095-11.38 11.38S62.35-8.117 68.635-8.117s11.382-5.095 11.382-11.38Zm-11.382 0",[589,988,990],{"transform":989},"translate(123.596 3.125)",[594,991],{"d":992,"fill":591,"stroke":591,"className":993,"style":606},"M-55.734-19.397Q-56.130-19.397-56.416-19.601Q-56.701-19.806-56.848-20.140Q-56.996-20.474-56.996-20.865Q-56.996-21.300-56.822-21.761Q-56.648-22.223-56.336-22.614Q-56.024-23.005-55.614-23.240Q-55.203-23.475-54.763-23.475Q-54.495-23.475-54.278-23.337Q-54.060-23.198-53.928-22.952L-53.423-24.969Q-53.388-25.119-53.388-25.193Q-53.388-25.330-53.955-25.330Q-54.051-25.330-54.051-25.448Q-54.051-25.505-54.021-25.576Q-53.990-25.646-53.928-25.646L-52.702-25.743Q-52.649-25.743-52.619-25.714Q-52.588-25.686-52.588-25.637L-52.588-25.602L-53.871-20.452Q-53.871-20.394-53.900-20.263Q-53.928-20.131-53.928-20.056Q-53.928-19.661-53.665-19.661Q-53.379-19.661-53.245-19.984Q-53.111-20.307-52.992-20.812Q-52.983-20.843-52.959-20.867Q-52.935-20.891-52.900-20.891L-52.794-20.891Q-52.746-20.891-52.724-20.858Q-52.702-20.825-52.702-20.777Q-52.816-20.346-52.907-20.093Q-52.997-19.841-53.190-19.619Q-53.383-19.397-53.682-19.397Q-53.990-19.397-54.238-19.568Q-54.486-19.740-54.557-20.030Q-54.812-19.744-55.108-19.571Q-55.405-19.397-55.734-19.397M-55.717-19.661Q-55.387-19.661-55.077-19.902Q-54.768-20.144-54.557-20.460Q-54.548-20.469-54.548-20.496L-54.051-22.451Q-54.108-22.768-54.300-22.992Q-54.491-23.216-54.781-23.216Q-55.150-23.216-55.449-22.897Q-55.748-22.579-55.915-22.170Q-56.051-21.823-56.176-21.313Q-56.301-20.803-56.301-20.478Q-56.301-20.153-56.163-19.907Q-56.024-19.661-55.717-19.661",[605],[594,995],{"fill":596,"d":996},"M143.014-19.498c0-6.285-5.096-11.38-11.382-11.38s-11.38 5.095-11.38 11.38 5.095 11.381 11.38 11.381 11.382-5.095 11.382-11.38Zm-11.382 0",[589,998,1000],{"transform":999},"translate(186.838 1.937)",[594,1001],{"d":1002,"fill":591,"stroke":591,"className":1003,"style":606},"M-56.240-20.676Q-56.240-20.263-56.044-19.962Q-55.849-19.661-55.458-19.661Q-54.913-19.661-54.407-19.896Q-53.902-20.131-53.585-20.553Q-53.564-20.588-53.502-20.588Q-53.445-20.588-53.399-20.537Q-53.353-20.487-53.353-20.434Q-53.353-20.399-53.379-20.373Q-53.726-19.898-54.289-19.647Q-54.851-19.397-55.475-19.397Q-56.148-19.397-56.545-19.878Q-56.943-20.359-56.943-21.045Q-56.943-21.691-56.609-22.256Q-56.275-22.820-55.715-23.148Q-55.154-23.475-54.513-23.475Q-54.108-23.475-53.801-23.273Q-53.493-23.071-53.493-22.693Q-53.493-22.293-53.759-22.053Q-54.025-21.814-54.442-21.702Q-54.860-21.590-55.236-21.566Q-55.611-21.541-56.077-21.541L-56.112-21.541Q-56.240-20.979-56.240-20.676M-56.042-21.801Q-55.181-21.801-54.522-21.957Q-53.862-22.113-53.862-22.684Q-53.862-22.935-54.062-23.075Q-54.262-23.216-54.522-23.216Q-55.093-23.216-55.484-22.809Q-55.875-22.403-56.042-21.801",[605],[594,1005],{"fill":596,"d":1006},"M206.01-19.498c0-6.285-5.096-11.38-11.382-11.38s-11.38 5.095-11.38 11.38 5.095 11.381 11.38 11.381 11.382-5.095 11.382-11.38Zm-11.382 0",[589,1008,1010],{"transform":1009},"translate(249.982 1.937)",[594,1011],{"d":1012,"fill":591,"stroke":591,"className":1013,"style":606},"M-56.266-20.605Q-56.266-20.210-56.053-19.935Q-55.840-19.661-55.458-19.661Q-54.913-19.661-54.407-19.896Q-53.902-20.131-53.585-20.553Q-53.564-20.588-53.502-20.588Q-53.445-20.588-53.399-20.537Q-53.353-20.487-53.353-20.434Q-53.353-20.399-53.379-20.373Q-53.726-19.898-54.289-19.647Q-54.851-19.397-55.475-19.397Q-55.906-19.397-56.255-19.599Q-56.605-19.801-56.796-20.157Q-56.987-20.513-56.987-20.939Q-56.987-21.401-56.785-21.858Q-56.583-22.315-56.227-22.684Q-55.871-23.053-55.427-23.264Q-54.983-23.475-54.513-23.475Q-54.245-23.475-53.996-23.394Q-53.748-23.312-53.581-23.134Q-53.414-22.956-53.414-22.693Q-53.414-22.456-53.564-22.278Q-53.713-22.100-53.946-22.100Q-54.086-22.100-54.192-22.194Q-54.297-22.289-54.297-22.434Q-54.297-22.636-54.150-22.790Q-54.003-22.943-53.801-22.943Q-53.906-23.084-54.111-23.150Q-54.315-23.216-54.522-23.216Q-55.058-23.216-55.455-22.787Q-55.853-22.359-56.060-21.739Q-56.266-21.120-56.266-20.605",[605],[594,1015],{"fill":596,"d":1016},"M-47.326-25.288c14.5-8.372 28.436-8.372 40.274-1.538",[594,1018],{"d":1019,"style":1020},"m-4.882-25.573-2.43-2.962.346 1.76-1.696.58Z","stroke-width:.399992",[594,1022],{"fill":596,"d":1023},"M-47.326-13.707C-11.55 6.948 22.83 6.948 55.944-12.17",[594,1025],{"d":1026,"style":1020},"m58.114-13.422-3.78.622 1.696.58-.345 1.76Z",[594,1028],{"fill":596,"d":1029},"M15.67-25.288c35.776-20.655 70.157-20.655 103.27-1.538",[594,1031],{"d":1032,"style":1020},"m121.11-25.573-2.43-2.962.346 1.76-1.696.58Z",[594,1034],{"fill":596,"d":1035},"M78.666-13.707c14.5 8.372 28.436 8.372 40.274 1.537",[594,1037],{"d":1038,"style":1020},"m121.11-13.422-3.78.622 1.696.58-.345 1.76Z",[594,1040],{"fill":596,"d":1041},"M141.662-25.288c14.5-8.372 28.436-8.372 40.274-1.538",[594,1043],{"d":1044,"style":1020},"m184.106-25.573-2.43-2.962.346 1.76-1.696.58Z",[594,1046],{"fill":596,"d":1047},"M14.247-27.247c49.78-44.823 121.995-44.823 169.49-2.057",[594,1049],{"d":1050,"style":1051},"m185.6-27.628-1.76-3.402-.029 1.792-1.78.216Z","stroke-width:.399988",[685,1053,1055,1056,1107],{"className":1054},[688],"The DAG laid out in topological order ",[427,1057,1059],{"className":1058},[430],[427,1060,1062],{"className":1061,"ariaHidden":435},[434],[427,1063,1065,1068,1071,1074,1077,1080,1083,1086,1089,1092,1095,1098,1101,1104],{"className":1064},[439],[427,1066],{"className":1067,"style":911},[443],[427,1069,404],{"className":1070},[448,449],[427,1072,814],{"className":1073},[813],[427,1075],{"className":1076,"style":818},[519],[427,1078,467],{"className":1079},[448,449],[427,1081,814],{"className":1082},[813],[427,1084],{"className":1085,"style":818},[519],[427,1087,933],{"className":1088},[448,449],[427,1090,814],{"className":1091},[813],[427,1093],{"className":1094,"style":818},[519],[427,1096,943],{"className":1097},[448,449],[427,1099,814],{"className":1100},[813],[427,1102],{"className":1103,"style":818},[519],[427,1105,953],{"className":1106},[448,449]," with every edge pointing rightward.",[381,1109,1110,1111,1114,1115,1166],{},"Topological orders are usually ",[385,1112,1113],{},"not"," unique; ",[427,1116,1118],{"className":1117},[430],[427,1119,1121],{"className":1120,"ariaHidden":435},[434],[427,1122,1124,1127,1130,1133,1136,1139,1142,1145,1148,1151,1154,1157,1160,1163],{"className":1123},[439],[427,1125],{"className":1126,"style":911},[443],[427,1128,404],{"className":1129},[448,449],[427,1131,814],{"className":1132},[813],[427,1134],{"className":1135,"style":818},[519],[427,1137,933],{"className":1138},[448,449],[427,1140,814],{"className":1141},[813],[427,1143],{"className":1144,"style":818},[519],[427,1146,467],{"className":1147},[448,449],[427,1149,814],{"className":1150},[813],[427,1152],{"className":1153,"style":818},[519],[427,1155,943],{"className":1156},[448,449],[427,1158,814],{"className":1159},[813],[427,1161],{"className":1162,"style":818},[519],[427,1164,953],{"className":1165},[448,449]," works equally well.\nTwo facts tie ordering to acyclicity:",[414,1168,1170],{"type":1169},"theorem",[381,1171,1172,1175],{},[390,1173,1174],{},"Theorem."," A directed graph has a topological order if and only if it is acyclic.",[381,1177,1178,1179,1182],{},"The forward direction is immediate: a directed cycle could never be laid out\nwith all edges pointing the same way. The converse, that every DAG ",[385,1180,1181],{},"has"," such an\norder, is what the algorithm below constructs.",[409,1184,1186],{"id":1185},"topological-sort-via-dfs-finish-times","Topological sort via DFS finish times",[381,1188,1189,1190],{},"The key observation, drawn out by all three texts, links acyclicity to\ndepth-first search's edge classification from the previous lesson:",[1191,1192,1193],"sup",{},[404,1194,1199],{"href":1195,"ariaDescribedBy":1196,"dataFootnoteRef":376,"id":1198},"#user-content-fn-erickson-back",[1197],"footnote-label","user-content-fnref-erickson-back","1",[414,1201,1203],{"type":1202},"lemma",[381,1204,1205,1208,1209,753],{},[390,1206,1207],{},"Lemma."," A directed graph is acyclic if and only if a depth-first search of\nit produces ",[390,1210,1211],{},"no back edges",[381,1213,1214,1215,1245,1246,1261,1262,1277,1278,1293,1294,1309,1310,1358],{},"A back edge ",[427,1216,1218],{"className":1217},[430],[427,1219,1221],{"className":1220,"ariaHidden":435},[434],[427,1222,1224,1227,1230,1233,1236,1239,1242],{"className":1223},[439],[427,1225],{"className":1226,"style":799},[443],[427,1228,804],{"className":1229},[803],[427,1231,515],{"className":1232},[448,449],[427,1234,814],{"className":1235},[813],[427,1237],{"className":1238,"style":818},[519],[427,1240,539],{"className":1241,"style":538},[448,449],[427,1243,828],{"className":1244},[827]," runs from ",[427,1247,1249],{"className":1248},[430],[427,1250,1252],{"className":1251,"ariaHidden":435},[434],[427,1253,1255,1258],{"className":1254},[439],[427,1256],{"className":1257,"style":444},[443],[427,1259,515],{"className":1260},[448,449]," to a gray ancestor ",[427,1263,1265],{"className":1264},[430],[427,1266,1268],{"className":1267,"ariaHidden":435},[434],[427,1269,1271,1274],{"className":1270},[439],[427,1272],{"className":1273,"style":444},[443],[427,1275,539],{"className":1276,"style":538},[448,449],"; the tree path from\n",[427,1279,1281],{"className":1280},[430],[427,1282,1284],{"className":1283,"ariaHidden":435},[434],[427,1285,1287,1290],{"className":1286},[439],[427,1288],{"className":1289,"style":444},[443],[427,1291,539],{"className":1292,"style":538},[448,449]," down to ",[427,1295,1297],{"className":1296},[430],[427,1298,1300],{"className":1299,"ariaHidden":435},[434],[427,1301,1303,1306],{"className":1302},[439],[427,1304],{"className":1305,"style":444},[443],[427,1307,515],{"className":1308},[448,449]," together with that edge forms a cycle. Conversely, in any cycle\nthe first vertex discovered becomes a gray ancestor of the others, so the edge\nclosing the cycle is a back edge. Since DAGs have no back edges, every edge of a\nDAG is a tree, forward, or cross edge, and for all three of those, the finish\ntimes obey ",[427,1311,1313],{"className":1312},[430],[427,1314,1316,1343],{"className":1315,"ariaHidden":435},[434],[427,1317,1319,1322,1325,1328,1333,1336,1340],{"className":1318},[439],[427,1320],{"className":1321,"style":911},[443],[427,1323,515],{"className":1324},[448,449],[427,1326,753],{"className":1327},[448],[427,1329,1332],{"className":1330,"style":1331},[448,449],"margin-right:0.1076em;","f",[427,1334],{"className":1335,"style":520},[519],[427,1337,1339],{"className":1338},[524],">",[427,1341],{"className":1342,"style":520},[519],[427,1344,1346,1349,1352,1355],{"className":1345},[439],[427,1347],{"className":1348,"style":911},[443],[427,1350,539],{"className":1351,"style":538},[448,449],[427,1353,753],{"className":1354},[448],[427,1356,1332],{"className":1357,"style":1331},[448,449],". That single inequality is the whole trick:",[414,1360,1361],{"type":1169},[381,1362,1363,1365,1366,1396,1397,1442,1443,1446],{},[390,1364,1174],{}," In a DAG, for every edge ",[427,1367,1369],{"className":1368},[430],[427,1370,1372],{"className":1371,"ariaHidden":435},[434],[427,1373,1375,1378,1381,1384,1387,1390,1393],{"className":1374},[439],[427,1376],{"className":1377,"style":799},[443],[427,1379,804],{"className":1380},[803],[427,1382,515],{"className":1383},[448,449],[427,1385,814],{"className":1386},[813],[427,1388],{"className":1389,"style":818},[519],[427,1391,539],{"className":1392,"style":538},[448,449],[427,1394,828],{"className":1395},[827]," we have ",[427,1398,1400],{"className":1399},[430],[427,1401,1403,1427],{"className":1402,"ariaHidden":435},[434],[427,1404,1406,1409,1412,1415,1418,1421,1424],{"className":1405},[439],[427,1407],{"className":1408,"style":911},[443],[427,1410,515],{"className":1411},[448,449],[427,1413,753],{"className":1414},[448],[427,1416,1332],{"className":1417,"style":1331},[448,449],[427,1419],{"className":1420,"style":520},[519],[427,1422,1339],{"className":1423},[524],[427,1425],{"className":1426,"style":520},[519],[427,1428,1430,1433,1436,1439],{"className":1429},[439],[427,1431],{"className":1432,"style":911},[443],[427,1434,539],{"className":1435,"style":538},[448,449],[427,1437,753],{"className":1438},[448],[427,1440,1332],{"className":1441,"style":1331},[448,449],". Hence\nlisting vertices in order of ",[385,1444,1445],{},"decreasing finish time"," yields a topological\norder.",[381,1448,1449,1450],{},"So we run DFS, and as each vertex finishes we push it onto the front of a list.\nWhen DFS completes, the list reads off a valid topological order.",[1191,1451,1452],{},[404,1453,1457],{"href":1454,"ariaDescribedBy":1455,"dataFootnoteRef":376,"id":1456},"#user-content-fn-clrs-topo",[1197],"user-content-fnref-clrs-topo","2",[1459,1460,1464],"pre",{"className":1461,"code":1462,"language":1463,"meta":376,"style":376},"language-algorithm shiki shiki-themes Vesper Light - Orange Boost (Quick Open Adjusted) vesper","caption: $\\textsc{Topological-Sort}(G)$ — order a DAG by DFS finish times\nnumber: 1\n$L \\gets$ empty linked list\nforeach vertex $u \\in V$ do\n  $u.color \\gets \\text{white}$\nforeach vertex $u \\in V$ do\n  if $u.color = \\text{white}$ then\n    call $\\textsc{TS-Visit}(G, u, L)$\nreturn $L$\n","algorithm",[1465,1466,1467,1473,1478,1483,1488,1493,1497,1502,1507],"code",{"__ignoreMap":376},[427,1468,1470],{"class":1469,"line":6},"line",[427,1471,1472],{},"caption: $\\textsc{Topological-Sort}(G)$ — order a DAG by DFS finish times\n",[427,1474,1475],{"class":1469,"line":18},[427,1476,1477],{},"number: 1\n",[427,1479,1480],{"class":1469,"line":24},[427,1481,1482],{},"$L \\gets$ empty linked list\n",[427,1484,1485],{"class":1469,"line":73},[427,1486,1487],{},"foreach vertex $u \\in V$ do\n",[427,1489,1490],{"class":1469,"line":102},[427,1491,1492],{},"  $u.color \\gets \\text{white}$\n",[427,1494,1495],{"class":1469,"line":108},[427,1496,1487],{},[427,1498,1499],{"class":1469,"line":116},[427,1500,1501],{},"  if $u.color = \\text{white}$ then\n",[427,1503,1504],{"class":1469,"line":196},[427,1505,1506],{},"    call $\\textsc{TS-Visit}(G, u, L)$\n",[427,1508,1509],{"class":1469,"line":202},[427,1510,1511],{},"return $L$\n",[1459,1513,1515],{"className":1461,"code":1514,"language":1463,"meta":376,"style":376},"caption: $\\textsc{TS-Visit}(G, u, L)$ — finish $u$, then prepend it to $L$\nnumber: 2\n$u.color \\gets \\text{gray}$\nforeach $v$ adjacent to $u$ do\n  if $v.color = \\text{white}$ then\n    call $\\textsc{TS-Visit}(G, v, L)$\n$u.color \\gets \\text{black}$\nprepend $u$ to the front of $L$ \u002F\u002F smaller finish goes later\n",[1465,1516,1517,1522,1527,1532,1537,1542,1547,1552],{"__ignoreMap":376},[427,1518,1519],{"class":1469,"line":6},[427,1520,1521],{},"caption: $\\textsc{TS-Visit}(G, u, L)$ — finish $u$, then prepend it to $L$\n",[427,1523,1524],{"class":1469,"line":18},[427,1525,1526],{},"number: 2\n",[427,1528,1529],{"class":1469,"line":24},[427,1530,1531],{},"$u.color \\gets \\text{gray}$\n",[427,1533,1534],{"class":1469,"line":73},[427,1535,1536],{},"foreach $v$ adjacent to $u$ do\n",[427,1538,1539],{"class":1469,"line":102},[427,1540,1541],{},"  if $v.color = \\text{white}$ then\n",[427,1543,1544],{"class":1469,"line":108},[427,1545,1546],{},"    call $\\textsc{TS-Visit}(G, v, L)$\n",[427,1548,1549],{"class":1469,"line":116},[427,1550,1551],{},"$u.color \\gets \\text{black}$\n",[427,1553,1554],{"class":1469,"line":196},[427,1555,1556],{},"prepend $u$ to the front of $L$ \u002F\u002F smaller finish goes later\n",[381,1558,1559,1562,1563,1593,1594,1609,1610,1625,1626,1641,1642,1687,1688,1703,1704,1749,1750,1765,1766,1781,1782,1797,1798,1813,1814,1830],{},[390,1560,1561],{},"Correctness."," Consider any edge ",[427,1564,1566],{"className":1565},[430],[427,1567,1569],{"className":1568,"ariaHidden":435},[434],[427,1570,1572,1575,1578,1581,1584,1587,1590],{"className":1571},[439],[427,1573],{"className":1574,"style":799},[443],[427,1576,804],{"className":1577},[803],[427,1579,515],{"className":1580},[448,449],[427,1582,814],{"className":1583},[813],[427,1585],{"className":1586,"style":818},[519],[427,1588,539],{"className":1589,"style":538},[448,449],[427,1591,828],{"className":1592},[827],". When DFS explores it, ",[427,1595,1597],{"className":1596},[430],[427,1598,1600],{"className":1599,"ariaHidden":435},[434],[427,1601,1603,1606],{"className":1602},[439],[427,1604],{"className":1605,"style":444},[443],[427,1607,539],{"className":1608,"style":538},[448,449]," is white,\ngray, or black. It cannot be gray — that would be a back edge, impossible in a\nDAG. If ",[427,1611,1613],{"className":1612},[430],[427,1614,1616],{"className":1615,"ariaHidden":435},[434],[427,1617,1619,1622],{"className":1618},[439],[427,1620],{"className":1621,"style":444},[443],[427,1623,539],{"className":1624,"style":538},[448,449]," is white, it becomes a descendant of ",[427,1627,1629],{"className":1628},[430],[427,1630,1632],{"className":1631,"ariaHidden":435},[434],[427,1633,1635,1638],{"className":1634},[439],[427,1636],{"className":1637,"style":444},[443],[427,1639,515],{"className":1640},[448,449]," and finishes first, so\n",[427,1643,1645],{"className":1644},[430],[427,1646,1648,1672],{"className":1647,"ariaHidden":435},[434],[427,1649,1651,1654,1657,1660,1663,1666,1669],{"className":1650},[439],[427,1652],{"className":1653,"style":911},[443],[427,1655,515],{"className":1656},[448,449],[427,1658,753],{"className":1659},[448],[427,1661,1332],{"className":1662,"style":1331},[448,449],[427,1664],{"className":1665,"style":520},[519],[427,1667,1339],{"className":1668},[524],[427,1670],{"className":1671,"style":520},[519],[427,1673,1675,1678,1681,1684],{"className":1674},[439],[427,1676],{"className":1677,"style":911},[443],[427,1679,539],{"className":1680,"style":538},[448,449],[427,1682,753],{"className":1683},[448],[427,1685,1332],{"className":1686,"style":1331},[448,449],". If ",[427,1689,1691],{"className":1690},[430],[427,1692,1694],{"className":1693,"ariaHidden":435},[434],[427,1695,1697,1700],{"className":1696},[439],[427,1698],{"className":1699,"style":444},[443],[427,1701,539],{"className":1702,"style":538},[448,449]," is black, it already finished, so again ",[427,1705,1707],{"className":1706},[430],[427,1708,1710,1734],{"className":1709,"ariaHidden":435},[434],[427,1711,1713,1716,1719,1722,1725,1728,1731],{"className":1712},[439],[427,1714],{"className":1715,"style":911},[443],[427,1717,515],{"className":1718},[448,449],[427,1720,753],{"className":1721},[448],[427,1723,1332],{"className":1724,"style":1331},[448,449],[427,1726],{"className":1727,"style":520},[519],[427,1729,1339],{"className":1730},[524],[427,1732],{"className":1733,"style":520},[519],[427,1735,1737,1740,1743,1746],{"className":1736},[439],[427,1738],{"className":1739,"style":911},[443],[427,1741,539],{"className":1742,"style":538},[448,449],[427,1744,753],{"className":1745},[448],[427,1747,1332],{"className":1748,"style":1331},[448,449],". In\nevery case ",[427,1751,1753],{"className":1752},[430],[427,1754,1756],{"className":1755,"ariaHidden":435},[434],[427,1757,1759,1762],{"className":1758},[439],[427,1760],{"className":1761,"style":444},[443],[427,1763,515],{"className":1764},[448,449]," finishes after ",[427,1767,1769],{"className":1768},[430],[427,1770,1772],{"className":1771,"ariaHidden":435},[434],[427,1773,1775,1778],{"className":1774},[439],[427,1776],{"className":1777,"style":444},[443],[427,1779,539],{"className":1780,"style":538},[448,449],", so prepending on finish places ",[427,1783,1785],{"className":1784},[430],[427,1786,1788],{"className":1787,"ariaHidden":435},[434],[427,1789,1791,1794],{"className":1790},[439],[427,1792],{"className":1793,"style":444},[443],[427,1795,515],{"className":1796},[448,449]," before\n",[427,1799,1801],{"className":1800},[430],[427,1802,1804],{"className":1803,"ariaHidden":435},[434],[427,1805,1807,1810],{"className":1806},[439],[427,1808],{"className":1809,"style":444},[443],[427,1811,539],{"className":1812,"style":538},[448,449]," in ",[427,1815,1817],{"className":1816},[430],[427,1818,1820],{"className":1819,"ariaHidden":435},[434],[427,1821,1823,1826],{"className":1822},[439],[427,1824],{"className":1825,"style":778},[443],[427,1827,1829],{"className":1828},[448,449],"L",", the defining property of a topological order.",[381,1832,1833,1836,1837,1863,1864,1909,1910,753],{},[390,1834,1835],{},"Running time."," This is just DFS plus ",[427,1838,1840],{"className":1839},[430],[427,1841,1843],{"className":1842,"ariaHidden":435},[434],[427,1844,1846,1849,1854,1857,1860],{"className":1845},[439],[427,1847],{"className":1848,"style":799},[443],[427,1850,1853],{"className":1851,"style":1852},[448,449],"margin-right:0.0278em;","O",[427,1855,804],{"className":1856},[803],[427,1858,1199],{"className":1859},[448],[427,1861,828],{"className":1862},[827]," work per vertex to splice it into\nthe list, so it runs in ",[427,1865,1867],{"className":1866},[430],[427,1868,1870,1897],{"className":1869,"ariaHidden":435},[434],[427,1871,1873,1876,1880,1883,1886,1889,1894],{"className":1872},[439],[427,1874],{"className":1875,"style":799},[443],[427,1877,1879],{"className":1878},[448],"Θ",[427,1881,804],{"className":1882},[803],[427,1884,809],{"className":1885,"style":808},[448,449],[427,1887],{"className":1888,"style":808},[519],[427,1890,1893],{"className":1891},[1892],"mbin","+",[427,1895],{"className":1896,"style":808},[519],[427,1898,1900,1903,1906],{"className":1899},[439],[427,1901],{"className":1902,"style":799},[443],[427,1904,823],{"className":1905,"style":822},[448,449],[427,1907,828],{"className":1908},[827],", which is\n",[404,1911,1912],{"href":17},"linear",[381,1914,1915,1916,1931,1932,1947,1948,1951,1952,1967],{},"Concretely, run DFS on the prerequisite DAG from ",[427,1917,1919],{"className":1918},[430],[427,1920,1922],{"className":1921,"ariaHidden":435},[434],[427,1923,1925,1928],{"className":1924},[439],[427,1926],{"className":1927,"style":444},[443],[427,1929,404],{"className":1930},[448,449]," (ties alphabetical) and read\noff each vertex's finish time ",[427,1933,1935],{"className":1934},[430],[427,1936,1938],{"className":1937,"ariaHidden":435},[434],[427,1939,1941,1944],{"className":1940},[439],[427,1942],{"className":1943,"style":911},[443],[427,1945,1332],{"className":1946,"style":1331},[448,449],". Sorting the vertices by ",[385,1949,1950],{},"decreasing"," ",[427,1953,1955],{"className":1954},[430],[427,1956,1958],{"className":1957,"ariaHidden":435},[434],[427,1959,1961,1964],{"className":1960},[439],[427,1962],{"className":1963,"style":911},[443],[427,1965,1332],{"className":1966,"style":1331},[448,449]," drops\nthem straight into a valid topological order — and every edge, drawn below the\nsorted line, points rightward:",[576,1969,1971,2359],{"className":1970},[579,580],[582,1972,1976],{"xmlns":584,"width":1973,"height":1974,"viewBox":1975},"260.991","280.119","-75 -75 195.744 210.089",[589,1977,1978,1981,1988,1991,1998,2001,2008,2011,2018,2021,2028,2031,2034,2037,2040,2043,2046,2049,2052,2055,2058,2061,2064,2090,2111,2132,2153,2174,2221,2233,2243,2254,2263,2274,2283,2294,2303,2314,2323,2326,2329,2332,2335,2338,2341,2344,2347,2350,2353,2356],{"stroke":591,"style":592},[594,1979],{"fill":596,"d":1980},"M-19.3-45.909c0-6.285-5.095-11.38-11.38-11.38s-11.382 5.095-11.382 11.38 5.096 11.381 11.381 11.381S-19.3-39.623-19.3-45.908Zm-11.38 0",[589,1982,1984],{"transform":1983},"translate(-2.45 -37.896)",[594,1985],{"d":1986,"fill":591,"stroke":591,"className":1987,"style":606},"M-29.059-5.974Q-29.455-5.974-29.741-6.178Q-30.026-6.383-30.173-6.717Q-30.321-7.051-30.321-7.442Q-30.321-7.877-30.147-8.338Q-29.973-8.800-29.661-9.191Q-29.349-9.582-28.939-9.817Q-28.528-10.052-28.088-10.052Q-27.820-10.052-27.603-9.914Q-27.385-9.775-27.253-9.529Q-27.214-9.679-27.106-9.775Q-26.998-9.872-26.858-9.872Q-26.735-9.872-26.651-9.799Q-26.568-9.727-26.568-9.604Q-26.568-9.551-26.577-9.520L-27.196-7.029Q-27.253-6.831-27.253-6.633Q-27.253-6.238-26.990-6.238Q-26.704-6.238-26.570-6.561Q-26.436-6.884-26.317-7.389Q-26.308-7.420-26.284-7.444Q-26.260-7.468-26.225-7.468L-26.119-7.468Q-26.071-7.468-26.049-7.435Q-26.027-7.402-26.027-7.354Q-26.141-6.923-26.232-6.670Q-26.322-6.418-26.515-6.196Q-26.708-5.974-27.007-5.974Q-27.315-5.974-27.563-6.145Q-27.811-6.317-27.882-6.607Q-28.137-6.321-28.433-6.148Q-28.730-5.974-29.059-5.974M-29.042-6.238Q-28.712-6.238-28.402-6.479Q-28.093-6.721-27.882-7.037Q-27.873-7.046-27.873-7.064L-27.376-9.028Q-27.433-9.345-27.625-9.569Q-27.816-9.793-28.106-9.793Q-28.475-9.793-28.774-9.474Q-29.073-9.156-29.240-8.747Q-29.376-8.400-29.501-7.890Q-29.626-7.380-29.626-7.055Q-29.626-6.730-29.488-6.484Q-29.349-6.238-29.042-6.238",[605],[594,1989],{"fill":596,"d":1990},"M23.38-45.909c0-6.285-5.096-11.38-11.382-11.38S.618-52.195.618-45.91s5.095 11.381 11.38 11.381 11.381-5.095 11.381-11.38Zm-11.382 0",[589,1992,1994],{"transform":1993},"translate(40.697 -36.709)",[594,1995],{"d":1996,"fill":591,"stroke":591,"className":1997,"style":606},"M-29.059-5.974Q-29.635-5.974-29.956-6.405Q-30.277-6.835-30.277-7.415Q-30.277-7.820-30.193-8.048L-29.314-11.546Q-29.279-11.696-29.279-11.770Q-29.279-11.907-29.846-11.907Q-29.943-11.907-29.943-12.025Q-29.943-12.082-29.912-12.153Q-29.881-12.223-29.815-12.223L-28.594-12.320Q-28.541-12.320-28.508-12.291Q-28.475-12.262-28.475-12.214L-28.475-12.179L-29.134-9.569Q-28.611-10.052-28.088-10.052Q-27.702-10.052-27.411-9.848Q-27.121-9.643-26.974-9.309Q-26.827-8.975-26.827-8.584Q-26.827-8-27.130-7.391Q-27.433-6.783-27.954-6.378Q-28.475-5.974-29.059-5.974M-29.042-6.238Q-28.673-6.238-28.369-6.561Q-28.066-6.884-27.908-7.279Q-27.763-7.635-27.642-8.143Q-27.521-8.650-27.521-8.971Q-27.521-9.296-27.666-9.544Q-27.811-9.793-28.106-9.793Q-28.708-9.793-29.279-8.993L-29.521-8Q-29.666-7.376-29.666-7.112Q-29.666-6.769-29.514-6.503Q-29.363-6.238-29.042-6.238",[605],[594,1999],{"fill":596,"d":2000},"M66.059-45.909c0-6.285-5.096-11.38-11.382-11.38s-11.38 5.095-11.38 11.38 5.095 11.381 11.38 11.381 11.382-5.095 11.382-11.38Zm-11.382 0",[589,2002,2004],{"transform":2003},"translate(83.356 -37.896)",[594,2005],{"d":2006,"fill":591,"stroke":591,"className":2007,"style":606},"M-29.591-7.182Q-29.591-6.787-29.378-6.512Q-29.165-6.238-28.783-6.238Q-28.238-6.238-27.732-6.473Q-27.227-6.708-26.910-7.130Q-26.889-7.165-26.827-7.165Q-26.770-7.165-26.724-7.114Q-26.678-7.064-26.678-7.011Q-26.678-6.976-26.704-6.950Q-27.051-6.475-27.614-6.224Q-28.176-5.974-28.800-5.974Q-29.231-5.974-29.580-6.176Q-29.930-6.378-30.121-6.734Q-30.312-7.090-30.312-7.516Q-30.312-7.978-30.110-8.435Q-29.908-8.892-29.552-9.261Q-29.196-9.630-28.752-9.841Q-28.308-10.052-27.838-10.052Q-27.570-10.052-27.321-9.971Q-27.073-9.889-26.906-9.711Q-26.739-9.533-26.739-9.270Q-26.739-9.033-26.889-8.855Q-27.038-8.677-27.271-8.677Q-27.411-8.677-27.517-8.771Q-27.622-8.866-27.622-9.011Q-27.622-9.213-27.475-9.367Q-27.328-9.520-27.126-9.520Q-27.231-9.661-27.436-9.727Q-27.640-9.793-27.847-9.793Q-28.383-9.793-28.780-9.364Q-29.178-8.936-29.385-8.316Q-29.591-7.697-29.591-7.182",[605],[594,2009],{"fill":596,"d":2010},"M-19.3-6.075c0-6.286-5.095-11.381-11.38-11.381s-11.382 5.095-11.382 11.381S-36.966 5.306-30.68 5.306-19.3.211-19.3-6.075Zm-11.38 0",[589,2012,2014],{"transform":2013},"translate(-2.396 3.125)",[594,2015],{"d":2016,"fill":591,"stroke":591,"className":2017,"style":606},"M-29.059-5.974Q-29.455-5.974-29.741-6.178Q-30.026-6.383-30.173-6.717Q-30.321-7.051-30.321-7.442Q-30.321-7.877-30.147-8.338Q-29.973-8.800-29.661-9.191Q-29.349-9.582-28.939-9.817Q-28.528-10.052-28.088-10.052Q-27.820-10.052-27.603-9.914Q-27.385-9.775-27.253-9.529L-26.748-11.546Q-26.713-11.696-26.713-11.770Q-26.713-11.907-27.280-11.907Q-27.376-11.907-27.376-12.025Q-27.376-12.082-27.346-12.153Q-27.315-12.223-27.253-12.223L-26.027-12.320Q-25.974-12.320-25.944-12.291Q-25.913-12.262-25.913-12.214L-25.913-12.179L-27.196-7.029Q-27.196-6.971-27.225-6.840Q-27.253-6.708-27.253-6.633Q-27.253-6.238-26.990-6.238Q-26.704-6.238-26.570-6.561Q-26.436-6.884-26.317-7.389Q-26.308-7.420-26.284-7.444Q-26.260-7.468-26.225-7.468L-26.119-7.468Q-26.071-7.468-26.049-7.435Q-26.027-7.402-26.027-7.354Q-26.141-6.923-26.232-6.670Q-26.322-6.418-26.515-6.196Q-26.708-5.974-27.007-5.974Q-27.315-5.974-27.563-6.145Q-27.811-6.317-27.882-6.607Q-28.137-6.321-28.433-6.148Q-28.730-5.974-29.059-5.974M-29.042-6.238Q-28.712-6.238-28.402-6.479Q-28.093-6.721-27.882-7.037Q-27.873-7.046-27.873-7.073L-27.376-9.028Q-27.433-9.345-27.625-9.569Q-27.816-9.793-28.106-9.793Q-28.475-9.793-28.774-9.474Q-29.073-9.156-29.240-8.747Q-29.376-8.400-29.501-7.890Q-29.626-7.380-29.626-7.055Q-29.626-6.730-29.488-6.484Q-29.349-6.238-29.042-6.238",[605],[594,2019],{"fill":596,"d":2020},"M23.38-6.075c0-6.286-5.096-11.381-11.382-11.381S.618-12.361.618-6.075 5.712 5.306 11.997 5.306 23.38.211 23.38-6.075Zm-11.382 0",[589,2022,2024],{"transform":2023},"translate(40.529 1.937)",[594,2025],{"d":2026,"fill":591,"stroke":591,"className":2027,"style":606},"M-29.565-7.253Q-29.565-6.840-29.369-6.539Q-29.174-6.238-28.783-6.238Q-28.238-6.238-27.732-6.473Q-27.227-6.708-26.910-7.130Q-26.889-7.165-26.827-7.165Q-26.770-7.165-26.724-7.114Q-26.678-7.064-26.678-7.011Q-26.678-6.976-26.704-6.950Q-27.051-6.475-27.614-6.224Q-28.176-5.974-28.800-5.974Q-29.473-5.974-29.870-6.455Q-30.268-6.936-30.268-7.622Q-30.268-8.268-29.934-8.833Q-29.600-9.397-29.040-9.725Q-28.479-10.052-27.838-10.052Q-27.433-10.052-27.126-9.850Q-26.818-9.648-26.818-9.270Q-26.818-8.870-27.084-8.630Q-27.350-8.391-27.767-8.279Q-28.185-8.167-28.561-8.143Q-28.936-8.118-29.402-8.118L-29.437-8.118Q-29.565-7.556-29.565-7.253M-29.367-8.378Q-28.506-8.378-27.847-8.534Q-27.187-8.690-27.187-9.261Q-27.187-9.512-27.387-9.652Q-27.587-9.793-27.847-9.793Q-28.418-9.793-28.809-9.386Q-29.200-8.980-29.367-8.378",[605],[594,2029],{"fill":596,"d":2030},"M-19.1-45.909h16.442",[594,2032],{"d":2033},"m-.152-45.909-3.585-1.35 1.179 1.35-1.179 1.351Z",[594,2035],{"fill":596,"d":2036},"M23.58-45.909H40.02",[594,2038],{"d":2039},"m42.527-45.909-3.585-1.35 1.179 1.35-1.179 1.351Z",[594,2041],{"fill":596,"d":2042},"M-30.68-34.328v13.597",[594,2044],{"d":2045},"m-30.68-18.226 1.35-3.584-1.35 1.179-1.352-1.18Z",[594,2047],{"fill":596,"d":2048},"M-19.1-6.075h16.442",[594,2050],{"d":2051},"m-.152-6.075-3.585-1.35 1.179 1.35-1.179 1.35Z",[594,2053],{"fill":596,"d":2054},"m20.465-13.977 23.498-21.932",[594,2056],{"d":2057,"style":1020},"m45.795-37.618-3.542 1.458 1.783.183.06 1.792Z",[594,2059],{"fill":596,"d":2060},"M11.998-34.328v13.597",[594,2062],{"d":2063},"m11.998-18.226 1.351-3.584-1.35 1.179-1.351-1.18Z",[589,2065,2067],{"fill":2066,"stroke":2066},"var(--tk-accent)",[589,2068,2070,2078,2084],{"fill":2066,"stroke":596,"fontSize":2069},"7",[589,2071,2073],{"transform":2072},"translate(-9.398 -58)",[594,2074],{"d":2075,"fill":2066,"stroke":2066,"className":2076,"style":2077},"M-30.168-5.152Q-30.168-5.330-30.050-5.465Q-29.932-5.600-29.751-5.600Q-29.635-5.600-29.553-5.526Q-29.471-5.453-29.471-5.333Q-29.471-5.200-29.548-5.094Q-29.625-4.988-29.758-4.940Q-29.625-4.872-29.464-4.872Q-29.225-4.872-29.116-5.185Q-29.006-5.497-28.924-5.942Q-28.893-6.092-28.823-6.461Q-28.753-6.830-28.699-7.124L-28.398-8.813L-29.064-8.813Q-29.146-8.840-29.146-8.926L-29.119-9.035Q-29.112-9.076-29.044-9.093L-28.350-9.093L-28.264-9.548Q-28.210-9.855-28.182-9.990Q-28.155-10.125-28.090-10.298Q-28.025-10.471-27.923-10.604Q-27.793-10.782-27.591-10.893Q-27.389-11.004-27.174-11.004Q-26.904-11.004-26.682-10.879Q-26.460-10.754-26.460-10.498Q-26.460-10.320-26.581-10.185Q-26.702-10.050-26.873-10.050Q-26.990-10.050-27.075-10.124Q-27.160-10.197-27.160-10.317Q-27.160-10.447-27.080-10.558Q-27-10.669-26.873-10.710Q-27.014-10.778-27.181-10.778Q-27.318-10.778-27.398-10.682Q-27.478-10.587-27.511-10.464Q-27.543-10.341-27.574-10.183Q-27.584-10.132-27.637-9.854Q-27.690-9.575-27.694-9.561L-27.776-9.093L-26.979-9.093Q-26.894-9.069-26.894-8.987L-26.921-8.874Q-26.928-8.830-27-8.813L-27.824-8.813L-28.124-7.138Q-28.230-6.554-28.309-6.201Q-28.388-5.849-28.524-5.514Q-28.654-5.183-28.909-4.915Q-29.163-4.646-29.471-4.646Q-29.741-4.646-29.955-4.776Q-30.168-4.906-30.168-5.152",[605],"stroke-width:0.210",[589,2079,2080],{"transform":2072},[594,2081],{"d":2082,"fill":2066,"stroke":2066,"className":2083,"style":2077},"M-20.515-6.882L-25.348-6.882Q-25.416-6.892-25.462-6.938Q-25.508-6.984-25.508-7.056Q-25.508-7.121-25.462-7.167Q-25.416-7.213-25.348-7.223L-20.515-7.223Q-20.446-7.213-20.400-7.167Q-20.354-7.121-20.354-7.056Q-20.354-6.984-20.400-6.938Q-20.446-6.892-20.515-6.882M-20.515-8.420L-25.348-8.420Q-25.416-8.430-25.462-8.476Q-25.508-8.522-25.508-8.594Q-25.508-8.738-25.348-8.762L-20.515-8.762Q-20.354-8.738-20.354-8.594Q-20.354-8.522-20.400-8.476Q-20.446-8.430-20.515-8.420",[605],[589,2085,2086],{"transform":2072},[594,2087],{"d":2088,"fill":2066,"stroke":2066,"className":2089,"style":2077},"M-16.532-6.075L-19.062-6.075L-19.062-6.355Q-18.094-6.355-18.094-6.564L-18.094-10.183Q-18.487-9.995-19.109-9.995L-19.109-10.276Q-18.692-10.276-18.328-10.377Q-17.964-10.477-17.708-10.723L-17.582-10.723Q-17.517-10.706-17.500-10.638L-17.500-6.564Q-17.500-6.355-16.532-6.355L-16.532-6.075M-13.887-5.935Q-14.523-5.935-14.887-6.280Q-15.251-6.625-15.386-7.150Q-15.521-7.675-15.521-8.300Q-15.521-9.325-15.165-10.024Q-14.810-10.723-13.887-10.723Q-12.961-10.723-12.608-10.024Q-12.256-9.325-12.256-8.300Q-12.256-7.675-12.391-7.150Q-12.526-6.625-12.889-6.280Q-13.251-5.935-13.887-5.935M-13.887-6.160Q-13.449-6.160-13.236-6.535Q-13.022-6.909-12.973-7.376Q-12.923-7.842-12.923-8.420Q-12.923-8.973-12.973-9.401Q-13.022-9.828-13.234-10.163Q-13.446-10.498-13.887-10.498Q-14.229-10.498-14.432-10.291Q-14.635-10.084-14.723-9.772Q-14.810-9.459-14.832-9.143Q-14.854-8.826-14.854-8.420Q-14.854-8.003-14.832-7.661Q-14.810-7.319-14.721-6.971Q-14.632-6.622-14.427-6.391Q-14.222-6.160-13.887-6.160",[605],[589,2091,2092],{"fill":2066,"stroke":2066},[589,2093,2094,2100,2105],{"fill":2066,"stroke":596,"fontSize":2069},[589,2095,2097],{"transform":2096},"translate(35.275 -58)",[594,2098],{"d":2075,"fill":2066,"stroke":2066,"className":2099,"style":2077},[605],[589,2101,2102],{"transform":2096},[594,2103],{"d":2082,"fill":2066,"stroke":2066,"className":2104,"style":2077},[605],[589,2106,2107],{"transform":2096},[594,2108],{"d":2109,"fill":2066,"stroke":2066,"className":2110,"style":2077},"M-18.884-6.389Q-18.764-6.273-18.587-6.231Q-18.409-6.188-18.193-6.188Q-17.954-6.188-17.744-6.297Q-17.534-6.407-17.380-6.589Q-17.226-6.772-17.127-7.005Q-16.960-7.432-16.960-8.252Q-17.110-7.958-17.373-7.779Q-17.636-7.599-17.954-7.599Q-18.388-7.599-18.735-7.808Q-19.082-8.016-19.280-8.377Q-19.479-8.738-19.479-9.161Q-19.479-9.496-19.349-9.785Q-19.219-10.074-18.988-10.288Q-18.757-10.501-18.458-10.612Q-18.159-10.723-17.828-10.723Q-16.970-10.723-16.614-10.009Q-16.259-9.295-16.259-8.338Q-16.259-7.921-16.387-7.493Q-16.515-7.066-16.772-6.711Q-17.028-6.355-17.390-6.145Q-17.753-5.935-18.193-5.935Q-18.648-5.935-18.966-6.123Q-19.284-6.311-19.284-6.735Q-19.284-6.885-19.185-6.984Q-19.086-7.083-18.935-7.083Q-18.867-7.083-18.800-7.056Q-18.733-7.029-18.689-6.984Q-18.645-6.940-18.617-6.873Q-18.590-6.806-18.590-6.735Q-18.590-6.605-18.670-6.507Q-18.751-6.410-18.884-6.389M-17.913-7.825Q-17.619-7.825-17.404-8.003Q-17.189-8.180-17.081-8.456Q-16.973-8.731-16.973-9.021Q-16.973-9.066-16.975-9.093Q-16.977-9.120-16.980-9.155Q-16.977-9.165-16.975-9.172Q-16.973-9.179-16.973-9.189Q-16.973-9.691-17.171-10.091Q-17.370-10.491-17.828-10.491Q-18.395-10.491-18.588-10.132Q-18.781-9.773-18.781-9.161Q-18.781-8.775-18.727-8.492Q-18.672-8.208-18.477-8.016Q-18.282-7.825-17.913-7.825",[605],[589,2112,2113],{"fill":2066,"stroke":2066},[589,2114,2115,2121,2126],{"fill":2066,"stroke":596,"fontSize":2069},[589,2116,2118],{"transform":2117},"translate(77.954 -58)",[594,2119],{"d":2075,"fill":2066,"stroke":2066,"className":2120,"style":2077},[605],[589,2122,2123],{"transform":2117},[594,2124],{"d":2082,"fill":2066,"stroke":2066,"className":2125,"style":2077},[605],[589,2127,2128],{"transform":2117},[594,2129],{"d":2130,"fill":2066,"stroke":2066,"className":2131,"style":2077},"M-19.062-6.622Q-18.942-6.465-18.751-6.366Q-18.559-6.266-18.344-6.227Q-18.129-6.188-17.906-6.188Q-17.609-6.188-17.414-6.343Q-17.219-6.499-17.129-6.753Q-17.038-7.008-17.038-7.292Q-17.038-7.586-17.130-7.837Q-17.223-8.088-17.421-8.244Q-17.619-8.399-17.913-8.399L-18.429-8.399Q-18.457-8.399-18.482-8.425Q-18.508-8.450-18.508-8.474L-18.508-8.546Q-18.508-8.577-18.482-8.599Q-18.457-8.621-18.429-8.621L-17.988-8.652Q-17.626-8.652-17.406-9.009Q-17.185-9.367-17.185-9.756Q-17.185-10.084-17.380-10.288Q-17.575-10.491-17.906-10.491Q-18.193-10.491-18.446-10.407Q-18.699-10.324-18.863-10.136Q-18.716-10.136-18.616-10.021Q-18.515-9.907-18.515-9.756Q-18.515-9.606-18.621-9.496Q-18.727-9.387-18.884-9.387Q-19.045-9.387-19.154-9.496Q-19.263-9.606-19.263-9.756Q-19.263-10.081-19.055-10.300Q-18.846-10.518-18.530-10.621Q-18.214-10.723-17.906-10.723Q-17.588-10.723-17.260-10.619Q-16.932-10.515-16.705-10.293Q-16.478-10.071-16.478-9.756Q-16.478-9.322-16.765-8.997Q-17.052-8.673-17.486-8.526Q-17.175-8.461-16.895-8.295Q-16.614-8.129-16.437-7.871Q-16.259-7.613-16.259-7.292Q-16.259-6.882-16.503-6.572Q-16.748-6.263-17.129-6.099Q-17.510-5.935-17.906-5.935Q-18.275-5.935-18.633-6.048Q-18.990-6.160-19.234-6.410Q-19.479-6.659-19.479-7.029Q-19.479-7.200-19.362-7.312Q-19.246-7.425-19.075-7.425Q-18.966-7.425-18.875-7.374Q-18.785-7.323-18.730-7.230Q-18.675-7.138-18.675-7.029Q-18.675-6.861-18.788-6.742Q-18.901-6.622-19.062-6.622",[605],[589,2133,2134],{"fill":2066,"stroke":2066},[589,2135,2136,2142,2147],{"fill":2066,"stroke":596,"fontSize":2069},[589,2137,2139],{"transform":2138},"translate(-31.59 3.173)",[594,2140],{"d":2075,"fill":2066,"stroke":2066,"className":2141,"style":2077},[605],[589,2143,2144],{"transform":2138},[594,2145],{"d":2082,"fill":2066,"stroke":2066,"className":2146,"style":2077},[605],[589,2148,2149],{"transform":2138},[594,2150],{"d":2151,"fill":2066,"stroke":2066,"className":2152,"style":2077},"M-19.479-7.152Q-19.479-7.593-19.176-7.914Q-18.874-8.235-18.422-8.427L-18.662-8.567Q-18.932-8.727-19.098-8.985Q-19.263-9.243-19.263-9.541Q-19.263-9.893-19.058-10.165Q-18.853-10.436-18.532-10.580Q-18.211-10.723-17.869-10.723Q-17.547-10.723-17.224-10.607Q-16.901-10.491-16.690-10.250Q-16.478-10.009-16.478-9.674Q-16.478-9.312-16.722-9.049Q-16.966-8.785-17.346-8.608L-16.946-8.372Q-16.751-8.259-16.592-8.090Q-16.433-7.921-16.346-7.712Q-16.259-7.504-16.259-7.271Q-16.259-6.868-16.493-6.564Q-16.727-6.260-17.101-6.097Q-17.476-5.935-17.869-5.935Q-18.255-5.935-18.624-6.072Q-18.993-6.208-19.236-6.485Q-19.479-6.762-19.479-7.152M-19.031-7.152Q-19.031-6.865-18.862-6.642Q-18.692-6.420-18.424-6.304Q-18.156-6.188-17.869-6.188Q-17.431-6.188-17.069-6.405Q-16.707-6.622-16.707-7.029Q-16.707-7.230-16.835-7.408Q-16.963-7.586-17.141-7.685L-18.163-8.280Q-18.402-8.170-18.600-8.004Q-18.798-7.839-18.915-7.623Q-19.031-7.408-19.031-7.152M-18.508-9.281L-17.588-8.748Q-17.281-8.908-17.079-9.141Q-16.878-9.373-16.878-9.674Q-16.878-9.913-17.023-10.103Q-17.168-10.293-17.400-10.392Q-17.633-10.491-17.869-10.491Q-18.091-10.491-18.320-10.421Q-18.549-10.351-18.706-10.194Q-18.863-10.036-18.863-9.807Q-18.863-9.493-18.508-9.281",[605],[589,2154,2155],{"fill":2066,"stroke":2066},[589,2156,2157,2163,2168],{"fill":2066,"stroke":596,"fontSize":2069},[589,2158,2160],{"transform":2159},"translate(35.275 23.09)",[594,2161],{"d":2075,"fill":2066,"stroke":2066,"className":2162,"style":2077},[605],[589,2164,2165],{"transform":2159},[594,2166],{"d":2082,"fill":2066,"stroke":2066,"className":2167,"style":2077},[605],[589,2169,2170],{"transform":2159},[594,2171],{"d":2172,"fill":2066,"stroke":2066,"className":2173,"style":2077},"M-19.051-6.837L-19.082-6.837Q-18.945-6.540-18.648-6.364Q-18.351-6.188-18.023-6.188Q-17.660-6.188-17.433-6.366Q-17.206-6.543-17.112-6.832Q-17.018-7.121-17.018-7.483Q-17.018-7.798-17.072-8.083Q-17.127-8.368-17.300-8.574Q-17.472-8.779-17.787-8.779Q-18.060-8.779-18.243-8.712Q-18.426-8.645-18.530-8.556Q-18.634-8.468-18.730-8.358Q-18.826-8.249-18.870-8.239L-18.949-8.239Q-19.021-8.256-19.038-8.327L-19.038-10.645Q-19.038-10.679-19.014-10.701Q-18.990-10.723-18.956-10.723L-18.928-10.723Q-18.641-10.607-18.373-10.553Q-18.105-10.498-17.828-10.498Q-17.551-10.498-17.281-10.553Q-17.011-10.607-16.731-10.723L-16.707-10.723Q-16.672-10.723-16.649-10.700Q-16.625-10.676-16.625-10.645L-16.625-10.576Q-16.625-10.549-16.645-10.529Q-16.919-10.214-17.303-10.038Q-17.688-9.862-18.101-9.862Q-18.440-9.862-18.757-9.948L-18.757-8.666Q-18.361-9.001-17.787-9.001Q-17.383-9.001-17.047-8.791Q-16.710-8.580-16.517-8.228Q-16.324-7.876-16.324-7.476Q-16.324-7.145-16.464-6.859Q-16.604-6.574-16.848-6.364Q-17.093-6.154-17.395-6.044Q-17.698-5.935-18.016-5.935Q-18.375-5.935-18.701-6.099Q-19.027-6.263-19.222-6.555Q-19.417-6.847-19.417-7.210Q-19.417-7.360-19.311-7.466Q-19.205-7.572-19.051-7.572Q-18.898-7.572-18.793-7.468Q-18.689-7.364-18.689-7.210Q-18.689-7.053-18.793-6.945Q-18.898-6.837-19.051-6.837",[605],[589,2175,2177,2185,2191,2197,2203,2209,2215],{"stroke":596,"fontSize":2176},"8",[589,2178,2180],{"transform":2179},"translate(-30.196 51.792)",[594,2181],{"d":2182,"fill":591,"stroke":591,"className":2183,"style":2184},"M-28.626-5.997Q-29.107-5.997-29.515-6.241Q-29.923-6.485-30.161-6.899Q-30.400-7.313-30.400-7.802Q-30.400-8.294-30.142-8.710Q-29.884-9.126-29.452-9.364Q-29.021-9.602-28.529-9.602Q-27.908-9.602-27.458-9.165L-27.458-10.794Q-27.458-11.009-27.521-11.104Q-27.583-11.200-27.701-11.221Q-27.818-11.243-28.064-11.243L-28.064-11.540L-26.841-11.626L-26.841-6.817Q-26.841-6.606-26.779-6.511Q-26.716-6.415-26.599-6.393Q-26.482-6.372-26.232-6.372L-26.232-6.075L-27.482-5.997L-27.482-6.481Q-27.947-5.997-28.626-5.997M-28.560-6.251Q-28.220-6.251-27.927-6.442Q-27.634-6.634-27.482-6.930L-27.482-8.762Q-27.630-9.036-27.892-9.192Q-28.154-9.348-28.466-9.348Q-29.091-9.348-29.374-8.901Q-29.658-8.454-29.658-7.794Q-29.658-7.149-29.406-6.700Q-29.154-6.251-28.560-6.251M-25.724-7.829Q-25.724-8.309-25.492-8.725Q-25.259-9.141-24.849-9.391Q-24.439-9.641-23.962-9.641Q-23.232-9.641-22.833-9.200Q-22.435-8.759-22.435-8.028Q-22.435-7.923-22.529-7.899L-24.978-7.899L-24.978-7.829Q-24.978-7.419-24.857-7.063Q-24.736-6.708-24.464-6.491Q-24.193-6.274-23.763-6.274Q-23.400-6.274-23.103-6.503Q-22.806-6.731-22.704-7.083Q-22.697-7.130-22.611-7.145L-22.529-7.145Q-22.435-7.118-22.435-7.036Q-22.435-7.028-22.443-6.997Q-22.505-6.770-22.644-6.587Q-22.783-6.403-22.974-6.270Q-23.165-6.138-23.384-6.067Q-23.603-5.997-23.841-5.997Q-24.212-5.997-24.550-6.134Q-24.888-6.270-25.156-6.522Q-25.423-6.774-25.574-7.114Q-25.724-7.454-25.724-7.829M-24.970-8.137L-23.009-8.137Q-23.009-8.442-23.111-8.733Q-23.212-9.024-23.429-9.206Q-23.646-9.387-23.962-9.387Q-24.263-9.387-24.494-9.200Q-24.724-9.012-24.847-8.721Q-24.970-8.430-24.970-8.137M-21.904-7.802Q-21.904-8.298-21.654-8.723Q-21.404-9.149-20.984-9.395Q-20.564-9.641-20.064-9.641Q-19.525-9.641-19.134-9.516Q-18.744-9.391-18.744-8.977Q-18.744-8.872-18.794-8.780Q-18.845-8.688-18.937-8.637Q-19.029-8.587-19.138-8.587Q-19.244-8.587-19.335-8.637Q-19.427-8.688-19.478-8.780Q-19.529-8.872-19.529-8.977Q-19.529-9.200-19.361-9.305Q-19.583-9.364-20.056-9.364Q-20.353-9.364-20.568-9.225Q-20.783-9.087-20.913-8.856Q-21.044-8.626-21.103-8.356Q-21.161-8.087-21.161-7.802Q-21.161-7.407-21.029-7.057Q-20.896-6.708-20.624-6.491Q-20.353-6.274-19.954-6.274Q-19.579-6.274-19.304-6.491Q-19.029-6.708-18.927-7.067Q-18.911-7.130-18.849-7.130L-18.744-7.130Q-18.708-7.130-18.683-7.102Q-18.658-7.075-18.658-7.036L-18.658-7.013Q-18.790-6.532-19.175-6.264Q-19.560-5.997-20.064-5.997Q-20.427-5.997-20.761-6.134Q-21.095-6.270-21.355-6.520Q-21.615-6.770-21.759-7.106Q-21.904-7.442-21.904-7.802M-16.161-6.075L-18.142-6.075L-18.142-6.372Q-17.872-6.372-17.704-6.417Q-17.536-6.462-17.536-6.634L-17.536-8.770Q-17.536-8.985-17.599-9.081Q-17.661-9.177-17.779-9.198Q-17.896-9.220-18.142-9.220L-18.142-9.516L-16.974-9.602L-16.974-8.817Q-16.896-9.028-16.744-9.214Q-16.591-9.399-16.392-9.501Q-16.193-9.602-15.966-9.602Q-15.720-9.602-15.529-9.458Q-15.337-9.313-15.337-9.083Q-15.337-8.927-15.443-8.817Q-15.548-8.708-15.704-8.708Q-15.861-8.708-15.970-8.817Q-16.079-8.927-16.079-9.083Q-16.079-9.243-15.974-9.348Q-16.298-9.348-16.513-9.120Q-16.728-8.891-16.824-8.552Q-16.919-8.212-16.919-7.907L-16.919-6.634Q-16.919-6.466-16.693-6.419Q-16.466-6.372-16.161-6.372L-16.161-6.075M-14.857-7.829Q-14.857-8.309-14.624-8.725Q-14.392-9.141-13.982-9.391Q-13.572-9.641-13.095-9.641Q-12.365-9.641-11.966-9.200Q-11.568-8.759-11.568-8.028Q-11.568-7.923-11.661-7.899L-14.111-7.899L-14.111-7.829Q-14.111-7.419-13.990-7.063Q-13.869-6.708-13.597-6.491Q-13.326-6.274-12.896-6.274Q-12.533-6.274-12.236-6.503Q-11.939-6.731-11.837-7.083Q-11.829-7.130-11.744-7.145L-11.661-7.145Q-11.568-7.118-11.568-7.036Q-11.568-7.028-11.576-6.997Q-11.638-6.770-11.777-6.587Q-11.915-6.403-12.107-6.270Q-12.298-6.138-12.517-6.067Q-12.736-5.997-12.974-5.997Q-13.345-5.997-13.683-6.134Q-14.021-6.270-14.288-6.522Q-14.556-6.774-14.706-7.114Q-14.857-7.454-14.857-7.829M-14.103-8.137L-12.142-8.137Q-12.142-8.442-12.244-8.733Q-12.345-9.024-12.562-9.206Q-12.779-9.387-13.095-9.387Q-13.396-9.387-13.626-9.200Q-13.857-9.012-13.980-8.721Q-14.103-8.430-14.103-8.137M-10.982-6.907Q-10.982-7.391-10.579-7.686Q-10.177-7.981-9.626-8.100Q-9.076-8.220-8.583-8.220L-8.583-8.509Q-8.583-8.735-8.699-8.942Q-8.814-9.149-9.011-9.268Q-9.208-9.387-9.439-9.387Q-9.865-9.387-10.150-9.282Q-10.079-9.255-10.033-9.200Q-9.986-9.145-9.960-9.075Q-9.935-9.005-9.935-8.930Q-9.935-8.825-9.986-8.733Q-10.036-8.641-10.128-8.591Q-10.220-8.540-10.326-8.540Q-10.431-8.540-10.523-8.591Q-10.615-8.641-10.665-8.733Q-10.716-8.825-10.716-8.930Q-10.716-9.348-10.327-9.495Q-9.939-9.641-9.439-9.641Q-9.107-9.641-8.753-9.511Q-8.400-9.380-8.171-9.126Q-7.943-8.872-7.943-8.524L-7.943-6.723Q-7.943-6.591-7.870-6.481Q-7.798-6.372-7.669-6.372Q-7.544-6.372-7.476-6.477Q-7.408-6.583-7.408-6.723L-7.408-7.235L-7.126-7.235L-7.126-6.723Q-7.126-6.520-7.244-6.362Q-7.361-6.204-7.542-6.120Q-7.724-6.036-7.927-6.036Q-8.158-6.036-8.310-6.208Q-8.462-6.380-8.494-6.610Q-8.654-6.329-8.962-6.163Q-9.271-5.997-9.622-5.997Q-10.134-5.997-10.558-6.220Q-10.982-6.442-10.982-6.907M-10.294-6.907Q-10.294-6.622-10.068-6.436Q-9.841-6.251-9.548-6.251Q-9.302-6.251-9.077-6.368Q-8.853-6.485-8.718-6.688Q-8.583-6.891-8.583-7.145L-8.583-7.977Q-8.849-7.977-9.134-7.923Q-9.419-7.868-9.691-7.739Q-9.962-7.610-10.128-7.403Q-10.294-7.196-10.294-6.907M-6.790-6.083L-6.790-7.305Q-6.790-7.333-6.759-7.364Q-6.728-7.395-6.704-7.395L-6.599-7.395Q-6.529-7.395-6.513-7.333Q-6.451-7.013-6.312-6.772Q-6.173-6.532-5.941-6.391Q-5.708-6.251-5.400-6.251Q-5.161-6.251-4.952-6.311Q-4.744-6.372-4.607-6.520Q-4.470-6.669-4.470-6.915Q-4.470-7.169-4.681-7.335Q-4.892-7.501-5.161-7.555L-5.783-7.669Q-6.189-7.747-6.490-8.003Q-6.790-8.259-6.790-8.634Q-6.790-9.001-6.589-9.223Q-6.388-9.446-6.064-9.544Q-5.740-9.641-5.400-9.641Q-4.935-9.641-4.638-9.434L-4.415-9.618Q-4.392-9.641-4.361-9.641L-4.310-9.641Q-4.279-9.641-4.251-9.614Q-4.224-9.587-4.224-9.555L-4.224-8.571Q-4.224-8.540-4.249-8.511Q-4.275-8.481-4.310-8.481L-4.415-8.481Q-4.451-8.481-4.478-8.509Q-4.505-8.536-4.505-8.571Q-4.505-8.970-4.757-9.190Q-5.009-9.411-5.408-9.411Q-5.763-9.411-6.046-9.288Q-6.329-9.165-6.329-8.860Q-6.329-8.641-6.128-8.509Q-5.927-8.376-5.681-8.333L-5.056-8.220Q-4.626-8.130-4.318-7.833Q-4.009-7.536-4.009-7.122Q-4.009-6.552-4.408-6.274Q-4.806-5.997-5.400-5.997Q-5.951-5.997-6.302-6.333L-6.599-6.020Q-6.622-5.997-6.658-5.997L-6.704-5.997Q-6.728-5.997-6.759-6.028Q-6.790-6.059-6.790-6.083M-1.622-6.075L-3.400-6.075L-3.400-6.372Q-3.126-6.372-2.958-6.419Q-2.790-6.466-2.790-6.634L-2.790-8.770Q-2.790-8.985-2.847-9.081Q-2.904-9.177-3.017-9.198Q-3.130-9.220-3.376-9.220L-3.376-9.516L-2.177-9.602L-2.177-6.634Q-2.177-6.466-2.031-6.419Q-1.884-6.372-1.622-6.372L-1.622-6.075M-3.064-10.997Q-3.064-11.188-2.929-11.319Q-2.794-11.450-2.599-11.450Q-2.478-11.450-2.374-11.387Q-2.271-11.325-2.208-11.221Q-2.146-11.118-2.146-10.997Q-2.146-10.802-2.277-10.667Q-2.408-10.532-2.599-10.532Q-2.798-10.532-2.931-10.665Q-3.064-10.798-3.064-10.997M0.807-6.075L-1.048-6.075L-1.048-6.372Q-0.775-6.372-0.607-6.419Q-0.439-6.466-0.439-6.634L-0.439-8.770Q-0.439-8.985-0.501-9.081Q-0.564-9.177-0.683-9.198Q-0.802-9.220-1.048-9.220L-1.048-9.516L0.143-9.602L0.143-8.868Q0.256-9.083 0.450-9.251Q0.643-9.419 0.881-9.511Q1.120-9.602 1.374-9.602Q2.542-9.602 2.542-8.524L2.542-6.634Q2.542-6.466 2.712-6.419Q2.881-6.372 3.151-6.372L3.151-6.075L1.296-6.075L1.296-6.372Q1.569-6.372 1.737-6.419Q1.905-6.466 1.905-6.634L1.905-8.509Q1.905-8.891 1.784-9.120Q1.663-9.348 1.311-9.348Q0.999-9.348 0.745-9.186Q0.491-9.024 0.344-8.755Q0.198-8.485 0.198-8.188L0.198-6.634Q0.198-6.466 0.368-6.419Q0.538-6.372 0.807-6.372L0.807-6.075M3.596-5.466Q3.596-5.747 3.807-5.958Q4.018-6.169 4.303-6.259Q4.147-6.384 4.069-6.573Q3.991-6.763 3.991-6.962Q3.991-7.317 4.221-7.610Q3.854-7.950 3.854-8.419Q3.854-8.770 4.057-9.040Q4.260-9.309 4.581-9.456Q4.901-9.602 5.245-9.602Q5.764-9.602 6.135-9.321Q6.499-9.692 7.046-9.692Q7.225-9.692 7.352-9.565Q7.479-9.438 7.479-9.259Q7.479-9.153 7.401-9.075Q7.323-8.997 7.214-8.997Q7.104-8.997 7.028-9.073Q6.952-9.149 6.952-9.259Q6.952-9.360 6.991-9.411Q6.999-9.419 7.003-9.425Q7.006-9.430 7.006-9.434Q6.631-9.434 6.311-9.180Q6.631-8.841 6.631-8.419Q6.631-8.149 6.514-7.932Q6.397-7.716 6.192-7.557Q5.987-7.399 5.745-7.317Q5.503-7.235 5.245-7.235Q5.026-7.235 4.813-7.294Q4.600-7.352 4.405-7.473Q4.311-7.333 4.311-7.153Q4.311-6.946 4.448-6.794Q4.585-6.641 4.792-6.641L5.487-6.641Q5.975-6.641 6.387-6.557Q6.799-6.473 7.079-6.216Q7.358-5.958 7.358-5.466Q7.358-5.102 7.038-4.870Q6.717-4.638 6.276-4.536Q5.835-4.434 5.479-4.434Q5.124-4.434 4.680-4.536Q4.237-4.638 3.917-4.870Q3.596-5.102 3.596-5.466M4.100-5.466Q4.100-5.270 4.245-5.122Q4.389-4.973 4.602-4.884Q4.815-4.794 5.055-4.747Q5.296-4.700 5.479-4.700Q5.721-4.700 6.051-4.778Q6.381-4.856 6.618-5.030Q6.854-5.204 6.854-5.466Q6.854-5.872 6.444-5.981Q6.034-6.091 5.471-6.091L4.792-6.091Q4.522-6.091 4.311-5.913Q4.100-5.735 4.100-5.466M5.245-7.501Q5.967-7.501 5.967-8.419Q5.967-9.341 5.245-9.341Q4.518-9.341 4.518-8.419Q4.518-7.501 5.245-7.501",[605],"stroke-width:0.240",[589,2186,2187],{"transform":2179},[594,2188],{"d":2189,"fill":591,"stroke":591,"className":2190,"style":2184},"M12.555-6.075L10.723-6.075L10.723-6.372Q10.992-6.372 11.160-6.417Q11.328-6.462 11.328-6.634L11.328-9.227L10.687-9.227L10.687-9.524L11.328-9.524L11.328-10.458Q11.328-10.872 11.637-11.153Q11.945-11.434 12.391-11.571Q12.836-11.708 13.242-11.708Q13.645-11.708 13.963-11.481Q14.281-11.255 14.281-10.868Q14.281-10.692 14.168-10.579Q14.055-10.466 13.883-10.466Q13.707-10.466 13.594-10.579Q13.480-10.692 13.480-10.868Q13.480-11.012 13.570-11.122Q13.660-11.231 13.793-11.259Q13.508-11.450 13.160-11.450Q12.863-11.450 12.576-11.329Q12.289-11.208 12.105-10.975Q11.922-10.743 11.922-10.442L11.922-9.524L13.074-9.524L14.297-9.618L14.297-6.634Q14.297-6.466 14.465-6.419Q14.633-6.372 14.906-6.372L14.906-6.075L13.074-6.075L13.074-6.372Q13.344-6.372 13.512-6.417Q13.680-6.462 13.680-6.634L13.680-8.794Q13.680-9.001 13.633-9.100Q13.586-9.200 13.410-9.227L11.945-9.227L11.945-6.634Q11.945-6.466 12.113-6.419Q12.281-6.372 12.555-6.372L12.555-6.075M17.344-6.075L15.488-6.075L15.488-6.372Q15.762-6.372 15.930-6.419Q16.098-6.466 16.098-6.634L16.098-8.770Q16.098-8.985 16.035-9.081Q15.973-9.177 15.853-9.198Q15.734-9.220 15.488-9.220L15.488-9.516L16.680-9.602L16.680-8.868Q16.793-9.083 16.986-9.251Q17.180-9.419 17.418-9.511Q17.656-9.602 17.910-9.602Q19.078-9.602 19.078-8.524L19.078-6.634Q19.078-6.466 19.248-6.419Q19.418-6.372 19.687-6.372L19.687-6.075L17.832-6.075L17.832-6.372Q18.105-6.372 18.273-6.419Q18.441-6.466 18.441-6.634L18.441-8.509Q18.441-8.891 18.320-9.120Q18.199-9.348 17.848-9.348Q17.535-9.348 17.281-9.186Q17.027-9.024 16.881-8.755Q16.734-8.485 16.734-8.188L16.734-6.634Q16.734-6.466 16.904-6.419Q17.074-6.372 17.344-6.372L17.344-6.075M21.992-6.075L20.215-6.075L20.215-6.372Q20.488-6.372 20.656-6.419Q20.824-6.466 20.824-6.634L20.824-8.770Q20.824-8.985 20.768-9.081Q20.711-9.177 20.598-9.198Q20.484-9.220 20.238-9.220L20.238-9.516L21.437-9.602L21.437-6.634Q21.437-6.466 21.584-6.419Q21.730-6.372 21.992-6.372L21.992-6.075M20.551-10.997Q20.551-11.188 20.686-11.319Q20.820-11.450 21.016-11.450Q21.137-11.450 21.240-11.387Q21.344-11.325 21.406-11.221Q21.469-11.118 21.469-10.997Q21.469-10.802 21.338-10.667Q21.207-10.532 21.016-10.532Q20.816-10.532 20.684-10.665Q20.551-10.798 20.551-10.997M22.535-6.083L22.535-7.305Q22.535-7.333 22.566-7.364Q22.598-7.395 22.621-7.395L22.727-7.395Q22.797-7.395 22.812-7.333Q22.875-7.013 23.014-6.772Q23.152-6.532 23.385-6.391Q23.617-6.251 23.926-6.251Q24.164-6.251 24.373-6.311Q24.582-6.372 24.719-6.520Q24.855-6.669 24.855-6.915Q24.855-7.169 24.645-7.335Q24.434-7.501 24.164-7.555L23.543-7.669Q23.137-7.747 22.836-8.003Q22.535-8.259 22.535-8.634Q22.535-9.001 22.736-9.223Q22.937-9.446 23.262-9.544Q23.586-9.641 23.926-9.641Q24.391-9.641 24.687-9.434L24.910-9.618Q24.934-9.641 24.965-9.641L25.016-9.641Q25.047-9.641 25.074-9.614Q25.102-9.587 25.102-9.555L25.102-8.571Q25.102-8.540 25.076-8.511Q25.051-8.481 25.016-8.481L24.910-8.481Q24.875-8.481 24.848-8.509Q24.820-8.536 24.820-8.571Q24.820-8.970 24.568-9.190Q24.316-9.411 23.918-9.411Q23.562-9.411 23.279-9.288Q22.996-9.165 22.996-8.860Q22.996-8.641 23.197-8.509Q23.398-8.376 23.645-8.333L24.270-8.220Q24.699-8.130 25.008-7.833Q25.316-7.536 25.316-7.122Q25.316-6.552 24.918-6.274Q24.520-5.997 23.926-5.997Q23.375-5.997 23.023-6.333L22.727-6.020Q22.703-5.997 22.668-5.997L22.621-5.997Q22.598-5.997 22.566-6.028Q22.535-6.059 22.535-6.083M27.773-6.075L25.918-6.075L25.918-6.372Q26.191-6.372 26.359-6.419Q26.527-6.466 26.527-6.634L26.527-10.794Q26.527-11.009 26.465-11.104Q26.402-11.200 26.283-11.221Q26.164-11.243 25.918-11.243L25.918-11.540L27.141-11.626L27.141-8.923Q27.266-9.134 27.453-9.284Q27.641-9.434 27.867-9.518Q28.094-9.602 28.340-9.602Q29.508-9.602 29.508-8.524L29.508-6.634Q29.508-6.466 29.678-6.419Q29.848-6.372 30.117-6.372L30.117-6.075L28.262-6.075L28.262-6.372Q28.535-6.372 28.703-6.419Q28.871-6.466 28.871-6.634L28.871-8.509Q28.871-8.891 28.750-9.120Q28.629-9.348 28.277-9.348Q27.965-9.348 27.711-9.186Q27.457-9.024 27.311-8.755Q27.164-8.485 27.164-8.188L27.164-6.634Q27.164-6.466 27.334-6.419Q27.504-6.372 27.773-6.372",[605],[589,2192,2193],{"transform":2179},[594,2194],{"d":2195,"fill":591,"stroke":591,"className":2196,"style":2184},"M34.034-7.036L34.034-9.227L33.331-9.227L33.331-9.481Q33.687-9.481 33.929-9.714Q34.171-9.946 34.282-10.294Q34.394-10.641 34.394-10.997L34.675-10.997L34.675-9.524L35.851-9.524L35.851-9.227L34.675-9.227L34.675-7.052Q34.675-6.731 34.794-6.503Q34.913-6.274 35.194-6.274Q35.374-6.274 35.491-6.397Q35.608-6.520 35.661-6.700Q35.714-6.880 35.714-7.052L35.714-7.524L35.995-7.524L35.995-7.036Q35.995-6.782 35.890-6.542Q35.784-6.302 35.587-6.149Q35.390-5.997 35.132-5.997Q34.816-5.997 34.564-6.120Q34.312-6.243 34.173-6.477Q34.034-6.712 34.034-7.036M38.573-6.075L36.796-6.075L36.796-6.372Q37.069-6.372 37.237-6.419Q37.405-6.466 37.405-6.634L37.405-8.770Q37.405-8.985 37.349-9.081Q37.292-9.177 37.179-9.198Q37.066-9.220 36.819-9.220L36.819-9.516L38.019-9.602L38.019-6.634Q38.019-6.466 38.165-6.419Q38.312-6.372 38.573-6.372L38.573-6.075M37.132-10.997Q37.132-11.188 37.267-11.319Q37.401-11.450 37.597-11.450Q37.718-11.450 37.821-11.387Q37.925-11.325 37.987-11.221Q38.050-11.118 38.050-10.997Q38.050-10.802 37.919-10.667Q37.788-10.532 37.597-10.532Q37.398-10.532 37.265-10.665Q37.132-10.798 37.132-10.997M41.003-6.075L39.148-6.075L39.148-6.372Q39.421-6.372 39.589-6.419Q39.757-6.466 39.757-6.634L39.757-8.770Q39.757-8.985 39.694-9.081Q39.632-9.177 39.513-9.198Q39.394-9.220 39.148-9.220L39.148-9.516L40.339-9.602L40.339-8.868Q40.452-9.083 40.646-9.251Q40.839-9.419 41.077-9.511Q41.316-9.602 41.569-9.602Q42.530-9.602 42.706-8.891Q42.890-9.220 43.218-9.411Q43.546-9.602 43.925-9.602Q45.101-9.602 45.101-8.524L45.101-6.634Q45.101-6.466 45.269-6.419Q45.437-6.372 45.706-6.372L45.706-6.075L43.851-6.075L43.851-6.372Q44.124-6.372 44.292-6.417Q44.460-6.462 44.460-6.634L44.460-8.509Q44.460-8.895 44.335-9.122Q44.210-9.348 43.858-9.348Q43.554-9.348 43.298-9.186Q43.042-9.024 42.894-8.755Q42.745-8.485 42.745-8.188L42.745-6.634Q42.745-6.466 42.915-6.419Q43.085-6.372 43.355-6.372L43.355-6.075L41.499-6.075L41.499-6.372Q41.773-6.372 41.941-6.419Q42.108-6.466 42.108-6.634L42.108-8.509Q42.108-8.895 41.983-9.122Q41.858-9.348 41.507-9.348Q41.202-9.348 40.946-9.186Q40.691-9.024 40.542-8.755Q40.394-8.485 40.394-8.188L40.394-6.634Q40.394-6.466 40.564-6.419Q40.733-6.372 41.003-6.372L41.003-6.075M46.151-7.829Q46.151-8.309 46.384-8.725Q46.616-9.141 47.026-9.391Q47.437-9.641 47.913-9.641Q48.644-9.641 49.042-9.200Q49.441-8.759 49.441-8.028Q49.441-7.923 49.347-7.899L46.898-7.899L46.898-7.829Q46.898-7.419 47.019-7.063Q47.140-6.708 47.411-6.491Q47.683-6.274 48.112-6.274Q48.476-6.274 48.773-6.503Q49.069-6.731 49.171-7.083Q49.179-7.130 49.265-7.145L49.347-7.145Q49.441-7.118 49.441-7.036Q49.441-7.028 49.433-6.997Q49.370-6.770 49.232-6.587Q49.093-6.403 48.901-6.270Q48.710-6.138 48.491-6.067Q48.273-5.997 48.034-5.997Q47.663-5.997 47.325-6.134Q46.987-6.270 46.720-6.522Q46.452-6.774 46.302-7.114Q46.151-7.454 46.151-7.829M46.905-8.137L48.866-8.137Q48.866-8.442 48.765-8.733Q48.663-9.024 48.446-9.206Q48.230-9.387 47.913-9.387Q47.612-9.387 47.382-9.200Q47.151-9.012 47.028-8.721Q46.905-8.430 46.905-8.137",[605],[589,2198,2199],{"transform":2179},[594,2200],{"d":2201,"fill":591,"stroke":591,"className":2202,"style":2184},"M59.525-7.891L53.181-7.891Q53.107-7.891 53.056-7.948Q53.006-8.005 53.006-8.075Q53.006-8.145 53.053-8.202Q53.099-8.259 53.181-8.259L59.525-8.259Q59.072-8.587 58.775-9.054Q58.478-9.520 58.373-10.059Q58.373-10.161 58.471-10.188L58.638-10.188Q58.721-10.169 58.740-10.083Q58.869-9.407 59.349-8.889Q59.830-8.372 60.494-8.180Q60.556-8.157 60.556-8.075Q60.556-7.993 60.494-7.970Q59.830-7.782 59.349-7.263Q58.869-6.743 58.740-6.067Q58.721-5.981 58.638-5.962L58.471-5.962Q58.373-5.989 58.373-6.091Q58.447-6.458 58.605-6.790Q58.763-7.122 58.996-7.399Q59.228-7.677 59.525-7.891",[605],[589,2204,2205],{"transform":2179},[594,2206],{"d":2207,"fill":591,"stroke":591,"className":2208,"style":2184},"M64.729-7.036L64.729-9.227L64.026-9.227L64.026-9.481Q64.382-9.481 64.624-9.714Q64.866-9.946 64.977-10.294Q65.089-10.641 65.089-10.997L65.370-10.997L65.370-9.524L66.546-9.524L66.546-9.227L65.370-9.227L65.370-7.052Q65.370-6.731 65.489-6.503Q65.608-6.274 65.889-6.274Q66.069-6.274 66.186-6.397Q66.303-6.520 66.356-6.700Q66.409-6.880 66.409-7.052L66.409-7.524L66.690-7.524L66.690-7.036Q66.690-6.782 66.585-6.542Q66.479-6.302 66.282-6.149Q66.085-5.997 65.827-5.997Q65.511-5.997 65.259-6.120Q65.007-6.243 64.868-6.477Q64.729-6.712 64.729-7.036M67.409-7.770Q67.409-8.274 67.665-8.706Q67.921-9.137 68.356-9.389Q68.792-9.641 69.292-9.641Q69.678-9.641 70.020-9.497Q70.362-9.352 70.624-9.091Q70.886-8.829 71.028-8.493Q71.171-8.157 71.171-7.770Q71.171-7.278 70.907-6.868Q70.643-6.458 70.214-6.227Q69.784-5.997 69.292-5.997Q68.800-5.997 68.366-6.229Q67.932-6.462 67.671-6.870Q67.409-7.278 67.409-7.770M69.292-6.274Q69.749-6.274 70.001-6.497Q70.253-6.720 70.341-7.071Q70.428-7.423 70.428-7.868Q70.428-8.298 70.335-8.636Q70.241-8.973 69.987-9.180Q69.733-9.387 69.292-9.387Q68.643-9.387 68.399-8.971Q68.155-8.555 68.155-7.868Q68.155-7.423 68.243-7.071Q68.331-6.720 68.583-6.497Q68.835-6.274 69.292-6.274M73.538-4.524L71.682-4.524L71.682-4.817Q71.952-4.817 72.120-4.862Q72.288-4.907 72.288-5.083L72.288-8.907Q72.288-9.114 72.132-9.167Q71.975-9.220 71.682-9.220L71.682-9.516L72.905-9.602L72.905-9.137Q73.136-9.360 73.450-9.481Q73.764-9.602 74.104-9.602Q74.577-9.602 74.981-9.356Q75.386-9.110 75.618-8.694Q75.850-8.278 75.850-7.802Q75.850-7.427 75.702-7.098Q75.553-6.770 75.284-6.518Q75.014-6.266 74.671-6.132Q74.327-5.997 73.968-5.997Q73.678-5.997 73.407-6.118Q73.136-6.239 72.928-6.450L72.928-5.083Q72.928-4.907 73.096-4.862Q73.264-4.817 73.538-4.817L73.538-4.524M72.928-8.739L72.928-6.899Q73.081-6.610 73.343-6.430Q73.604-6.251 73.913-6.251Q74.198-6.251 74.421-6.389Q74.643-6.528 74.796-6.759Q74.948-6.989 75.026-7.261Q75.104-7.532 75.104-7.802Q75.104-8.134 74.979-8.491Q74.854-8.848 74.606-9.085Q74.358-9.321 74.011-9.321Q73.686-9.321 73.391-9.165Q73.096-9.009 72.928-8.739",[605],[589,2210,2211],{"transform":2179},[594,2212],{"d":2213,"fill":591,"stroke":591,"className":2214,"style":2184},"M76.618-7.770Q76.618-8.274 76.874-8.706Q77.130-9.137 77.566-9.389Q78.001-9.641 78.501-9.641Q78.888-9.641 79.230-9.497Q79.571-9.352 79.833-9.091Q80.095-8.829 80.237-8.493Q80.380-8.157 80.380-7.770Q80.380-7.278 80.116-6.868Q79.853-6.458 79.423-6.227Q78.993-5.997 78.501-5.997Q78.009-5.997 77.575-6.229Q77.142-6.462 76.880-6.870Q76.618-7.278 76.618-7.770M78.501-6.274Q78.958-6.274 79.210-6.497Q79.462-6.720 79.550-7.071Q79.638-7.423 79.638-7.868Q79.638-8.298 79.544-8.636Q79.450-8.973 79.196-9.180Q78.942-9.387 78.501-9.387Q77.853-9.387 77.609-8.971Q77.364-8.555 77.364-7.868Q77.364-7.423 77.452-7.071Q77.540-6.720 77.792-6.497Q78.044-6.274 78.501-6.274M82.778-6.075L80.946-6.075L80.946-6.372Q81.220-6.372 81.388-6.419Q81.556-6.466 81.556-6.634L81.556-10.794Q81.556-11.009 81.493-11.104Q81.431-11.200 81.312-11.221Q81.192-11.243 80.946-11.243L80.946-11.540L82.169-11.626L82.169-6.634Q82.169-6.466 82.337-6.419Q82.505-6.372 82.778-6.372L82.778-6.075M83.224-7.770Q83.224-8.274 83.480-8.706Q83.735-9.137 84.171-9.389Q84.607-9.641 85.107-9.641Q85.493-9.641 85.835-9.497Q86.177-9.352 86.439-9.091Q86.700-8.829 86.843-8.493Q86.985-8.157 86.985-7.770Q86.985-7.278 86.722-6.868Q86.458-6.458 86.028-6.227Q85.599-5.997 85.107-5.997Q84.614-5.997 84.181-6.229Q83.747-6.462 83.485-6.870Q83.224-7.278 83.224-7.770M85.107-6.274Q85.564-6.274 85.816-6.497Q86.067-6.720 86.155-7.071Q86.243-7.423 86.243-7.868Q86.243-8.298 86.150-8.636Q86.056-8.973 85.802-9.180Q85.548-9.387 85.107-9.387Q84.458-9.387 84.214-8.971Q83.970-8.555 83.970-7.868Q83.970-7.423 84.058-7.071Q84.146-6.720 84.398-6.497Q84.650-6.274 85.107-6.274M87.470-5.466Q87.470-5.747 87.681-5.958Q87.892-6.169 88.177-6.259Q88.021-6.384 87.942-6.573Q87.864-6.763 87.864-6.962Q87.864-7.317 88.095-7.610Q87.728-7.950 87.728-8.419Q87.728-8.770 87.931-9.040Q88.134-9.309 88.454-9.456Q88.775-9.602 89.118-9.602Q89.638-9.602 90.009-9.321Q90.372-9.692 90.919-9.692Q91.099-9.692 91.226-9.565Q91.353-9.438 91.353-9.259Q91.353-9.153 91.275-9.075Q91.196-8.997 91.087-8.997Q90.978-8.997 90.901-9.073Q90.825-9.149 90.825-9.259Q90.825-9.360 90.864-9.411Q90.872-9.419 90.876-9.425Q90.880-9.430 90.880-9.434Q90.505-9.434 90.185-9.180Q90.505-8.841 90.505-8.419Q90.505-8.149 90.388-7.932Q90.271-7.716 90.066-7.557Q89.860-7.399 89.618-7.317Q89.376-7.235 89.118-7.235Q88.900-7.235 88.687-7.294Q88.474-7.352 88.278-7.473Q88.185-7.333 88.185-7.153Q88.185-6.946 88.321-6.794Q88.458-6.641 88.665-6.641L89.360-6.641Q89.849-6.641 90.261-6.557Q90.673-6.473 90.952-6.216Q91.232-5.958 91.232-5.466Q91.232-5.102 90.911-4.870Q90.591-4.638 90.150-4.536Q89.708-4.434 89.353-4.434Q88.997-4.434 88.554-4.536Q88.110-4.638 87.790-4.870Q87.470-5.102 87.470-5.466M87.974-5.466Q87.974-5.270 88.118-5.122Q88.263-4.973 88.476-4.884Q88.689-4.794 88.929-4.747Q89.169-4.700 89.353-4.700Q89.595-4.700 89.925-4.778Q90.255-4.856 90.491-5.030Q90.728-5.204 90.728-5.466Q90.728-5.872 90.317-5.981Q89.907-6.091 89.345-6.091L88.665-6.091Q88.396-6.091 88.185-5.913Q87.974-5.735 87.974-5.466M89.118-7.501Q89.841-7.501 89.841-8.419Q89.841-9.341 89.118-9.341Q88.392-9.341 88.392-8.419Q88.392-7.501 89.118-7.501M93.575-6.075L91.798-6.075L91.798-6.372Q92.071-6.372 92.239-6.419Q92.407-6.466 92.407-6.634L92.407-8.770Q92.407-8.985 92.351-9.081Q92.294-9.177 92.181-9.198Q92.067-9.220 91.821-9.220L91.821-9.516L93.021-9.602L93.021-6.634Q93.021-6.466 93.167-6.419Q93.314-6.372 93.575-6.372L93.575-6.075M92.134-10.997Q92.134-11.188 92.269-11.319Q92.403-11.450 92.599-11.450Q92.720-11.450 92.823-11.387Q92.927-11.325 92.989-11.221Q93.052-11.118 93.052-10.997Q93.052-10.802 92.921-10.667Q92.790-10.532 92.599-10.532Q92.400-10.532 92.267-10.665Q92.134-10.798 92.134-10.997M94.118-7.802Q94.118-8.298 94.368-8.723Q94.618-9.149 95.038-9.395Q95.458-9.641 95.958-9.641Q96.497-9.641 96.888-9.516Q97.278-9.391 97.278-8.977Q97.278-8.872 97.228-8.780Q97.177-8.688 97.085-8.637Q96.993-8.587 96.884-8.587Q96.778-8.587 96.687-8.637Q96.595-8.688 96.544-8.780Q96.493-8.872 96.493-8.977Q96.493-9.200 96.661-9.305Q96.439-9.364 95.966-9.364Q95.669-9.364 95.454-9.225Q95.239-9.087 95.109-8.856Q94.978-8.626 94.919-8.356Q94.860-8.087 94.860-7.802Q94.860-7.407 94.993-7.057Q95.126-6.708 95.398-6.491Q95.669-6.274 96.067-6.274Q96.442-6.274 96.718-6.491Q96.993-6.708 97.095-7.067Q97.110-7.130 97.173-7.130L97.278-7.130Q97.314-7.130 97.339-7.102Q97.364-7.075 97.364-7.036L97.364-7.013Q97.232-6.532 96.847-6.264Q96.462-5.997 95.958-5.997Q95.595-5.997 95.261-6.134Q94.927-6.270 94.667-6.520Q94.407-6.770 94.263-7.106Q94.118-7.442 94.118-7.802M97.950-6.907Q97.950-7.391 98.353-7.686Q98.755-7.981 99.306-8.100Q99.857-8.220 100.349-8.220L100.349-8.509Q100.349-8.735 100.234-8.942Q100.118-9.149 99.921-9.268Q99.724-9.387 99.493-9.387Q99.067-9.387 98.782-9.282Q98.853-9.255 98.900-9.200Q98.946-9.145 98.972-9.075Q98.997-9.005 98.997-8.930Q98.997-8.825 98.946-8.733Q98.896-8.641 98.804-8.591Q98.712-8.540 98.607-8.540Q98.501-8.540 98.409-8.591Q98.317-8.641 98.267-8.733Q98.216-8.825 98.216-8.930Q98.216-9.348 98.605-9.495Q98.993-9.641 99.493-9.641Q99.825-9.641 100.179-9.511Q100.532-9.380 100.761-9.126Q100.989-8.872 100.989-8.524L100.989-6.723Q100.989-6.591 101.062-6.481Q101.134-6.372 101.263-6.372Q101.388-6.372 101.456-6.477Q101.525-6.583 101.525-6.723L101.525-7.235L101.806-7.235L101.806-6.723Q101.806-6.520 101.689-6.362Q101.571-6.204 101.390-6.120Q101.208-6.036 101.005-6.036Q100.775-6.036 100.622-6.208Q100.470-6.380 100.439-6.610Q100.278-6.329 99.970-6.163Q99.661-5.997 99.310-5.997Q98.798-5.997 98.374-6.220Q97.950-6.442 97.950-6.907M98.638-6.907Q98.638-6.622 98.864-6.436Q99.091-6.251 99.384-6.251Q99.630-6.251 99.855-6.368Q100.079-6.485 100.214-6.688Q100.349-6.891 100.349-7.145L100.349-7.977Q100.083-7.977 99.798-7.923Q99.513-7.868 99.241-7.739Q98.970-7.610 98.804-7.403Q98.638-7.196 98.638-6.907M104.013-6.075L102.181-6.075L102.181-6.372Q102.454-6.372 102.622-6.419Q102.790-6.466 102.790-6.634L102.790-10.794Q102.790-11.009 102.728-11.104Q102.665-11.200 102.546-11.221Q102.427-11.243 102.181-11.243L102.181-11.540L103.403-11.626L103.403-6.634Q103.403-6.466 103.571-6.419Q103.739-6.372 104.013-6.372",[605],[589,2216,2217],{"transform":2179},[594,2218],{"d":2219,"fill":591,"stroke":591,"className":2220,"style":2184},"M107.313-7.770Q107.313-8.274 107.569-8.706Q107.825-9.137 108.261-9.389Q108.696-9.641 109.196-9.641Q109.583-9.641 109.925-9.497Q110.266-9.352 110.528-9.091Q110.790-8.829 110.932-8.493Q111.075-8.157 111.075-7.770Q111.075-7.278 110.811-6.868Q110.548-6.458 110.118-6.227Q109.688-5.997 109.196-5.997Q108.704-5.997 108.270-6.229Q107.837-6.462 107.575-6.870Q107.313-7.278 107.313-7.770M109.196-6.274Q109.653-6.274 109.905-6.497Q110.157-6.720 110.245-7.071Q110.333-7.423 110.333-7.868Q110.333-8.298 110.239-8.636Q110.145-8.973 109.891-9.180Q109.638-9.387 109.196-9.387Q108.548-9.387 108.304-8.971Q108.059-8.555 108.059-7.868Q108.059-7.423 108.147-7.071Q108.235-6.720 108.487-6.497Q108.739-6.274 109.196-6.274M113.567-6.075L111.587-6.075L111.587-6.372Q111.856-6.372 112.024-6.417Q112.192-6.462 112.192-6.634L112.192-8.770Q112.192-8.985 112.130-9.081Q112.067-9.177 111.950-9.198Q111.833-9.220 111.587-9.220L111.587-9.516L112.755-9.602L112.755-8.817Q112.833-9.028 112.985-9.214Q113.138-9.399 113.337-9.501Q113.536-9.602 113.763-9.602Q114.009-9.602 114.200-9.458Q114.391-9.313 114.391-9.083Q114.391-8.927 114.286-8.817Q114.180-8.708 114.024-8.708Q113.868-8.708 113.759-8.817Q113.649-8.927 113.649-9.083Q113.649-9.243 113.755-9.348Q113.430-9.348 113.216-9.120Q113.001-8.891 112.905-8.552Q112.809-8.212 112.809-7.907L112.809-6.634Q112.809-6.466 113.036-6.419Q113.263-6.372 113.567-6.372L113.567-6.075M116.688-5.997Q116.208-5.997 115.800-6.241Q115.391-6.485 115.153-6.899Q114.915-7.313 114.915-7.802Q114.915-8.294 115.173-8.710Q115.430-9.126 115.862-9.364Q116.294-9.602 116.786-9.602Q117.407-9.602 117.856-9.165L117.856-10.794Q117.856-11.009 117.794-11.104Q117.731-11.200 117.614-11.221Q117.497-11.243 117.251-11.243L117.251-11.540L118.473-11.626L118.473-6.817Q118.473-6.606 118.536-6.511Q118.598-6.415 118.716-6.393Q118.833-6.372 119.083-6.372L119.083-6.075L117.833-5.997L117.833-6.481Q117.368-5.997 116.688-5.997M116.755-6.251Q117.095-6.251 117.388-6.442Q117.680-6.634 117.833-6.930L117.833-8.762Q117.684-9.036 117.423-9.192Q117.161-9.348 116.848-9.348Q116.223-9.348 115.940-8.901Q115.657-8.454 115.657-7.794Q115.657-7.149 115.909-6.700Q116.161-6.251 116.755-6.251M119.591-7.829Q119.591-8.309 119.823-8.725Q120.055-9.141 120.466-9.391Q120.876-9.641 121.352-9.641Q122.083-9.641 122.481-9.200Q122.880-8.759 122.880-8.028Q122.880-7.923 122.786-7.899L120.337-7.899L120.337-7.829Q120.337-7.419 120.458-7.063Q120.579-6.708 120.850-6.491Q121.122-6.274 121.552-6.274Q121.915-6.274 122.212-6.503Q122.509-6.731 122.610-7.083Q122.618-7.130 122.704-7.145L122.786-7.145Q122.880-7.118 122.880-7.036Q122.880-7.028 122.872-6.997Q122.809-6.770 122.671-6.587Q122.532-6.403 122.341-6.270Q122.149-6.138 121.930-6.067Q121.712-5.997 121.473-5.997Q121.102-5.997 120.764-6.134Q120.427-6.270 120.159-6.522Q119.891-6.774 119.741-7.114Q119.591-7.454 119.591-7.829M120.345-8.137L122.305-8.137Q122.305-8.442 122.204-8.733Q122.102-9.024 121.886-9.206Q121.669-9.387 121.352-9.387Q121.052-9.387 120.821-9.200Q120.591-9.012 120.468-8.721Q120.345-8.430 120.345-8.137M125.376-6.075L123.395-6.075L123.395-6.372Q123.665-6.372 123.833-6.417Q124.001-6.462 124.001-6.634L124.001-8.770Q124.001-8.985 123.938-9.081Q123.876-9.177 123.759-9.198Q123.641-9.220 123.395-9.220L123.395-9.516L124.563-9.602L124.563-8.817Q124.641-9.028 124.794-9.214Q124.946-9.399 125.145-9.501Q125.345-9.602 125.571-9.602Q125.817-9.602 126.009-9.458Q126.200-9.313 126.200-9.083Q126.200-8.927 126.095-8.817Q125.989-8.708 125.833-8.708Q125.677-8.708 125.567-8.817Q125.458-8.927 125.458-9.083Q125.458-9.243 125.563-9.348Q125.239-9.348 125.024-9.120Q124.809-8.891 124.714-8.552Q124.618-8.212 124.618-7.907L124.618-6.634Q124.618-6.466 124.845-6.419Q125.071-6.372 125.376-6.372",[605],[589,2222,2224,2227],{"fill":2223},"var(--tk-soft-accent)",[594,2225],{"d":2226},"M-19.3 102.045c0-6.285-5.095-11.38-11.38-11.38s-11.382 5.095-11.382 11.38 5.096 11.382 11.381 11.382S-19.3 108.33-19.3 102.045Zm-11.38 0",[589,2228,2230],{"transform":2229},"translate(-2.45 110.058)",[594,2231],{"d":1986,"fill":591,"stroke":591,"className":2232,"style":606},[605],[589,2234,2236],{"fill":2235,"stroke":2235},"gray",[589,2237,2239],{"transform":2238},"translate(-3.986 134.561)",[594,2240],{"d":2241,"fill":2235,"stroke":2235,"className":2242,"style":2077},"M-27.355-6.075L-29.885-6.075L-29.885-6.355Q-28.917-6.355-28.917-6.564L-28.917-10.183Q-29.310-9.995-29.932-9.995L-29.932-10.276Q-29.515-10.276-29.151-10.377Q-28.787-10.477-28.531-10.723L-28.405-10.723Q-28.340-10.706-28.323-10.638L-28.323-6.564Q-28.323-6.355-27.355-6.355L-27.355-6.075M-24.710-5.935Q-25.346-5.935-25.710-6.280Q-26.074-6.625-26.209-7.150Q-26.344-7.675-26.344-8.300Q-26.344-9.325-25.988-10.024Q-25.633-10.723-24.710-10.723Q-23.784-10.723-23.431-10.024Q-23.079-9.325-23.079-8.300Q-23.079-7.675-23.214-7.150Q-23.349-6.625-23.712-6.280Q-24.074-5.935-24.710-5.935M-24.710-6.160Q-24.272-6.160-24.059-6.535Q-23.845-6.909-23.796-7.376Q-23.746-7.842-23.746-8.420Q-23.746-8.973-23.796-9.401Q-23.845-9.828-24.057-10.163Q-24.269-10.498-24.710-10.498Q-25.052-10.498-25.255-10.291Q-25.458-10.084-25.546-9.772Q-25.633-9.459-25.655-9.143Q-25.677-8.826-25.677-8.420Q-25.677-8.003-25.655-7.661Q-25.633-7.319-25.544-6.971Q-25.455-6.622-25.250-6.391Q-25.045-6.160-24.710-6.160",[605],[589,2244,2245,2248],{"fill":2223},[594,2246],{"d":2247},"M14.843 102.045c0-6.285-5.095-11.38-11.38-11.38S-7.92 95.76-7.92 102.044s5.096 11.382 11.381 11.382 11.381-5.096 11.381-11.382Zm-11.38 0",[589,2249,2251],{"transform":2250},"translate(32.161 111.245)",[594,2252],{"d":1996,"fill":591,"stroke":591,"className":2253,"style":606},[605],[589,2255,2256],{"fill":2235,"stroke":2235},[589,2257,2259],{"transform":2258},"translate(32.15 134.561)",[594,2260],{"d":2261,"fill":2235,"stroke":2235,"className":2262,"style":2077},"M-29.707-6.389Q-29.587-6.273-29.410-6.231Q-29.232-6.188-29.016-6.188Q-28.777-6.188-28.567-6.297Q-28.357-6.407-28.203-6.589Q-28.049-6.772-27.950-7.005Q-27.783-7.432-27.783-8.252Q-27.933-7.958-28.196-7.779Q-28.459-7.599-28.777-7.599Q-29.211-7.599-29.558-7.808Q-29.905-8.016-30.103-8.377Q-30.302-8.738-30.302-9.161Q-30.302-9.496-30.172-9.785Q-30.042-10.074-29.811-10.288Q-29.580-10.501-29.281-10.612Q-28.982-10.723-28.651-10.723Q-27.793-10.723-27.437-10.009Q-27.082-9.295-27.082-8.338Q-27.082-7.921-27.210-7.493Q-27.338-7.066-27.595-6.711Q-27.851-6.355-28.213-6.145Q-28.576-5.935-29.016-5.935Q-29.471-5.935-29.789-6.123Q-30.107-6.311-30.107-6.735Q-30.107-6.885-30.008-6.984Q-29.909-7.083-29.758-7.083Q-29.690-7.083-29.623-7.056Q-29.556-7.029-29.512-6.984Q-29.468-6.940-29.440-6.873Q-29.413-6.806-29.413-6.735Q-29.413-6.605-29.493-6.507Q-29.574-6.410-29.707-6.389M-28.736-7.825Q-28.442-7.825-28.227-8.003Q-28.012-8.180-27.904-8.456Q-27.796-8.731-27.796-9.021Q-27.796-9.066-27.798-9.093Q-27.800-9.120-27.803-9.155Q-27.800-9.165-27.798-9.172Q-27.796-9.179-27.796-9.189Q-27.796-9.691-27.994-10.091Q-28.193-10.491-28.651-10.491Q-29.218-10.491-29.411-10.132Q-29.604-9.773-29.604-9.161Q-29.604-8.775-29.550-8.492Q-29.495-8.208-29.300-8.016Q-29.105-7.825-28.736-7.825",[605],[589,2264,2265,2268],{"fill":2223},[594,2266],{"d":2267},"M48.987 102.045c0-6.285-5.096-11.38-11.381-11.38s-11.381 5.095-11.381 11.38 5.095 11.382 11.38 11.382 11.382-5.096 11.382-11.382Zm-11.381 0",[589,2269,2271],{"transform":2270},"translate(65.89 111.245)",[594,2272],{"d":2016,"fill":591,"stroke":591,"className":2273,"style":606},[605],[589,2275,2276],{"fill":2235,"stroke":2235},[589,2277,2279],{"transform":2278},"translate(66.293 134.561)",[594,2280],{"d":2281,"fill":2235,"stroke":2235,"className":2282,"style":2077},"M-30.302-7.152Q-30.302-7.593-29.999-7.914Q-29.697-8.235-29.245-8.427L-29.485-8.567Q-29.755-8.727-29.921-8.985Q-30.086-9.243-30.086-9.541Q-30.086-9.893-29.881-10.165Q-29.676-10.436-29.355-10.580Q-29.034-10.723-28.692-10.723Q-28.370-10.723-28.047-10.607Q-27.724-10.491-27.513-10.250Q-27.301-10.009-27.301-9.674Q-27.301-9.312-27.545-9.049Q-27.789-8.785-28.169-8.608L-27.769-8.372Q-27.574-8.259-27.415-8.090Q-27.256-7.921-27.169-7.712Q-27.082-7.504-27.082-7.271Q-27.082-6.868-27.316-6.564Q-27.550-6.260-27.924-6.097Q-28.299-5.935-28.692-5.935Q-29.078-5.935-29.447-6.072Q-29.816-6.208-30.059-6.485Q-30.302-6.762-30.302-7.152M-29.854-7.152Q-29.854-6.865-29.685-6.642Q-29.515-6.420-29.247-6.304Q-28.979-6.188-28.692-6.188Q-28.254-6.188-27.892-6.405Q-27.530-6.622-27.530-7.029Q-27.530-7.230-27.658-7.408Q-27.786-7.586-27.964-7.685L-28.986-8.280Q-29.225-8.170-29.423-8.004Q-29.621-7.839-29.738-7.623Q-29.854-7.408-29.854-7.152M-29.331-9.281L-28.411-8.748Q-28.104-8.908-27.902-9.141Q-27.701-9.373-27.701-9.674Q-27.701-9.913-27.846-10.103Q-27.991-10.293-28.223-10.392Q-28.456-10.491-28.692-10.491Q-28.914-10.491-29.143-10.421Q-29.372-10.351-29.529-10.194Q-29.686-10.036-29.686-9.807Q-29.686-9.493-29.331-9.281",[605],[589,2284,2285,2288],{"fill":2223},[594,2286],{"d":2287},"M83.13 102.045c0-6.285-5.095-11.38-11.38-11.38s-11.382 5.095-11.382 11.38 5.096 11.382 11.381 11.382 11.381-5.096 11.381-11.382Zm-11.38 0",[589,2289,2291],{"transform":2290},"translate(100.28 110.058)",[594,2292],{"d":2026,"fill":591,"stroke":591,"className":2293,"style":606},[605],[589,2295,2296],{"fill":2235,"stroke":2235},[589,2297,2299],{"transform":2298},"translate(100.437 134.561)",[594,2300],{"d":2301,"fill":2235,"stroke":2235,"className":2302,"style":2077},"M-29.874-6.837L-29.905-6.837Q-29.768-6.540-29.471-6.364Q-29.174-6.188-28.846-6.188Q-28.483-6.188-28.256-6.366Q-28.029-6.543-27.935-6.832Q-27.841-7.121-27.841-7.483Q-27.841-7.798-27.895-8.083Q-27.950-8.368-28.123-8.574Q-28.295-8.779-28.610-8.779Q-28.883-8.779-29.066-8.712Q-29.249-8.645-29.353-8.556Q-29.457-8.468-29.553-8.358Q-29.649-8.249-29.693-8.239L-29.772-8.239Q-29.844-8.256-29.861-8.327L-29.861-10.645Q-29.861-10.679-29.837-10.701Q-29.813-10.723-29.779-10.723L-29.751-10.723Q-29.464-10.607-29.196-10.553Q-28.928-10.498-28.651-10.498Q-28.374-10.498-28.104-10.553Q-27.834-10.607-27.554-10.723L-27.530-10.723Q-27.495-10.723-27.472-10.700Q-27.448-10.676-27.448-10.645L-27.448-10.576Q-27.448-10.549-27.468-10.529Q-27.742-10.214-28.126-10.038Q-28.511-9.862-28.924-9.862Q-29.263-9.862-29.580-9.948L-29.580-8.666Q-29.184-9.001-28.610-9.001Q-28.206-9.001-27.870-8.791Q-27.533-8.580-27.340-8.228Q-27.147-7.876-27.147-7.476Q-27.147-7.145-27.287-6.859Q-27.427-6.574-27.671-6.364Q-27.916-6.154-28.218-6.044Q-28.521-5.935-28.839-5.935Q-29.198-5.935-29.524-6.099Q-29.850-6.263-30.045-6.555Q-30.240-6.847-30.240-7.210Q-30.240-7.360-30.134-7.466Q-30.028-7.572-29.874-7.572Q-29.721-7.572-29.616-7.468Q-29.512-7.364-29.512-7.210Q-29.512-7.053-29.616-6.945Q-29.721-6.837-29.874-6.837",[605],[589,2304,2305,2308],{"fill":2223},[594,2306],{"d":2307},"M117.274 102.045c0-6.285-5.096-11.38-11.382-11.38s-11.38 5.095-11.38 11.38 5.095 11.382 11.38 11.382 11.382-5.096 11.382-11.382Zm-11.382 0",[589,2309,2311],{"transform":2310},"translate(134.571 110.058)",[594,2312],{"d":2006,"fill":591,"stroke":591,"className":2313,"style":606},[605],[589,2315,2316],{"fill":2235,"stroke":2235},[589,2317,2319],{"transform":2318},"translate(134.58 134.561)",[594,2320],{"d":2321,"fill":2235,"stroke":2235,"className":2322,"style":2077},"M-29.885-6.622Q-29.765-6.465-29.574-6.366Q-29.382-6.266-29.167-6.227Q-28.952-6.188-28.729-6.188Q-28.432-6.188-28.237-6.343Q-28.042-6.499-27.952-6.753Q-27.861-7.008-27.861-7.292Q-27.861-7.586-27.953-7.837Q-28.046-8.088-28.244-8.244Q-28.442-8.399-28.736-8.399L-29.252-8.399Q-29.280-8.399-29.305-8.425Q-29.331-8.450-29.331-8.474L-29.331-8.546Q-29.331-8.577-29.305-8.599Q-29.280-8.621-29.252-8.621L-28.811-8.652Q-28.449-8.652-28.229-9.009Q-28.008-9.367-28.008-9.756Q-28.008-10.084-28.203-10.288Q-28.398-10.491-28.729-10.491Q-29.016-10.491-29.269-10.407Q-29.522-10.324-29.686-10.136Q-29.539-10.136-29.439-10.021Q-29.338-9.907-29.338-9.756Q-29.338-9.606-29.444-9.496Q-29.550-9.387-29.707-9.387Q-29.868-9.387-29.977-9.496Q-30.086-9.606-30.086-9.756Q-30.086-10.081-29.878-10.300Q-29.669-10.518-29.353-10.621Q-29.037-10.723-28.729-10.723Q-28.411-10.723-28.083-10.619Q-27.755-10.515-27.528-10.293Q-27.301-10.071-27.301-9.756Q-27.301-9.322-27.588-8.997Q-27.875-8.673-28.309-8.526Q-27.998-8.461-27.718-8.295Q-27.437-8.129-27.260-7.871Q-27.082-7.613-27.082-7.292Q-27.082-6.882-27.326-6.572Q-27.571-6.263-27.952-6.099Q-28.333-5.935-28.729-5.935Q-29.098-5.935-29.456-6.048Q-29.813-6.160-30.057-6.410Q-30.302-6.659-30.302-7.029Q-30.302-7.200-30.185-7.312Q-30.069-7.425-29.898-7.425Q-29.789-7.425-29.698-7.374Q-29.608-7.323-29.553-7.230Q-29.498-7.138-29.498-7.029Q-29.498-6.861-29.611-6.742Q-29.724-6.622-29.885-6.622",[605],[594,2324],{"fill":596,"d":2325},"M-20.101 97.335c4.625-2.06 8.358-2.06 10.175-1.25",[594,2327],{"d":2328,"style":1051},"m-7.637 97.103-2.726-2.692.528 1.714-1.626.754Z",[594,2330],{"fill":596,"d":2331},"M82.329 97.335c4.625-2.06 8.358-2.06 10.175-1.25",[594,2333],{"d":2334,"style":1051},"m94.793 97.103-2.725-2.692.527 1.714-1.626.754Z",[594,2336],{"fill":596,"d":2337},"M10.906 93.174c13.386-15.952 40.014-15.952 51.422-2.356",[594,2339],{"d":2340,"style":1020},"m63.94 92.738-1.27-3.614-.277 1.77-1.793-.034Z",[594,2342],{"fill":596,"d":2343},"M8.539 91.637c15.775-32.343 76.502-32.343 90.929-2.764",[594,2345],{"d":2346,"style":1051},"m100.566 91.125-.357-3.814-.697 1.652-1.731-.468Z",[594,2348],{"fill":596,"d":2349},"M-23.55 111.171c12.97 16.602 41.054 16.602 52.132 2.423",[594,2351],{"d":2352,"style":1020},"m30.125 111.62-3.271 1.993 1.79-.097.338 1.76Z",[594,2354],{"fill":596,"d":2355},"M48.343 106.384c4.58 1.85 8.088 1.85 9.817 1.152",[594,2357],{"d":2358,"style":1020},"m60.484 106.597-3.83.09 1.599.811-.587 1.694Z",[685,2360,2362,2363,2378,2379,2430],{"className":2361},[688],"DFS finish times on the DAG (left); sorting by decreasing ",[427,2364,2366],{"className":2365},[430],[427,2367,2369],{"className":2368,"ariaHidden":435},[434],[427,2370,2372,2375],{"className":2371},[439],[427,2373],{"className":2374,"style":911},[443],[427,2376,1332],{"className":2377,"style":1331},[448,449]," gives the topological order ",[427,2380,2382],{"className":2381},[430],[427,2383,2385],{"className":2384,"ariaHidden":435},[434],[427,2386,2388,2391,2394,2397,2400,2403,2406,2409,2412,2415,2418,2421,2424,2427],{"className":2387},[439],[427,2389],{"className":2390,"style":911},[443],[427,2392,404],{"className":2393},[448,449],[427,2395,814],{"className":2396},[813],[427,2398],{"className":2399,"style":818},[519],[427,2401,467],{"className":2402},[448,449],[427,2404,814],{"className":2405},[813],[427,2407],{"className":2408,"style":818},[519],[427,2410,933],{"className":2411},[448,449],[427,2413,814],{"className":2414},[813],[427,2416],{"className":2417,"style":818},[519],[427,2419,943],{"className":2420},[448,449],[427,2422,814],{"className":2423},[813],[427,2425],{"className":2426,"style":818},[519],[427,2428,953],{"className":2429},[448,449]," with all edges forward (right).",[2432,2433,2435],"h3",{"id":2434},"why-a-topological-order-matters-the-evaluation-dag","Why a topological order matters: the evaluation DAG",[381,2437,2438,2439,2643,2644,2678,2679,468,2727,2775,2776,2779,2780,2783,2784,2838,2839,2950,2951,3003,3004,753],{},"A problem that looks unrelated brings topological order to life:\ncomputing Fibonacci numbers ",[427,2440,2442],{"className":2441},[430],[427,2443,2445,2520,2588],{"className":2444,"ariaHidden":435},[434],[427,2446,2448,2452,2511,2514,2517],{"className":2447},[439],[427,2449],{"className":2450,"style":2451},[443],"height:0.8333em;vertical-align:-0.15em;",[427,2453,2455,2460],{"className":2454},[448],[427,2456,2459],{"className":2457,"style":2458},[448,449],"margin-right:0.1389em;","F",[427,2461,2464],{"className":2462},[2463],"msupsub",[427,2465,2469,2502],{"className":2466},[2467,2468],"vlist-t","vlist-t2",[427,2470,2473,2497],{"className":2471},[2472],"vlist-r",[427,2474,2478],{"className":2475,"style":2477},[2476],"vlist","height:0.1514em;",[427,2479,2481,2486],{"style":2480},"top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;",[427,2482],{"className":2483,"style":2485},[2484],"pstrut","height:2.7em;",[427,2487,2493],{"className":2488},[2489,2490,2491,2492],"sizing","reset-size6","size3","mtight",[427,2494,2496],{"className":2495},[448,449,2492],"n",[427,2498,2501],{"className":2499},[2500],"vlist-s","​",[427,2503,2505],{"className":2504},[2472],[427,2506,2509],{"className":2507,"style":2508},[2476],"height:0.15em;",[427,2510],{},[427,2512],{"className":2513,"style":520},[519],[427,2515,789],{"className":2516},[524],[427,2518],{"className":2519,"style":520},[519],[427,2521,2523,2527,2579,2582,2585],{"className":2522},[439],[427,2524],{"className":2525,"style":2526},[443],"height:0.8917em;vertical-align:-0.2083em;",[427,2528,2530,2533],{"className":2529},[448],[427,2531,2459],{"className":2532,"style":2458},[448,449],[427,2534,2536],{"className":2535},[2463],[427,2537,2539,2570],{"className":2538},[2467,2468],[427,2540,2542,2567],{"className":2541},[2472],[427,2543,2546],{"className":2544,"style":2545},[2476],"height:0.3011em;",[427,2547,2548,2551],{"style":2480},[427,2549],{"className":2550,"style":2485},[2484],[427,2552,2554],{"className":2553},[2489,2490,2491,2492],[427,2555,2557,2560,2564],{"className":2556},[448,2492],[427,2558,2496],{"className":2559},[448,449,2492],[427,2561,2563],{"className":2562},[1892,2492],"−",[427,2565,1199],{"className":2566},[448,2492],[427,2568,2501],{"className":2569},[2500],[427,2571,2573],{"className":2572},[2472],[427,2574,2577],{"className":2575,"style":2576},[2476],"height:0.2083em;",[427,2578],{},[427,2580],{"className":2581,"style":808},[519],[427,2583,1893],{"className":2584},[1892],[427,2586],{"className":2587,"style":808},[519],[427,2589,2591,2594],{"className":2590},[439],[427,2592],{"className":2593,"style":2526},[443],[427,2595,2597,2600],{"className":2596},[448],[427,2598,2459],{"className":2599,"style":2458},[448,449],[427,2601,2603],{"className":2602},[2463],[427,2604,2606,2635],{"className":2605},[2467,2468],[427,2607,2609,2632],{"className":2608},[2472],[427,2610,2612],{"className":2611,"style":2545},[2476],[427,2613,2614,2617],{"style":2480},[427,2615],{"className":2616,"style":2485},[2484],[427,2618,2620],{"className":2619},[2489,2490,2491,2492],[427,2621,2623,2626,2629],{"className":2622},[448,2492],[427,2624,2496],{"className":2625},[448,449,2492],[427,2627,2563],{"className":2628},[1892,2492],[427,2630,1457],{"className":2631},[448,2492],[427,2633,2501],{"className":2634},[2500],[427,2636,2638],{"className":2637},[2472],[427,2639,2641],{"className":2640,"style":2576},[2476],[427,2642],{},". The naive recursion\n",[427,2645,2647],{"className":2646},[430],[427,2648,2650],{"className":2649,"ariaHidden":435},[434],[427,2651,2653,2656,2669,2672,2675],{"className":2652},[439],[427,2654],{"className":2655,"style":799},[443],[427,2657,2661],{"className":2658},[2659,2660],"enclosing","textsc",[427,2662,2665],{"className":2663},[448,2664],"text",[427,2666,2668],{"className":2667},[448],"Fibo",[427,2670,804],{"className":2671},[803],[427,2673,2496],{"className":2674},[448,449],[427,2676,828],{"className":2677},[827]," branches into ",[427,2680,2682],{"className":2681},[430],[427,2683,2685,2715],{"className":2684,"ariaHidden":435},[434],[427,2686,2688,2691,2700,2703,2706,2709,2712],{"className":2687},[439],[427,2689],{"className":2690,"style":799},[443],[427,2692,2694],{"className":2693},[2659,2660],[427,2695,2697],{"className":2696},[448,2664],[427,2698,2668],{"className":2699},[448],[427,2701,804],{"className":2702},[803],[427,2704,2496],{"className":2705},[448,449],[427,2707],{"className":2708,"style":808},[519],[427,2710,2563],{"className":2711},[1892],[427,2713],{"className":2714,"style":808},[519],[427,2716,2718,2721,2724],{"className":2717},[439],[427,2719],{"className":2720,"style":799},[443],[427,2722,1199],{"className":2723},[448],[427,2725,828],{"className":2726},[827],[427,2728,2730],{"className":2729},[430],[427,2731,2733,2763],{"className":2732,"ariaHidden":435},[434],[427,2734,2736,2739,2748,2751,2754,2757,2760],{"className":2735},[439],[427,2737],{"className":2738,"style":799},[443],[427,2740,2742],{"className":2741},[2659,2660],[427,2743,2745],{"className":2744},[448,2664],[427,2746,2668],{"className":2747},[448],[427,2749,804],{"className":2750},[803],[427,2752,2496],{"className":2753},[448,449],[427,2755],{"className":2756,"style":808},[519],[427,2758,2563],{"className":2759},[1892],[427,2761],{"className":2762,"style":808},[519],[427,2764,2766,2769,2772],{"className":2765},[439],[427,2767],{"className":2768,"style":799},[443],[427,2770,1457],{"className":2771},[448],[427,2773,828],{"className":2774},[827],",\nand its call tree is exponential, but ",[385,2777,2778],{},"most of its nodes are duplicates",". If we\ncollapse the identical subproblems into single nodes, the recursion tree becomes\na small ",[390,2781,2782],{},"DAG",": one node per value ",[427,2785,2787],{"className":2786},[430],[427,2788,2790],{"className":2789,"ariaHidden":435},[434],[427,2791,2793,2796],{"className":2792},[439],[427,2794],{"className":2795,"style":2451},[443],[427,2797,2799,2802],{"className":2798},[448],[427,2800,2459],{"className":2801,"style":2458},[448,449],[427,2803,2805],{"className":2804},[2463],[427,2806,2808,2830],{"className":2807},[2467,2468],[427,2809,2811,2827],{"className":2810},[2472],[427,2812,2815],{"className":2813,"style":2814},[2476],"height:0.3117em;",[427,2816,2817,2820],{"style":2480},[427,2818],{"className":2819,"style":2485},[2484],[427,2821,2823],{"className":2822},[2489,2490,2491,2492],[427,2824,2826],{"className":2825},[448,449,2492],"i",[427,2828,2501],{"className":2829},[2500],[427,2831,2833],{"className":2832},[2472],[427,2834,2836],{"className":2835,"style":2508},[2476],[427,2837],{},", with an edge ",[427,2840,2842],{"className":2841},[430],[427,2843,2845,2900],{"className":2844,"ariaHidden":435},[434],[427,2846,2848,2851,2891,2894,2897],{"className":2847},[439],[427,2849],{"className":2850,"style":2451},[443],[427,2852,2854,2857],{"className":2853},[448],[427,2855,2459],{"className":2856,"style":2458},[448,449],[427,2858,2860],{"className":2859},[2463],[427,2861,2863,2883],{"className":2862},[2467,2468],[427,2864,2866,2880],{"className":2865},[2472],[427,2867,2869],{"className":2868,"style":2814},[2476],[427,2870,2871,2874],{"style":2480},[427,2872],{"className":2873,"style":2485},[2484],[427,2875,2877],{"className":2876},[2489,2490,2491,2492],[427,2878,2826],{"className":2879},[448,449,2492],[427,2881,2501],{"className":2882},[2500],[427,2884,2886],{"className":2885},[2472],[427,2887,2889],{"className":2888,"style":2508},[2476],[427,2890],{},[427,2892],{"className":2893,"style":520},[519],[427,2895,525],{"className":2896},[524],[427,2898],{"className":2899,"style":520},[519],[427,2901,2903,2907],{"className":2902},[439],[427,2904],{"className":2905,"style":2906},[443],"height:0.9694em;vertical-align:-0.2861em;",[427,2908,2910,2913],{"className":2909},[448],[427,2911,2459],{"className":2912,"style":2458},[448,449],[427,2914,2916],{"className":2915},[2463],[427,2917,2919,2941],{"className":2918},[2467,2468],[427,2920,2922,2938],{"className":2921},[2472],[427,2923,2925],{"className":2924,"style":2814},[2476],[427,2926,2927,2930],{"style":2480},[427,2928],{"className":2929,"style":2485},[2484],[427,2931,2933],{"className":2932},[2489,2490,2491,2492],[427,2934,2937],{"className":2935,"style":2936},[448,449,2492],"margin-right:0.0572em;","j",[427,2939,2501],{"className":2940},[2500],[427,2942,2944],{"className":2943},[2472],[427,2945,2948],{"className":2946,"style":2947},[2476],"height:0.2861em;",[427,2949],{}," whenever\ncomputing ",[427,2952,2954],{"className":2953},[430],[427,2955,2957],{"className":2956,"ariaHidden":435},[434],[427,2958,2960,2963],{"className":2959},[439],[427,2961],{"className":2962,"style":2451},[443],[427,2964,2966,2969],{"className":2965},[448],[427,2967,2459],{"className":2968,"style":2458},[448,449],[427,2970,2972],{"className":2971},[2463],[427,2973,2975,2995],{"className":2974},[2467,2468],[427,2976,2978,2992],{"className":2977},[2472],[427,2979,2981],{"className":2980,"style":2814},[2476],[427,2982,2983,2986],{"style":2480},[427,2984],{"className":2985,"style":2485},[2484],[427,2987,2989],{"className":2988},[2489,2490,2491,2492],[427,2990,2826],{"className":2991},[448,449,2492],[427,2993,2501],{"className":2994},[2500],[427,2996,2998],{"className":2997},[2472],[427,2999,3001],{"className":3000,"style":2508},[2476],[427,3002],{}," needs ",[427,3005,3007],{"className":3006},[430],[427,3008,3010],{"className":3009,"ariaHidden":435},[434],[427,3011,3013,3016],{"className":3012},[439],[427,3014],{"className":3015,"style":2906},[443],[427,3017,3019,3022],{"className":3018},[448],[427,3020,2459],{"className":3021,"style":2458},[448,449],[427,3023,3025],{"className":3024},[2463],[427,3026,3028,3048],{"className":3027},[2467,2468],[427,3029,3031,3045],{"className":3030},[2472],[427,3032,3034],{"className":3033,"style":2814},[2476],[427,3035,3036,3039],{"style":2480},[427,3037],{"className":3038,"style":2485},[2484],[427,3040,3042],{"className":3041},[2489,2490,2491,2492],[427,3043,2937],{"className":3044,"style":2936},[448,449,2492],[427,3046,2501],{"className":3047},[2500],[427,3049,3051],{"className":3050},[2472],[427,3052,3054],{"className":3053,"style":2947},[2476],[427,3055],{},[576,3057,3059,3218],{"className":3058},[579,580],[582,3060,3064],{"xmlns":584,"width":3061,"height":3062,"viewBox":3063},"467.094","67.784","-75 -75 350.321 50.838",[589,3065,3066,3069,3085,3088,3102,3105,3119,3122,3136,3139,3153,3156,3170,3173,3176,3179,3182,3185,3188,3191,3194,3197,3200,3203,3206,3209,3212,3215],{"stroke":591,"style":592},[594,3067],{"fill":596,"d":3068},"M-43.13-57.677c0-7.071-5.732-12.803-12.803-12.803s-12.804 5.732-12.804 12.803 5.733 12.804 12.804 12.804 12.804-5.732 12.804-12.804Zm-12.803 0",[589,3070,3071,3078],{"stroke":596},[589,3072,3074],{"transform":3073},"translate(-5.036 2.575)",[594,3075],{"d":3076,"fill":591,"stroke":591,"className":3077,"style":606},"M-52.826-57.677L-55.467-57.677Q-55.564-57.677-55.564-57.796Q-55.564-57.857-55.531-57.925Q-55.498-57.993-55.436-57.993Q-54.935-57.993-54.707-58.046Q-54.588-58.090-54.509-58.323L-53.287-63.240Q-53.270-63.328-53.270-63.372Q-53.270-63.438-53.296-63.456Q-53.468-63.509-53.999-63.509Q-54.105-63.509-54.105-63.627Q-54.105-63.689-54.072-63.757Q-54.039-63.825-53.982-63.825L-49.139-63.825Q-49.091-63.825-49.060-63.790Q-49.029-63.755-49.029-63.706L-49.236-61.869Q-49.245-61.825-49.273-61.795Q-49.302-61.764-49.346-61.764L-49.425-61.764Q-49.526-61.764-49.526-61.887Q-49.482-62.436-49.482-62.546Q-49.482-62.994-49.682-63.205Q-49.882-63.416-50.183-63.462Q-50.484-63.509-51.011-63.509L-52.017-63.509Q-52.277-63.509-52.351-63.462Q-52.426-63.416-52.488-63.175L-53.055-60.907L-52.360-60.907Q-51.894-60.907-51.664-60.971Q-51.433-61.034-51.297-61.245Q-51.161-61.456-51.055-61.878Q-51.024-61.962-50.954-61.962L-50.875-61.962Q-50.831-61.962-50.798-61.929Q-50.765-61.896-50.765-61.852Q-50.765-61.834-50.774-61.817L-51.323-59.619Q-51.341-59.540-51.424-59.540L-51.503-59.540Q-51.604-59.540-51.604-59.659Q-51.604-59.707-51.558-59.892Q-51.512-60.076-51.512-60.195Q-51.512-60.454-51.752-60.525Q-51.991-60.595-52.378-60.595L-53.134-60.595L-53.718-58.235Q-53.718-58.218-53.720-58.202Q-53.723-58.187-53.727-58.165Q-53.727-58.068-53.657-58.046Q-53.406-57.993-52.773-57.993Q-52.725-57.993-52.696-57.960Q-52.668-57.927-52.668-57.884Q-52.668-57.677-52.826-57.677",[605],[589,3079,3080],{"transform":3073},[594,3081],{"d":3082,"fill":591,"stroke":591,"className":3083,"style":3084},"M-49.271-57.319Q-49.195-57.152-49.047-57.033Q-48.899-56.914-48.710-56.853Q-48.521-56.791-48.334-56.791Q-48.017-56.791-47.814-56.933Q-47.610-57.075-47.516-57.322Q-47.423-57.568-47.423-57.878Q-47.423-58.332-47.570-58.653Q-47.718-58.974-48.120-58.974Q-48.369-58.974-48.537-58.912Q-48.706-58.851-48.811-58.766Q-48.917-58.681-48.993-58.597Q-49.069-58.514-49.104-58.508L-49.169-58.508Q-49.198-58.508-49.226-58.539Q-49.254-58.570-49.254-58.596L-49.254-60.594Q-49.245-60.667-49.169-60.667Q-49.163-60.667-49.139-60.661Q-48.650-60.474-48.167-60.474Q-47.677-60.474-47.188-60.661Q-47.165-60.667-47.159-60.667Q-47.094-60.667-47.074-60.594L-47.074-60.530Q-47.077-60.506-47.094-60.480Q-47.355-60.207-47.694-60.056Q-48.032-59.906-48.395-59.906Q-48.717-59.906-48.996-59.982L-48.996-58.898Q-48.823-59.047-48.597-59.119Q-48.372-59.191-48.120-59.191Q-47.759-59.191-47.456-59.013Q-47.153-58.836-46.976-58.536Q-46.798-58.236-46.798-57.878Q-46.798-57.494-47.021-57.188Q-47.244-56.882-47.598-56.717Q-47.953-56.551-48.334-56.551Q-48.644-56.551-48.939-56.686Q-49.233-56.821-49.415-57.070Q-49.596-57.319-49.596-57.644Q-49.596-57.779-49.506-57.869Q-49.415-57.960-49.277-57.960Q-49.142-57.960-49.047-57.869Q-48.952-57.779-48.952-57.644Q-48.952-57.506-49.043-57.412Q-49.133-57.319-49.271-57.319",[605],"stroke-width:0.180",[594,3086],{"fill":596,"d":3087},"M19.867-57.677c0-7.071-5.733-12.803-12.804-12.803S-5.74-64.748-5.74-57.677-.008-44.873 7.063-44.873s12.804-5.732 12.804-12.804Zm-12.804 0",[589,3089,3090,3096],{"stroke":596},[589,3091,3093],{"transform":3092},"translate(57.96 2.575)",[594,3094],{"d":3076,"fill":591,"stroke":591,"className":3095,"style":606},[605],[589,3097,3098],{"transform":3092},[594,3099],{"d":3100,"fill":591,"stroke":591,"className":3101,"style":3084},"M-47.897-57.656L-49.752-57.656L-49.752-57.913L-47.657-60.620Q-47.619-60.667-47.560-60.667L-47.428-60.667Q-47.387-60.667-47.360-60.639Q-47.332-60.612-47.332-60.571L-47.332-57.913L-46.643-57.913L-46.643-57.656L-47.332-57.656L-47.332-57.108Q-47.332-56.935-46.655-56.935L-46.655-56.677L-48.574-56.677L-48.574-56.935Q-47.897-56.935-47.897-57.108L-47.897-57.656M-47.856-59.996L-49.462-57.913L-47.856-57.913",[605],[594,3103],{"fill":596,"d":3104},"M82.863-57.677c0-7.071-5.733-12.803-12.804-12.803s-12.804 5.732-12.804 12.803 5.733 12.804 12.804 12.804 12.804-5.732 12.804-12.804Zm-12.804 0",[589,3106,3107,3113],{"stroke":596},[589,3108,3110],{"transform":3109},"translate(120.956 2.575)",[594,3111],{"d":3076,"fill":591,"stroke":591,"className":3112,"style":606},[605],[589,3114,3115],{"transform":3109},[594,3116],{"d":3117,"fill":591,"stroke":591,"className":3118,"style":3084},"M-49.254-57.128Q-48.958-56.791-48.228-56.791Q-47.970-56.791-47.790-56.919Q-47.610-57.046-47.522-57.254Q-47.434-57.462-47.434-57.720Q-47.434-58.115-47.641-58.386Q-47.847-58.657-48.234-58.657L-48.700-58.657Q-48.764-58.672-48.779-58.734L-48.779-58.801Q-48.764-58.857-48.700-58.874L-48.298-58.898Q-48.088-58.898-47.919-59.040Q-47.751-59.182-47.658-59.396Q-47.566-59.610-47.566-59.826Q-47.566-60.114-47.751-60.279Q-47.935-60.445-48.228-60.445Q-48.489-60.445-48.713-60.377Q-48.937-60.310-49.084-60.152Q-48.955-60.134-48.876-60.045Q-48.797-59.955-48.797-59.826Q-48.797-59.689-48.892-59.594Q-48.987-59.498-49.128-59.498Q-49.262-59.498-49.359-59.595Q-49.456-59.692-49.456-59.826Q-49.456-60.114-49.265-60.305Q-49.075-60.497-48.794-60.582Q-48.512-60.667-48.228-60.667Q-47.953-60.667-47.652-60.576Q-47.352-60.486-47.144-60.297Q-46.936-60.108-46.936-59.826Q-46.936-59.457-47.182-59.185Q-47.428-58.912-47.800-58.783Q-47.381-58.690-47.064-58.407Q-46.746-58.124-46.746-57.726Q-46.746-57.363-46.965-57.097Q-47.185-56.832-47.531-56.692Q-47.877-56.551-48.228-56.551Q-48.451-56.551-48.698-56.599Q-48.946-56.648-49.166-56.758Q-49.385-56.867-49.517-57.046Q-49.649-57.225-49.649-57.480Q-49.649-57.629-49.547-57.732Q-49.444-57.834-49.295-57.834Q-49.145-57.834-49.043-57.732Q-48.940-57.629-48.940-57.480Q-48.940-57.348-49.029-57.247Q-49.119-57.146-49.254-57.128",[605],[594,3120],{"fill":596,"d":3121},"M145.859-57.677c0-7.071-5.733-12.803-12.804-12.803s-12.804 5.732-12.804 12.803 5.733 12.804 12.804 12.804 12.804-5.732 12.804-12.804Zm-12.804 0",[589,3123,3124,3130],{"stroke":596},[589,3125,3127],{"transform":3126},"translate(183.952 2.575)",[594,3128],{"d":3076,"fill":591,"stroke":591,"className":3129,"style":606},[605],[589,3131,3132],{"transform":3126},[594,3133],{"d":3134,"fill":591,"stroke":591,"className":3135,"style":3084},"M-46.986-56.677L-49.596-56.677L-49.596-56.862Q-49.590-56.885-49.570-56.911L-48.419-57.966Q-48.079-58.277-47.899-58.463Q-47.718-58.649-47.573-58.909Q-47.428-59.170-47.428-59.466Q-47.428-59.739-47.554-59.954Q-47.680-60.169-47.900-60.289Q-48.120-60.409-48.395-60.409Q-48.571-60.409-48.741-60.352Q-48.911-60.295-49.043-60.188Q-49.174-60.081-49.254-59.923Q-49.166-59.923-49.088-59.879Q-49.010-59.835-48.966-59.759Q-48.923-59.683-48.923-59.586Q-48.923-59.446-49.019-59.349Q-49.116-59.252-49.259-59.252Q-49.397-59.252-49.497-59.352Q-49.596-59.451-49.596-59.586Q-49.596-59.911-49.406-60.159Q-49.215-60.406-48.912-60.537Q-48.609-60.667-48.293-60.667Q-47.912-60.667-47.569-60.532Q-47.226-60.398-47.012-60.125Q-46.798-59.853-46.798-59.466Q-46.798-59.191-46.923-58.964Q-47.048-58.737-47.228-58.565Q-47.408-58.394-47.733-58.154Q-48.058-57.913-48.143-57.846L-48.899-57.242L-48.366-57.242Q-47.877-57.242-47.546-57.250Q-47.215-57.257-47.200-57.272Q-47.141-57.342-47.109-57.477Q-47.077-57.612-47.045-57.823L-46.798-57.823",[605],[594,3137],{"fill":596,"d":3138},"M208.855-57.677c0-7.071-5.733-12.803-12.804-12.803s-12.804 5.732-12.804 12.803 5.733 12.804 12.804 12.804 12.804-5.732 12.804-12.804Zm-12.804 0",[589,3140,3141,3147],{"stroke":596},[589,3142,3144],{"transform":3143},"translate(246.948 2.575)",[594,3145],{"d":3076,"fill":591,"stroke":591,"className":3146,"style":606},[605],[589,3148,3149],{"transform":3143},[594,3150],{"d":3151,"fill":591,"stroke":591,"className":3152,"style":3084},"M-46.986-56.677L-49.277-56.677L-49.277-56.935Q-48.401-56.935-48.401-57.108L-48.401-60.187Q-48.594-60.099-48.826-60.062Q-49.057-60.026-49.312-60.026L-49.312-60.283Q-48.934-60.283-48.613-60.368Q-48.293-60.453-48.064-60.667L-47.944-60.667Q-47.912-60.667-47.887-60.644Q-47.862-60.620-47.862-60.582L-47.862-57.108Q-47.862-56.935-46.986-56.935",[605],[594,3154],{"fill":596,"d":3155},"M271.85-57.677c0-7.071-5.731-12.803-12.803-12.803-7.071 0-12.804 5.732-12.804 12.803s5.733 12.804 12.804 12.804 12.804-5.732 12.804-12.804Zm-12.803 0",[589,3157,3158,3164],{"stroke":596},[589,3159,3161],{"transform":3160},"translate(309.944 2.575)",[594,3162],{"d":3076,"fill":591,"stroke":591,"className":3163,"style":606},[605],[589,3165,3166],{"transform":3160},[594,3167],{"d":3168,"fill":591,"stroke":591,"className":3169,"style":3084},"M-48.196-56.551Q-48.758-56.551-49.088-56.838Q-49.418-57.125-49.545-57.575Q-49.673-58.025-49.673-58.590Q-49.673-58.994-49.607-59.359Q-49.541-59.724-49.378-60.020Q-49.215-60.316-48.924-60.491Q-48.632-60.667-48.196-60.667Q-47.759-60.667-47.469-60.491Q-47.179-60.316-47.015-60.021Q-46.851-59.727-46.787-59.369Q-46.722-59.012-46.722-58.590Q-46.722-58.025-46.850-57.575Q-46.977-57.125-47.304-56.838Q-47.631-56.551-48.196-56.551M-48.196-56.768Q-47.792-56.768-47.597-57.078Q-47.402-57.389-47.358-57.781Q-47.314-58.174-47.314-58.687Q-47.314-59.182-47.358-59.541Q-47.402-59.900-47.597-60.175Q-47.792-60.450-48.196-60.450Q-48.600-60.450-48.795-60.175Q-48.990-59.900-49.034-59.541Q-49.078-59.182-49.078-58.687Q-49.078-58.174-49.034-57.781Q-48.990-57.389-48.795-57.078Q-48.600-56.768-48.196-56.768",[605],[594,3171],{"fill":596,"d":3172},"M-44.672-64.178c13.67-7.892 26.805-7.892 37.81-1.538",[594,3174],{"d":3175,"style":1020},"m-4.692-64.463-2.429-2.962.346 1.759-1.696.58Z",[594,3177],{"fill":596,"d":3178},"M-45.153-50.405c33.763 22.773 70.669 22.773 101.882 1.72",[594,3180],{"d":3181,"style":1020},"m58.807-50.087-3.728.885 1.733.46-.222 1.78Z",[594,3183],{"fill":596,"d":3184},"M18.324-64.178c13.67-7.892 26.805-7.892 37.81-1.538",[594,3186],{"d":3187,"style":1020},"m58.304-64.463-2.428-2.962.345 1.759-1.696.58Z",[594,3189],{"fill":596,"d":3190},"M17.843-50.405c33.763 22.773 70.669 22.773 101.882 1.72",[594,3192],{"d":3193,"style":1020},"m121.803-50.087-3.727.885 1.732.46-.222 1.78Z",[594,3195],{"fill":596,"d":3196},"M81.32-64.178c13.67-7.892 26.805-7.892 37.81-1.538",[594,3198],{"d":3199,"style":1020},"m121.3-64.463-2.428-2.962.345 1.759-1.696.58Z",[594,3201],{"fill":596,"d":3202},"M80.84-50.405c33.762 22.773 70.668 22.773 101.881 1.72",[594,3204],{"d":3205,"style":1020},"m184.799-50.087-3.727.885 1.732.46-.222 1.78Z",[594,3207],{"fill":596,"d":3208},"M144.316-64.178c13.67-7.892 26.805-7.892 37.81-1.538",[594,3210],{"d":3211,"style":1020},"m184.296-64.463-2.428-2.962.345 1.759-1.696.58Z",[594,3213],{"fill":596,"d":3214},"M143.836-50.405c33.762 22.773 70.668 22.773 101.881 1.72",[594,3216],{"d":3217,"style":1020},"m247.795-50.087-3.727.885 1.732.46-.222 1.78Z",[685,3219,3221],{"className":3220},[688],"The Fibonacci evaluation DAG with one node per value and an edge to each needed subproblem.",[381,3223,3224,3225,3277,3278,3281,3282,3285,3286,3492,3493,3517],{},"To compute ",[427,3226,3228],{"className":3227},[430],[427,3229,3231],{"className":3230,"ariaHidden":435},[434],[427,3232,3234,3237],{"className":3233},[439],[427,3235],{"className":3236,"style":2451},[443],[427,3238,3240,3243],{"className":3239},[448],[427,3241,2459],{"className":3242,"style":2458},[448,449],[427,3244,3246],{"className":3245},[2463],[427,3247,3249,3269],{"className":3248},[2467,2468],[427,3250,3252,3266],{"className":3251},[2472],[427,3253,3255],{"className":3254,"style":2477},[2476],[427,3256,3257,3260],{"style":2480},[427,3258],{"className":3259,"style":2485},[2484],[427,3261,3263],{"className":3262},[2489,2490,2491,2492],[427,3264,2496],{"className":3265},[448,449,2492],[427,3267,2501],{"className":3268},[2500],[427,3270,3272],{"className":3271},[2472],[427,3273,3275],{"className":3274,"style":2508},[2476],[427,3276],{}," we must evaluate every node ",[385,3279,3280],{},"after"," the nodes it points to are\nalready known, that is, ",[390,3283,3284],{},"in a valid topological order of the evaluation DAG",".\nHere the order is read off by level: ",[427,3287,3289],{"className":3288},[430],[427,3290,3292],{"className":3291,"ariaHidden":435},[434],[427,3293,3295,3299,3340,3343,3346,3386,3389,3392,3432,3435,3438,3443,3446,3449,3452],{"className":3294},[439],[427,3296],{"className":3297,"style":3298},[443],"height:0.8778em;vertical-align:-0.1944em;",[427,3300,3302,3305],{"className":3301},[448],[427,3303,2459],{"className":3304,"style":2458},[448,449],[427,3306,3308],{"className":3307},[2463],[427,3309,3311,3332],{"className":3310},[2467,2468],[427,3312,3314,3329],{"className":3313},[2472],[427,3315,3317],{"className":3316,"style":2545},[2476],[427,3318,3319,3322],{"style":2480},[427,3320],{"className":3321,"style":2485},[2484],[427,3323,3325],{"className":3324},[2489,2490,2491,2492],[427,3326,3328],{"className":3327},[448,2492],"0",[427,3330,2501],{"className":3331},[2500],[427,3333,3335],{"className":3334},[2472],[427,3336,3338],{"className":3337,"style":2508},[2476],[427,3339],{},[427,3341,814],{"className":3342},[813],[427,3344],{"className":3345,"style":818},[519],[427,3347,3349,3352],{"className":3348},[448],[427,3350,2459],{"className":3351,"style":2458},[448,449],[427,3353,3355],{"className":3354},[2463],[427,3356,3358,3378],{"className":3357},[2467,2468],[427,3359,3361,3375],{"className":3360},[2472],[427,3362,3364],{"className":3363,"style":2545},[2476],[427,3365,3366,3369],{"style":2480},[427,3367],{"className":3368,"style":2485},[2484],[427,3370,3372],{"className":3371},[2489,2490,2491,2492],[427,3373,1199],{"className":3374},[448,2492],[427,3376,2501],{"className":3377},[2500],[427,3379,3381],{"className":3380},[2472],[427,3382,3384],{"className":3383,"style":2508},[2476],[427,3385],{},[427,3387,814],{"className":3388},[813],[427,3390],{"className":3391,"style":818},[519],[427,3393,3395,3398],{"className":3394},[448],[427,3396,2459],{"className":3397,"style":2458},[448,449],[427,3399,3401],{"className":3400},[2463],[427,3402,3404,3424],{"className":3403},[2467,2468],[427,3405,3407,3421],{"className":3406},[2472],[427,3408,3410],{"className":3409,"style":2545},[2476],[427,3411,3412,3415],{"style":2480},[427,3413],{"className":3414,"style":2485},[2484],[427,3416,3418],{"className":3417},[2489,2490,2491,2492],[427,3419,1457],{"className":3420},[448,2492],[427,3422,2501],{"className":3423},[2500],[427,3425,3427],{"className":3426},[2472],[427,3428,3430],{"className":3429,"style":2508},[2476],[427,3431],{},[427,3433,814],{"className":3434},[813],[427,3436],{"className":3437,"style":818},[519],[427,3439,3442],{"className":3440},[3441],"minner","…",[427,3444],{"className":3445,"style":818},[519],[427,3447,814],{"className":3448},[813],[427,3450],{"className":3451,"style":818},[519],[427,3453,3455,3458],{"className":3454},[448],[427,3456,2459],{"className":3457,"style":2458},[448,449],[427,3459,3461],{"className":3460},[2463],[427,3462,3464,3484],{"className":3463},[2467,2468],[427,3465,3467,3481],{"className":3466},[2472],[427,3468,3470],{"className":3469,"style":2477},[2476],[427,3471,3472,3475],{"style":2480},[427,3473],{"className":3474,"style":2485},[2484],[427,3476,3478],{"className":3477},[2489,2490,2491,2492],[427,3479,2496],{"className":3480},[448,449,2492],[427,3482,2501],{"className":3483},[2500],[427,3485,3487],{"className":3486},[2472],[427,3488,3490],{"className":3489,"style":2508},[2476],[427,3491],{},". Filling an\narray in that order computes each value with ",[427,3494,3496],{"className":3495},[430],[427,3497,3499],{"className":3498,"ariaHidden":435},[434],[427,3500,3502,3505,3508,3511,3514],{"className":3501},[439],[427,3503],{"className":3504,"style":799},[443],[427,3506,1853],{"className":3507,"style":1852},[448,449],[427,3509,804],{"className":3510},[803],[427,3512,1199],{"className":3513},[448],[427,3515,828],{"className":3516},[827]," work, turning exponential\nrecursion into a single linear sweep:",[1459,3519,3521],{"className":1461,"code":3520,"language":1463,"meta":376,"style":376},"caption: $\\textsc{Dyn-Fibo}(n)$ — evaluate the DAG in topological order\nnumber: 3\nallocate array $F[0 \\mathbin{..} n]$\n$F[0] \\gets 0$; $F[1] \\gets 1$\nfor $i \\gets 2$ to $n$ do\n  $F[i] \\gets F[i-1] + F[i-2]$ \u002F\u002F predecessors already done\nreturn $F[n]$\n",[1465,3522,3523,3528,3533,3538,3543,3548,3553],{"__ignoreMap":376},[427,3524,3525],{"class":1469,"line":6},[427,3526,3527],{},"caption: $\\textsc{Dyn-Fibo}(n)$ — evaluate the DAG in topological order\n",[427,3529,3530],{"class":1469,"line":18},[427,3531,3532],{},"number: 3\n",[427,3534,3535],{"class":1469,"line":24},[427,3536,3537],{},"allocate array $F[0 \\mathbin{..} n]$\n",[427,3539,3540],{"class":1469,"line":73},[427,3541,3542],{},"$F[0] \\gets 0$; $F[1] \\gets 1$\n",[427,3544,3545],{"class":1469,"line":102},[427,3546,3547],{},"for $i \\gets 2$ to $n$ do\n",[427,3549,3550],{"class":1469,"line":108},[427,3551,3552],{},"  $F[i] \\gets F[i-1] + F[i-2]$ \u002F\u002F predecessors already done\n",[427,3554,3555],{"class":1469,"line":116},[427,3556,3557],{},"return $F[n]$\n",[381,3559,3560],{},"The lesson generalizes: whenever quantities depend on one another acyclically,\ntheir dependency digraph is a DAG, and a topological order is exactly a safe\norder in which to evaluate them, predecessors first. This is the structural\nbackbone of dynamic programming, which we return to later.",[414,3562,3564],{"type":3563},"note",[381,3565,3566,3569,3570,3573,3574,3590,3591,3606,3607,3649,3650,3653,3654,3669],{},[390,3567,3568],{},"Note (The alternative)."," Skiena often presents the equivalent\n",[385,3571,3572],{},"Kahn's algorithm",": repeatedly emit a vertex of in-degree ",[427,3575,3577],{"className":3576},[430],[427,3578,3580],{"className":3579,"ariaHidden":435},[434],[427,3581,3583,3587],{"className":3582},[439],[427,3584],{"className":3585,"style":3586},[443],"height:0.6444em;",[427,3588,3328],{"className":3589},[448]," and delete it,\nwhich exposes new in-degree-",[427,3592,3594],{"className":3593},[430],[427,3595,3597],{"className":3596,"ariaHidden":435},[434],[427,3598,3600,3603],{"className":3599},[439],[427,3601],{"className":3602,"style":3586},[443],[427,3604,3328],{"className":3605},[448]," vertices. It also runs in ",[427,3608,3610],{"className":3609},[430],[427,3611,3613,3637],{"className":3612,"ariaHidden":435},[434],[427,3614,3616,3619,3622,3625,3628,3631,3634],{"className":3615},[439],[427,3617],{"className":3618,"style":799},[443],[427,3620,1879],{"className":3621},[448],[427,3623,804],{"className":3624},[803],[427,3626,809],{"className":3627,"style":808},[448,449],[427,3629],{"className":3630,"style":808},[519],[427,3632,1893],{"className":3633},[1892],[427,3635],{"className":3636,"style":808},[519],[427,3638,3640,3643,3646],{"className":3639},[439],[427,3641],{"className":3642,"style":799},[443],[427,3644,823],{"className":3645,"style":822},[448,449],[427,3647,828],{"className":3648},[827]," and\nhas the side benefit of ",[385,3651,3652],{},"detecting"," a cycle — if vertices remain but none has\nin-degree ",[427,3655,3657],{"className":3656},[430],[427,3658,3660],{"className":3659,"ariaHidden":435},[434],[427,3661,3663,3666],{"className":3662},[439],[427,3664],{"className":3665,"style":3586},[443],[427,3667,3328],{"className":3668},[448],", the graph is not a DAG.",[381,3671,3672,3673,3688,3689,468,3704,3719,3720,3735,3736,3751,3752,3767,3768,3783,3784,3799,3800,3851],{},"Running Kahn's algorithm on the prerequisite DAG, ",[427,3674,3676],{"className":3675},[430],[427,3677,3679],{"className":3678,"ariaHidden":435},[434],[427,3680,3682,3685],{"className":3681},[439],[427,3683],{"className":3684,"style":444},[443],[427,3686,404],{"className":3687},[448,449]," is the only source. Emit\nit, and removing its edges drops ",[427,3690,3692],{"className":3691},[430],[427,3693,3695],{"className":3694,"ariaHidden":435},[434],[427,3696,3698,3701],{"className":3697},[439],[427,3699],{"className":3700,"style":463},[443],[427,3702,467],{"className":3703},[448,449],[427,3705,3707],{"className":3706},[430],[427,3708,3710],{"className":3709,"ariaHidden":435},[434],[427,3711,3713,3716],{"className":3712},[439],[427,3714],{"className":3715,"style":463},[443],[427,3717,933],{"className":3718},[448,449]," to in-degree ",[427,3721,3723],{"className":3722},[430],[427,3724,3726],{"className":3725,"ariaHidden":435},[434],[427,3727,3729,3732],{"className":3728},[439],[427,3730],{"className":3731,"style":3586},[443],[427,3733,3328],{"className":3734},[448],"; emitting ",[427,3737,3739],{"className":3738},[430],[427,3740,3742],{"className":3741,"ariaHidden":435},[434],[427,3743,3745,3748],{"className":3744},[439],[427,3746],{"className":3747,"style":463},[443],[427,3749,467],{"className":3750},[448,449]," then\n",[427,3753,3755],{"className":3754},[430],[427,3756,3758],{"className":3757,"ariaHidden":435},[434],[427,3759,3761,3764],{"className":3760},[439],[427,3762],{"className":3763,"style":463},[443],[427,3765,933],{"className":3766},[448,449]," frees ",[427,3769,3771],{"className":3770},[430],[427,3772,3774],{"className":3773,"ariaHidden":435},[434],[427,3775,3777,3780],{"className":3776},[439],[427,3778],{"className":3779,"style":444},[443],[427,3781,943],{"className":3782},[448,449],", and finally ",[427,3785,3787],{"className":3786},[430],[427,3788,3790],{"className":3789,"ariaHidden":435},[434],[427,3791,3793,3796],{"className":3792},[439],[427,3794],{"className":3795,"style":444},[443],[427,3797,953],{"className":3798},[448,449],". The result is the same order ",[427,3801,3803],{"className":3802},[430],[427,3804,3806],{"className":3805,"ariaHidden":435},[434],[427,3807,3809,3812,3815,3818,3821,3824,3827,3830,3833,3836,3839,3842,3845,3848],{"className":3808},[439],[427,3810],{"className":3811,"style":911},[443],[427,3813,404],{"className":3814},[448,449],[427,3816,814],{"className":3817},[813],[427,3819],{"className":3820,"style":818},[519],[427,3822,467],{"className":3823},[448,449],[427,3825,814],{"className":3826},[813],[427,3828],{"className":3829,"style":818},[519],[427,3831,933],{"className":3832},[448,449],[427,3834,814],{"className":3835},[813],[427,3837],{"className":3838,"style":818},[519],[427,3840,943],{"className":3841},[448,449],[427,3843,814],{"className":3844},[813],[427,3846],{"className":3847,"style":818},[519],[427,3849,953],{"className":3850},[448,449]," that\nDFS finish times produced:",[576,3853,3855,4070],{"className":3854},[579,580],[582,3856,3860],{"xmlns":584,"width":3857,"height":3858,"viewBox":3859},"268.120","198.956","-75 -75 201.090 149.217",[589,3861,3862,3873,3876,3883,3886,3893,3896,3903,3906,3913,3916,3919,3922,3925,3928,3931,3934,3937,3940,3944,3947,3950,3968,3975,3982,3988,3994,4010,4022,4034,4046,4058],{"stroke":591,"style":592},[589,3863,3864,3867],{"fill":2223},[594,3865],{"d":3866},"M-20.444-41.64c0-7.072-5.732-12.805-12.803-12.805s-12.804 5.733-12.804 12.804 5.732 12.804 12.804 12.804c7.071 0 12.803-5.733 12.803-12.804Zm-12.803 0",[589,3868,3869],{"transform":600},[594,3870],{"d":3871,"fill":591,"stroke":591,"className":3872,"style":606},"M-31.625-41.540Q-32.021-41.540-32.307-41.744Q-32.592-41.949-32.739-42.283Q-32.887-42.617-32.887-43.008Q-32.887-43.443-32.713-43.904Q-32.539-44.366-32.227-44.757Q-31.915-45.148-31.505-45.383Q-31.094-45.618-30.654-45.618Q-30.386-45.618-30.169-45.480Q-29.951-45.341-29.819-45.095Q-29.780-45.245-29.672-45.341Q-29.564-45.438-29.424-45.438Q-29.301-45.438-29.217-45.365Q-29.134-45.293-29.134-45.170Q-29.134-45.117-29.143-45.086L-29.762-42.595Q-29.819-42.397-29.819-42.199Q-29.819-41.804-29.556-41.804Q-29.270-41.804-29.136-42.127Q-29.002-42.450-28.883-42.955Q-28.874-42.986-28.850-43.010Q-28.826-43.034-28.791-43.034L-28.685-43.034Q-28.637-43.034-28.615-43.001Q-28.593-42.968-28.593-42.920Q-28.707-42.489-28.798-42.236Q-28.888-41.984-29.081-41.762Q-29.274-41.540-29.573-41.540Q-29.881-41.540-30.129-41.711Q-30.377-41.883-30.448-42.173Q-30.703-41.887-30.999-41.714Q-31.296-41.540-31.625-41.540M-31.608-41.804Q-31.278-41.804-30.968-42.045Q-30.659-42.287-30.448-42.603Q-30.439-42.612-30.439-42.630L-29.942-44.594Q-29.999-44.911-30.191-45.135Q-30.382-45.359-30.672-45.359Q-31.041-45.359-31.340-45.040Q-31.639-44.722-31.806-44.313Q-31.942-43.966-32.067-43.456Q-32.192-42.946-32.192-42.621Q-32.192-42.296-32.054-42.050Q-31.915-41.804-31.608-41.804",[605],[594,3874],{"fill":596,"d":3875},"M51.088-41.64c0-7.072-5.732-12.805-12.803-12.805S25.48-48.712 25.48-41.64s5.732 12.804 12.804 12.804c7.07 0 12.803-5.733 12.803-12.804Zm-12.803 0",[589,3877,3879],{"transform":3878},"translate(69.55 3.125)",[594,3880],{"d":3881,"fill":591,"stroke":591,"className":3882,"style":606},"M-31.625-41.540Q-32.201-41.540-32.522-41.971Q-32.843-42.401-32.843-42.981Q-32.843-43.386-32.759-43.614L-31.880-47.112Q-31.845-47.262-31.845-47.336Q-31.845-47.473-32.412-47.473Q-32.509-47.473-32.509-47.591Q-32.509-47.648-32.478-47.719Q-32.447-47.789-32.381-47.789L-31.160-47.886Q-31.107-47.886-31.074-47.857Q-31.041-47.828-31.041-47.780L-31.041-47.745L-31.700-45.135Q-31.177-45.618-30.654-45.618Q-30.268-45.618-29.977-45.414Q-29.687-45.209-29.540-44.875Q-29.393-44.541-29.393-44.150Q-29.393-43.566-29.696-42.957Q-29.999-42.349-30.520-41.944Q-31.041-41.540-31.625-41.540M-31.608-41.804Q-31.239-41.804-30.935-42.127Q-30.632-42.450-30.474-42.845Q-30.329-43.201-30.208-43.709Q-30.087-44.216-30.087-44.537Q-30.087-44.862-30.232-45.110Q-30.377-45.359-30.672-45.359Q-31.274-45.359-31.845-44.559L-32.087-43.566Q-32.232-42.942-32.232-42.678Q-32.232-42.335-32.080-42.069Q-31.929-41.804-31.608-41.804",[605],[594,3884],{"fill":596,"d":3885},"M122.62-41.64c0-7.072-5.732-12.805-12.804-12.805-7.071 0-12.803 5.733-12.803 12.804s5.732 12.804 12.803 12.804 12.804-5.733 12.804-12.804Zm-12.804 0",[589,3887,3889],{"transform":3888},"translate(141.061 1.937)",[594,3890],{"d":3891,"fill":591,"stroke":591,"className":3892,"style":606},"M-32.157-42.748Q-32.157-42.353-31.944-42.078Q-31.731-41.804-31.349-41.804Q-30.804-41.804-30.298-42.039Q-29.793-42.274-29.476-42.696Q-29.455-42.731-29.393-42.731Q-29.336-42.731-29.290-42.680Q-29.244-42.630-29.244-42.577Q-29.244-42.542-29.270-42.516Q-29.617-42.041-30.180-41.790Q-30.742-41.540-31.366-41.540Q-31.797-41.540-32.146-41.742Q-32.496-41.944-32.687-42.300Q-32.878-42.656-32.878-43.082Q-32.878-43.544-32.676-44.001Q-32.474-44.458-32.118-44.827Q-31.762-45.196-31.318-45.407Q-30.874-45.618-30.404-45.618Q-30.136-45.618-29.887-45.537Q-29.639-45.455-29.472-45.277Q-29.305-45.099-29.305-44.836Q-29.305-44.599-29.455-44.421Q-29.604-44.243-29.837-44.243Q-29.977-44.243-30.083-44.337Q-30.188-44.432-30.188-44.577Q-30.188-44.779-30.041-44.933Q-29.894-45.086-29.692-45.086Q-29.797-45.227-30.002-45.293Q-30.206-45.359-30.413-45.359Q-30.949-45.359-31.346-44.930Q-31.744-44.502-31.951-43.882Q-32.157-43.263-32.157-42.748",[605],[594,3894],{"fill":596,"d":3895},"M-20.444 24.2c0-7.071-5.732-12.803-12.803-12.803S-46.051 17.129-46.051 24.2s5.732 12.804 12.804 12.804c7.071 0 12.803-5.732 12.803-12.804Zm-12.803 0",[589,3897,3899],{"transform":3898},"translate(-2.396 68.966)",[594,3900],{"d":3901,"fill":591,"stroke":591,"className":3902,"style":606},"M-31.625-41.540Q-32.021-41.540-32.307-41.744Q-32.592-41.949-32.739-42.283Q-32.887-42.617-32.887-43.008Q-32.887-43.443-32.713-43.904Q-32.539-44.366-32.227-44.757Q-31.915-45.148-31.505-45.383Q-31.094-45.618-30.654-45.618Q-30.386-45.618-30.169-45.480Q-29.951-45.341-29.819-45.095L-29.314-47.112Q-29.279-47.262-29.279-47.336Q-29.279-47.473-29.846-47.473Q-29.942-47.473-29.942-47.591Q-29.942-47.648-29.912-47.719Q-29.881-47.789-29.819-47.789L-28.593-47.886Q-28.540-47.886-28.510-47.857Q-28.479-47.828-28.479-47.780L-28.479-47.745L-29.762-42.595Q-29.762-42.537-29.791-42.406Q-29.819-42.274-29.819-42.199Q-29.819-41.804-29.556-41.804Q-29.270-41.804-29.136-42.127Q-29.002-42.450-28.883-42.955Q-28.874-42.986-28.850-43.010Q-28.826-43.034-28.791-43.034L-28.685-43.034Q-28.637-43.034-28.615-43.001Q-28.593-42.968-28.593-42.920Q-28.707-42.489-28.798-42.236Q-28.888-41.984-29.081-41.762Q-29.274-41.540-29.573-41.540Q-29.881-41.540-30.129-41.711Q-30.377-41.883-30.448-42.173Q-30.703-41.887-30.999-41.714Q-31.296-41.540-31.625-41.540M-31.608-41.804Q-31.278-41.804-30.968-42.045Q-30.659-42.287-30.448-42.603Q-30.439-42.612-30.439-42.639L-29.942-44.594Q-29.999-44.911-30.191-45.135Q-30.382-45.359-30.672-45.359Q-31.041-45.359-31.340-45.040Q-31.639-44.722-31.806-44.313Q-31.942-43.966-32.067-43.456Q-32.192-42.946-32.192-42.621Q-32.192-42.296-32.054-42.050Q-31.915-41.804-31.608-41.804",[605],[594,3904],{"fill":596,"d":3905},"M51.088 24.2c0-7.071-5.732-12.803-12.803-12.803S25.48 17.129 25.48 24.2s5.732 12.804 12.804 12.804c7.07 0 12.803-5.732 12.803-12.804Zm-12.803 0",[589,3907,3909],{"transform":3908},"translate(69.382 67.779)",[594,3910],{"d":3911,"fill":591,"stroke":591,"className":3912,"style":606},"M-32.131-42.819Q-32.131-42.406-31.935-42.105Q-31.740-41.804-31.349-41.804Q-30.804-41.804-30.298-42.039Q-29.793-42.274-29.476-42.696Q-29.455-42.731-29.393-42.731Q-29.336-42.731-29.290-42.680Q-29.244-42.630-29.244-42.577Q-29.244-42.542-29.270-42.516Q-29.617-42.041-30.180-41.790Q-30.742-41.540-31.366-41.540Q-32.039-41.540-32.436-42.021Q-32.834-42.502-32.834-43.188Q-32.834-43.834-32.500-44.399Q-32.166-44.963-31.606-45.291Q-31.045-45.618-30.404-45.618Q-29.999-45.618-29.692-45.416Q-29.384-45.214-29.384-44.836Q-29.384-44.436-29.650-44.196Q-29.916-43.957-30.333-43.845Q-30.751-43.733-31.127-43.709Q-31.502-43.684-31.968-43.684L-32.003-43.684Q-32.131-43.122-32.131-42.819M-31.933-43.944Q-31.072-43.944-30.413-44.100Q-29.753-44.256-29.753-44.827Q-29.753-45.078-29.953-45.218Q-30.153-45.359-30.413-45.359Q-30.984-45.359-31.375-44.952Q-31.766-44.546-31.933-43.944",[605],[594,3914],{"fill":596,"d":3915},"M-20.244-41.64h42.45",[594,3917],{"d":3918},"m24.711-41.64-3.584-1.352 1.178 1.351-1.178 1.35Z",[594,3920],{"fill":596,"d":3921},"M51.288-41.64h42.45",[594,3923],{"d":3924},"m96.243-41.64-3.584-1.352 1.178 1.351-1.178 1.35Z",[594,3926],{"fill":596,"d":3927},"M-33.247-28.637V8.12",[594,3929],{"d":3930},"m-33.247 10.627 1.35-3.584-1.35 1.178-1.351-1.178Z",[594,3932],{"fill":596,"d":3933},"M-20.244 24.2h42.45",[594,3935],{"d":3936},"m24.711 24.2-3.584-1.35 1.178 1.35-1.178 1.351Z",[594,3938],{"fill":596,"d":3939},"m47.852 15.394 50.135-46.146",[594,3941],{"d":3942,"style":3943},"m99.83-32.45-3.552 1.435 1.782.195.048 1.792Z","stroke-width:.39997600000000005",[594,3945],{"fill":596,"d":3946},"M38.285-28.637V8.12",[594,3948],{"d":3949},"m38.285 10.627 1.35-3.584-1.35 1.178-1.351-1.178Z",[589,3951,3952],{"fill":2066,"stroke":2066},[589,3953,3955,3962],{"fill":2066,"stroke":596,"fontFamily":3954,"fontSize":2069},"cmr7",[589,3956,3958],{"transform":3957},"translate(-14.007 -22.435)",[594,3959],{"d":3960,"fill":2066,"stroke":2066,"className":3961,"style":2077},"M-31.316-41.641L-32.868-41.641L-32.868-41.921Q-32.642-41.921-32.493-41.955Q-32.345-41.990-32.345-42.130L-32.345-43.979Q-32.345-44.167-32.393-44.251Q-32.440-44.334-32.538-44.353Q-32.635-44.372-32.847-44.372L-32.847-44.652L-31.791-44.727L-31.791-42.130Q-31.791-41.990-31.659-41.955Q-31.528-41.921-31.316-41.921L-31.316-41.641M-32.587-45.948Q-32.587-46.119-32.464-46.238Q-32.341-46.358-32.170-46.358Q-32.003-46.358-31.880-46.238Q-31.757-46.119-31.757-45.948Q-31.757-45.773-31.880-45.650Q-32.003-45.527-32.170-45.527Q-32.341-45.527-32.464-45.650Q-32.587-45.773-32.587-45.948M-28.988-41.641L-30.622-41.641L-30.622-41.921Q-30.393-41.921-30.244-41.955Q-30.096-41.990-30.096-42.130L-30.096-43.979Q-30.096-44.249-30.203-44.310Q-30.311-44.372-30.622-44.372L-30.622-44.652L-29.562-44.727L-29.562-44.078Q-29.392-44.386-29.087-44.557Q-28.783-44.727-28.438-44.727Q-27.932-44.727-27.648-44.504Q-27.365-44.280-27.365-43.784L-27.365-42.130Q-27.365-41.993-27.216-41.957Q-27.067-41.921-26.842-41.921L-26.842-41.641L-28.472-41.641L-28.472-41.921Q-28.243-41.921-28.094-41.955Q-27.946-41.990-27.946-42.130L-27.946-43.770Q-27.946-44.105-28.065-44.305Q-28.185-44.505-28.499-44.505Q-28.769-44.505-29.004-44.369Q-29.238-44.232-29.376-43.998Q-29.515-43.764-29.515-43.490L-29.515-42.130Q-29.515-41.993-29.364-41.957Q-29.214-41.921-28.988-41.921L-28.988-41.641M-24.371-42.895L-26.428-42.895L-26.428-43.398L-24.371-43.398L-24.371-42.895M-23.567-43.152Q-23.567-43.490-23.427-43.781Q-23.287-44.071-23.043-44.285Q-22.798-44.498-22.494-44.613Q-22.190-44.727-21.865-44.727Q-21.595-44.727-21.332-44.628Q-21.069-44.529-20.877-44.351L-20.877-45.749Q-20.877-46.019-20.985-46.081Q-21.093-46.142-21.404-46.142L-21.404-46.423L-20.327-46.498L-20.327-42.314Q-20.327-42.126-20.272-42.043Q-20.218-41.959-20.117-41.940Q-20.016-41.921-19.801-41.921L-19.801-41.641L-20.908-41.573L-20.908-41.990Q-21.325-41.573-21.951-41.573Q-22.381-41.573-22.754-41.785Q-23.126-41.996-23.347-42.357Q-23.567-42.718-23.567-43.152M-21.893-41.795Q-21.684-41.795-21.498-41.867Q-21.311-41.938-21.158-42.075Q-21.004-42.212-20.908-42.390L-20.908-43.999Q-20.994-44.146-21.139-44.266Q-21.284-44.386-21.453-44.445Q-21.622-44.505-21.804-44.505Q-22.364-44.505-22.632-44.116Q-22.901-43.726-22.901-43.145Q-22.901-42.574-22.667-42.184Q-22.433-41.795-21.893-41.795M-19.192-43.176Q-19.192-43.497-19.068-43.786Q-18.943-44.075-18.717-44.298Q-18.492-44.522-18.196-44.642Q-17.900-44.762-17.582-44.762Q-17.254-44.762-16.993-44.662Q-16.731-44.563-16.555-44.381Q-16.379-44.198-16.285-43.940Q-16.191-43.682-16.191-43.350Q-16.191-43.258-16.273-43.237L-18.529-43.237L-18.529-43.176Q-18.529-42.588-18.246-42.205Q-17.962-41.822-17.394-41.822Q-17.073-41.822-16.805-42.015Q-16.537-42.208-16.448-42.523Q-16.441-42.564-16.366-42.578L-16.273-42.578Q-16.191-42.554-16.191-42.482Q-16.191-42.475-16.198-42.448Q-16.311-42.051-16.682-41.812Q-17.053-41.573-17.476-41.573Q-17.914-41.573-18.314-41.781Q-18.714-41.990-18.953-42.357Q-19.192-42.724-19.192-43.176M-18.522-43.446L-16.707-43.446Q-16.707-43.723-16.805-43.975Q-16.902-44.228-17.101-44.384Q-17.299-44.539-17.582-44.539Q-17.859-44.539-18.073-44.381Q-18.287-44.222-18.404-43.967Q-18.522-43.712-18.522-43.446M-15.644-41.108Q-15.644-41.354-15.448-41.538Q-15.251-41.723-14.995-41.802Q-15.132-41.914-15.204-42.075Q-15.275-42.236-15.275-42.417Q-15.275-42.738-15.063-42.984Q-15.398-43.282-15.398-43.692Q-15.398-44.153-15.009-44.440Q-14.619-44.727-14.141-44.727Q-13.669-44.727-13.334-44.481Q-13.160-44.635-12.949-44.717Q-12.739-44.799-12.510-44.799Q-12.346-44.799-12.225-44.692Q-12.103-44.584-12.103-44.420Q-12.103-44.324-12.175-44.252Q-12.247-44.181-12.339-44.181Q-12.438-44.181-12.508-44.254Q-12.579-44.328-12.579-44.427Q-12.579-44.481-12.565-44.512L-12.558-44.526Q-12.551-44.546-12.543-44.557Q-12.534-44.567-12.531-44.574Q-12.886-44.574-13.173-44.351Q-12.886-44.058-12.886-43.692Q-12.886-43.377-13.071-43.145Q-13.255-42.912-13.544-42.784Q-13.833-42.656-14.141-42.656Q-14.342-42.656-14.534-42.706Q-14.725-42.755-14.903-42.865Q-14.995-42.738-14.995-42.595Q-14.995-42.413-14.867-42.278Q-14.739-42.143-14.554-42.143L-13.922-42.143Q-13.474-42.143-13.105-42.072Q-12.736-42-12.476-41.771Q-12.216-41.542-12.216-41.108Q-12.216-40.787-12.512-40.585Q-12.808-40.383-13.211-40.294Q-13.614-40.205-13.929-40.205Q-14.247-40.205-14.650-40.294Q-15.053-40.383-15.349-40.585Q-15.644-40.787-15.644-41.108M-15.190-41.108Q-15.190-40.879-14.971-40.730Q-14.752-40.581-14.460-40.513Q-14.168-40.445-13.929-40.445Q-13.765-40.445-13.556-40.481Q-13.348-40.516-13.141-40.597Q-12.934-40.677-12.802-40.805Q-12.671-40.933-12.671-41.108Q-12.671-41.460-13.052-41.554Q-13.433-41.648-13.935-41.648L-14.554-41.648Q-14.793-41.648-14.992-41.497Q-15.190-41.347-15.190-41.108M-14.141-42.895Q-13.474-42.895-13.474-43.692Q-13.474-44.492-14.141-44.492Q-14.810-44.492-14.810-43.692Q-14.810-42.895-14.141-42.895",[605],[589,3963,3964],{"transform":3957},[594,3965],{"d":3966,"fill":2066,"stroke":2066,"className":3967,"style":2077},"M-7.230-41.501Q-7.865-41.501-8.229-41.846Q-8.594-42.191-8.729-42.716Q-8.864-43.241-8.864-43.866Q-8.864-44.891-8.508-45.590Q-8.153-46.289-7.230-46.289Q-6.303-46.289-5.951-45.590Q-5.599-44.891-5.599-43.866Q-5.599-43.241-5.734-42.716Q-5.869-42.191-6.232-41.846Q-6.594-41.501-7.230-41.501M-7.230-41.726Q-6.792-41.726-6.579-42.101Q-6.365-42.475-6.315-42.942Q-6.266-43.408-6.266-43.986Q-6.266-44.539-6.315-44.967Q-6.365-45.394-6.577-45.729Q-6.789-46.064-7.230-46.064Q-7.572-46.064-7.775-45.857Q-7.978-45.650-8.065-45.338Q-8.153-45.025-8.175-44.709Q-8.197-44.392-8.197-43.986Q-8.197-43.569-8.175-43.227Q-8.153-42.885-8.064-42.537Q-7.975-42.188-7.770-41.957Q-7.565-41.726-7.230-41.726",[605],[589,3969,3971],{"transform":3970},"translate(69.539 -21.93)",[594,3972],{"d":3973,"fill":591,"stroke":591,"className":3974,"style":2077},"M-29.921-41.641L-32.451-41.641L-32.451-41.921Q-31.483-41.921-31.483-42.130L-31.483-45.749Q-31.876-45.561-32.498-45.561L-32.498-45.842Q-32.081-45.842-31.717-45.943Q-31.353-46.043-31.097-46.289L-30.971-46.289Q-30.906-46.272-30.889-46.204L-30.889-42.130Q-30.889-41.921-29.921-41.921",[605],[589,3976,3978],{"transform":3977},"translate(141.07 -21.93)",[594,3979],{"d":3980,"fill":591,"stroke":591,"className":3981,"style":2077},"M-29.921-41.641L-32.806-41.641L-32.806-41.843Q-32.806-41.873-32.779-41.901L-31.531-43.118Q-31.459-43.193-31.417-43.235Q-31.374-43.278-31.295-43.357Q-30.882-43.770-30.651-44.128Q-30.420-44.485-30.420-44.909Q-30.420-45.141-30.499-45.344Q-30.578-45.548-30.719-45.698Q-30.861-45.849-31.056-45.929Q-31.251-46.009-31.483-46.009Q-31.794-46.009-32.052-45.850Q-32.310-45.691-32.440-45.414L-32.420-45.414Q-32.252-45.414-32.145-45.303Q-32.037-45.192-32.037-45.028Q-32.037-44.871-32.146-44.758Q-32.256-44.645-32.420-44.645Q-32.580-44.645-32.693-44.758Q-32.806-44.871-32.806-45.028Q-32.806-45.404-32.598-45.691Q-32.389-45.978-32.054-46.134Q-31.719-46.289-31.364-46.289Q-30.940-46.289-30.560-46.131Q-30.181-45.972-29.947-45.655Q-29.713-45.339-29.713-44.909Q-29.713-44.598-29.853-44.329Q-29.993-44.061-30.198-43.856Q-30.403-43.651-30.766-43.369Q-31.128-43.087-31.237-42.991L-32.092-42.263L-31.449-42.263Q-31.186-42.263-30.897-42.265Q-30.608-42.266-30.390-42.275Q-30.171-42.284-30.154-42.301Q-30.092-42.366-30.055-42.533Q-30.017-42.701-29.979-42.943L-29.713-42.943",[605],[589,3983,3985],{"transform":3984},"translate(-29.023 68.097)",[594,3986],{"d":3973,"fill":591,"stroke":591,"className":3987,"style":2077},[605],[589,3989,3991],{"transform":3990},"translate(69.539 92.282)",[594,3992],{"d":3980,"fill":591,"stroke":591,"className":3993,"style":2077},[605],[589,3995,3997,4004],{"stroke":596,"fontFamily":3996,"fontSize":2176},"cmr8",[589,3998,4000],{"transform":3999},"translate(-20.549 108.053)",[594,4001],{"d":4002,"fill":591,"stroke":591,"className":4003,"style":2184},"M-33.009-43.395Q-33.009-43.875-32.776-44.291Q-32.544-44.707-32.134-44.957Q-31.724-45.207-31.247-45.207Q-30.517-45.207-30.118-44.766Q-29.720-44.325-29.720-43.594Q-29.720-43.489-29.813-43.465L-32.263-43.465L-32.263-43.395Q-32.263-42.985-32.142-42.629Q-32.020-42.274-31.749-42.057Q-31.477-41.840-31.048-41.840Q-30.684-41.840-30.388-42.069Q-30.091-42.297-29.989-42.649Q-29.981-42.696-29.895-42.711L-29.813-42.711Q-29.720-42.684-29.720-42.602Q-29.720-42.594-29.727-42.563Q-29.790-42.336-29.929-42.153Q-30.067-41.969-30.259-41.836Q-30.450-41.703-30.669-41.633Q-30.888-41.563-31.126-41.563Q-31.497-41.563-31.835-41.700Q-32.173-41.836-32.440-42.088Q-32.708-42.340-32.858-42.680Q-33.009-43.020-33.009-43.395M-32.255-43.703L-30.294-43.703Q-30.294-44.008-30.395-44.299Q-30.497-44.590-30.714-44.772Q-30.931-44.953-31.247-44.953Q-31.548-44.953-31.778-44.766Q-32.009-44.578-32.132-44.287Q-32.255-43.996-32.255-43.703M-27.302-41.641L-29.157-41.641L-29.157-41.938Q-28.884-41.938-28.716-41.985Q-28.548-42.032-28.548-42.200L-28.548-44.336Q-28.548-44.551-28.610-44.647Q-28.673-44.743-28.792-44.764Q-28.911-44.786-29.157-44.786L-29.157-45.082L-27.966-45.168L-27.966-44.434Q-27.852-44.649-27.659-44.817Q-27.466-44.985-27.227-45.077Q-26.989-45.168-26.735-45.168Q-25.774-45.168-25.599-44.457Q-25.415-44.786-25.087-44.977Q-24.759-45.168-24.380-45.168Q-23.204-45.168-23.204-44.090L-23.204-42.200Q-23.204-42.032-23.036-41.985Q-22.868-41.938-22.599-41.938L-22.599-41.641L-24.454-41.641L-24.454-41.938Q-24.181-41.938-24.013-41.983Q-23.845-42.028-23.845-42.200L-23.845-44.075Q-23.845-44.461-23.970-44.688Q-24.095-44.914-24.446-44.914Q-24.751-44.914-25.007-44.752Q-25.263-44.590-25.411-44.321Q-25.559-44.051-25.559-43.754L-25.559-42.200Q-25.559-42.032-25.390-41.985Q-25.220-41.938-24.950-41.938L-24.950-41.641L-26.806-41.641L-26.806-41.938Q-26.532-41.938-26.364-41.985Q-26.196-42.032-26.196-42.200L-26.196-44.075Q-26.196-44.461-26.321-44.688Q-26.446-44.914-26.798-44.914Q-27.102-44.914-27.358-44.752Q-27.614-44.590-27.763-44.321Q-27.911-44.051-27.911-43.754L-27.911-42.200Q-27.911-42.032-27.741-41.985Q-27.571-41.938-27.302-41.938L-27.302-41.641M-20.294-41.641L-22.071-41.641L-22.071-41.938Q-21.798-41.938-21.630-41.985Q-21.462-42.032-21.462-42.200L-21.462-44.336Q-21.462-44.551-21.518-44.647Q-21.575-44.743-21.688-44.764Q-21.802-44.786-22.048-44.786L-22.048-45.082L-20.849-45.168L-20.849-42.200Q-20.849-42.032-20.702-41.985Q-20.556-41.938-20.294-41.938L-20.294-41.641M-21.735-46.563Q-21.735-46.754-21.601-46.885Q-21.466-47.016-21.270-47.016Q-21.149-47.016-21.046-46.953Q-20.942-46.891-20.880-46.787Q-20.817-46.684-20.817-46.563Q-20.817-46.368-20.948-46.233Q-21.079-46.098-21.270-46.098Q-21.470-46.098-21.602-46.231Q-21.735-46.364-21.735-46.563M-19.169-42.602L-19.169-44.793L-19.872-44.793L-19.872-45.047Q-19.517-45.047-19.274-45.280Q-19.032-45.512-18.921-45.860Q-18.809-46.207-18.809-46.563L-18.528-46.563L-18.528-45.090L-17.352-45.090L-17.352-44.793L-18.528-44.793L-18.528-42.618Q-18.528-42.297-18.409-42.069Q-18.290-41.840-18.009-41.840Q-17.829-41.840-17.712-41.963Q-17.595-42.086-17.542-42.266Q-17.489-42.446-17.489-42.618L-17.489-43.090L-17.208-43.090L-17.208-42.602Q-17.208-42.348-17.313-42.108Q-17.419-41.868-17.616-41.715Q-17.813-41.563-18.071-41.563Q-18.388-41.563-18.640-41.686Q-18.892-41.809-19.030-42.043Q-19.169-42.278-19.169-42.602",[605],[589,4005,4006],{"transform":3999},[594,4007],{"d":4008,"fill":591,"stroke":591,"className":4009,"style":2184},"M-13.648-43.336Q-13.648-43.840-13.392-44.272Q-13.136-44.703-12.700-44.955Q-12.265-45.207-11.765-45.207Q-11.378-45.207-11.036-45.063Q-10.695-44.918-10.433-44.657Q-10.171-44.395-10.029-44.059Q-9.886-43.723-9.886-43.336Q-9.886-42.844-10.150-42.434Q-10.413-42.024-10.843-41.793Q-11.273-41.563-11.765-41.563Q-12.257-41.563-12.691-41.795Q-13.124-42.028-13.386-42.436Q-13.648-42.844-13.648-43.336M-11.765-41.840Q-11.308-41.840-11.056-42.063Q-10.804-42.286-10.716-42.637Q-10.628-42.989-10.628-43.434Q-10.628-43.864-10.722-44.202Q-10.816-44.539-11.070-44.746Q-11.323-44.953-11.765-44.953Q-12.413-44.953-12.657-44.537Q-12.902-44.121-12.902-43.434Q-12.902-42.989-12.814-42.637Q-12.726-42.286-12.474-42.063Q-12.222-41.840-11.765-41.840M-7.394-41.641L-9.374-41.641L-9.374-41.938Q-9.105-41.938-8.937-41.983Q-8.769-42.028-8.769-42.200L-8.769-44.336Q-8.769-44.551-8.831-44.647Q-8.894-44.743-9.011-44.764Q-9.128-44.786-9.374-44.786L-9.374-45.082L-8.206-45.168L-8.206-44.383Q-8.128-44.594-7.976-44.780Q-7.823-44.965-7.624-45.067Q-7.425-45.168-7.198-45.168Q-6.952-45.168-6.761-45.024Q-6.570-44.879-6.570-44.649Q-6.570-44.493-6.675-44.383Q-6.781-44.274-6.937-44.274Q-7.093-44.274-7.202-44.383Q-7.312-44.493-7.312-44.649Q-7.312-44.809-7.206-44.914Q-7.531-44.914-7.745-44.686Q-7.960-44.457-8.056-44.118Q-8.152-43.778-8.152-43.473L-8.152-42.200Q-8.152-42.032-7.925-41.985Q-7.698-41.938-7.394-41.938L-7.394-41.641M-4.273-41.563Q-4.753-41.563-5.161-41.807Q-5.570-42.051-5.808-42.465Q-6.046-42.879-6.046-43.368Q-6.046-43.860-5.788-44.276Q-5.531-44.692-5.099-44.930Q-4.667-45.168-4.175-45.168Q-3.554-45.168-3.105-44.731L-3.105-46.360Q-3.105-46.575-3.167-46.670Q-3.230-46.766-3.347-46.787Q-3.464-46.809-3.710-46.809L-3.710-47.106L-2.488-47.192L-2.488-42.383Q-2.488-42.172-2.425-42.077Q-2.363-41.981-2.245-41.959Q-2.128-41.938-1.878-41.938L-1.878-41.641L-3.128-41.563L-3.128-42.047Q-3.593-41.563-4.273-41.563M-4.206-41.817Q-3.866-41.817-3.573-42.008Q-3.281-42.200-3.128-42.496L-3.128-44.328Q-3.277-44.602-3.538-44.758Q-3.800-44.914-4.113-44.914Q-4.738-44.914-5.021-44.467Q-5.304-44.020-5.304-43.360Q-5.304-42.715-5.052-42.266Q-4.800-41.817-4.206-41.817M-1.370-43.395Q-1.370-43.875-1.138-44.291Q-0.906-44.707-0.495-44.957Q-0.085-45.207 0.391-45.207Q1.122-45.207 1.520-44.766Q1.919-44.325 1.919-43.594Q1.919-43.489 1.825-43.465L-0.624-43.465L-0.624-43.395Q-0.624-42.985-0.503-42.629Q-0.382-42.274-0.111-42.057Q0.161-41.840 0.591-41.840Q0.954-41.840 1.251-42.069Q1.548-42.297 1.649-42.649Q1.657-42.696 1.743-42.711L1.825-42.711Q1.919-42.684 1.919-42.602Q1.919-42.594 1.911-42.563Q1.848-42.336 1.710-42.153Q1.571-41.969 1.380-41.836Q1.188-41.703 0.969-41.633Q0.751-41.563 0.512-41.563Q0.141-41.563-0.197-41.700Q-0.534-41.836-0.802-42.088Q-1.070-42.340-1.220-42.680Q-1.370-43.020-1.370-43.395M-0.616-43.703L1.344-43.703Q1.344-44.008 1.243-44.299Q1.141-44.590 0.925-44.772Q0.708-44.953 0.391-44.953Q0.091-44.953-0.140-44.766Q-0.370-44.578-0.493-44.287Q-0.616-43.996-0.616-43.703M4.415-41.641L2.434-41.641L2.434-41.938Q2.704-41.938 2.872-41.983Q3.040-42.028 3.040-42.200L3.040-44.336Q3.040-44.551 2.977-44.647Q2.915-44.743 2.798-44.764Q2.680-44.786 2.434-44.786L2.434-45.082L3.602-45.168L3.602-44.383Q3.680-44.594 3.833-44.780Q3.985-44.965 4.184-45.067Q4.384-45.168 4.610-45.168Q4.856-45.168 5.048-45.024Q5.239-44.879 5.239-44.649Q5.239-44.493 5.134-44.383Q5.028-44.274 4.872-44.274Q4.716-44.274 4.606-44.383Q4.497-44.493 4.497-44.649Q4.497-44.809 4.602-44.914Q4.278-44.914 4.063-44.686Q3.848-44.457 3.753-44.118Q3.657-43.778 3.657-43.473L3.657-42.200Q3.657-42.032 3.884-41.985Q4.110-41.938 4.415-41.938L4.415-41.641M6.200-42.106Q6.200-42.289 6.337-42.426Q6.473-42.563 6.665-42.563Q6.856-42.563 6.989-42.430Q7.122-42.297 7.122-42.106Q7.122-41.907 6.989-41.774Q6.856-41.641 6.665-41.641Q6.473-41.641 6.337-41.778Q6.200-41.914 6.200-42.106M6.200-44.633Q6.200-44.817 6.337-44.953Q6.473-45.090 6.665-45.090Q6.856-45.090 6.989-44.957Q7.122-44.825 7.122-44.633Q7.122-44.434 6.989-44.301Q6.856-44.168 6.665-44.168Q6.473-44.168 6.337-44.305Q6.200-44.442 6.200-44.633",[605],[589,4011,4012,4015],{"fill":2223},[594,4013],{"d":4014},"M5.164 70.747H19.39V56.521H5.164Z",[589,4016,4018],{"transform":4017},"translate(43.356 106.782)",[594,4019],{"d":4020,"fill":591,"stroke":591,"className":4021,"style":2077},"M-31.757-41.573Q-32.081-41.573-32.326-41.730Q-32.570-41.887-32.702-42.152Q-32.833-42.417-32.833-42.742Q-32.833-43.210-32.580-43.673Q-32.328-44.136-31.904-44.432Q-31.480-44.727-31.008-44.727Q-30.793-44.727-30.607-44.623Q-30.420-44.519-30.301-44.334Q-30.277-44.447-30.183-44.521Q-30.089-44.594-29.973-44.594Q-29.870-44.594-29.802-44.533Q-29.733-44.471-29.733-44.372Q-29.733-44.314-29.740-44.287L-30.222-42.369Q-30.249-42.212-30.249-42.123Q-30.249-41.996-30.198-41.896Q-30.147-41.795-30.027-41.795Q-29.805-41.795-29.692-42.048Q-29.580-42.301-29.494-42.670Q-29.470-42.731-29.419-42.731L-29.306-42.731Q-29.272-42.731-29.250-42.702Q-29.227-42.673-29.227-42.649Q-29.227-42.636-29.234-42.622Q-29.497-41.573-30.041-41.573Q-30.290-41.573-30.499-41.696Q-30.707-41.819-30.776-42.048Q-31.251-41.573-31.757-41.573M-31.743-41.795Q-31.470-41.795-31.218-41.979Q-30.967-42.164-30.776-42.431L-30.407-43.911Q-30.444-44.071-30.525-44.208Q-30.605-44.345-30.731-44.425Q-30.858-44.505-31.022-44.505Q-31.230-44.505-31.417-44.381Q-31.603-44.256-31.741-44.064Q-31.880-43.873-31.965-43.671Q-32.078-43.377-32.162-43.032Q-32.246-42.687-32.246-42.437Q-32.246-42.181-32.117-41.988Q-31.989-41.795-31.743-41.795",[605],[589,4023,4024,4027],{"fill":2223},[594,4025],{"d":4026},"M25.08 70.747h14.227V56.521H25.081Z",[589,4028,4030],{"transform":4029},"translate(63.683 107.706)",[594,4031],{"d":4032,"fill":591,"stroke":591,"className":4033,"style":2077},"M-31.757-41.573Q-32.075-41.573-32.307-41.728Q-32.539-41.884-32.666-42.147Q-32.792-42.410-32.792-42.724Q-32.792-42.943-32.734-43.159L-32.078-45.808Q-32.030-45.982-32.030-46.050Q-32.030-46.142-32.464-46.142Q-32.546-46.170-32.546-46.255L-32.519-46.365Q-32.512-46.406-32.440-46.423L-31.463-46.498Q-31.425-46.498-31.391-46.471Q-31.357-46.443-31.357-46.395L-31.859-44.365Q-31.449-44.727-31.008-44.727Q-30.687-44.727-30.441-44.572Q-30.195-44.416-30.065-44.150Q-29.935-43.883-29.935-43.558Q-29.935-43.206-30.080-42.854Q-30.226-42.502-30.477-42.214Q-30.728-41.925-31.063-41.749Q-31.398-41.573-31.757-41.573M-31.743-41.795Q-31.535-41.795-31.345-41.921Q-31.155-42.048-31.018-42.237Q-30.882-42.427-30.796-42.629Q-30.690-42.892-30.607-43.259Q-30.523-43.627-30.523-43.859Q-30.523-44.013-30.574-44.165Q-30.625-44.317-30.738-44.411Q-30.851-44.505-31.022-44.505Q-31.299-44.505-31.545-44.324Q-31.791-44.143-31.986-43.866L-32.177-43.124Q-32.273-42.707-32.273-42.482Q-32.273-42.205-32.140-42Q-32.006-41.795-31.743-41.795",[605],[589,4035,4036,4039],{"fill":2223},[594,4037],{"d":4038},"M44.998 70.747h14.226V56.521H44.998Z",[589,4040,4042],{"transform":4041},"translate(83.277 107.706)",[594,4043],{"d":4044,"fill":591,"stroke":591,"className":4045,"style":2077},"M-31.757-41.573Q-32.081-41.573-32.326-41.730Q-32.570-41.887-32.702-42.152Q-32.833-42.417-32.833-42.742Q-32.833-43.210-32.580-43.673Q-32.328-44.136-31.904-44.432Q-31.480-44.727-31.008-44.727Q-30.793-44.727-30.607-44.623Q-30.420-44.519-30.301-44.334L-29.921-45.862Q-29.887-45.965-29.887-46.050Q-29.887-46.142-30.321-46.142Q-30.407-46.170-30.407-46.255L-30.376-46.365Q-30.349-46.412-30.301-46.423L-29.320-46.498Q-29.282-46.498-29.248-46.471Q-29.214-46.443-29.214-46.395L-30.222-42.369Q-30.249-42.212-30.249-42.123Q-30.249-41.996-30.198-41.896Q-30.147-41.795-30.027-41.795Q-29.805-41.795-29.692-42.048Q-29.580-42.301-29.494-42.670Q-29.470-42.731-29.419-42.731L-29.306-42.731Q-29.272-42.731-29.250-42.702Q-29.227-42.673-29.227-42.649Q-29.227-42.636-29.234-42.622Q-29.497-41.573-30.041-41.573Q-30.290-41.573-30.499-41.696Q-30.707-41.819-30.776-42.048Q-31.251-41.573-31.757-41.573M-31.743-41.795Q-31.470-41.795-31.218-41.979Q-30.967-42.164-30.776-42.431L-30.407-43.911Q-30.444-44.071-30.525-44.208Q-30.605-44.345-30.731-44.425Q-30.858-44.505-31.022-44.505Q-31.230-44.505-31.417-44.381Q-31.603-44.256-31.741-44.064Q-31.880-43.873-31.965-43.671Q-32.078-43.377-32.162-43.032Q-32.246-42.687-32.246-42.437Q-32.246-42.181-32.117-41.988Q-31.989-41.795-31.743-41.795",[605],[589,4047,4048,4051],{"fill":2223},[594,4049],{"d":4050},"M64.915 70.747H79.14V56.521H64.915Z",[589,4052,4054],{"transform":4053},"translate(103.378 106.782)",[594,4055],{"d":4056,"fill":591,"stroke":591,"className":4057,"style":2077},"M-32.198-42.608Q-32.198-42.273-32.025-42.034Q-31.852-41.795-31.524-41.795Q-31.073-41.795-30.663-41.961Q-30.253-42.126-29.986-42.461Q-29.969-42.489-29.921-42.489Q-29.873-42.489-29.827-42.439Q-29.781-42.390-29.781-42.342Q-29.781-42.311-29.802-42.284Q-30.092-41.918-30.554-41.745Q-31.015-41.573-31.538-41.573Q-31.900-41.573-32.189-41.747Q-32.478-41.921-32.635-42.220Q-32.792-42.519-32.792-42.889Q-32.792-43.278-32.628-43.617Q-32.464-43.955-32.177-44.204Q-31.890-44.454-31.529-44.591Q-31.169-44.727-30.789-44.727Q-30.581-44.727-30.384-44.662Q-30.188-44.598-30.055-44.459Q-29.921-44.321-29.921-44.112Q-29.921-43.798-30.150-43.611Q-30.379-43.425-30.731-43.343Q-31.083-43.261-31.398-43.242Q-31.712-43.224-32.085-43.224L-32.105-43.224Q-32.198-42.854-32.198-42.608M-32.051-43.446Q-31.760-43.446-31.492-43.459Q-31.224-43.473-30.933-43.535Q-30.643-43.596-30.446-43.736Q-30.249-43.876-30.249-44.105Q-30.249-44.297-30.424-44.401Q-30.598-44.505-30.810-44.505Q-31.268-44.505-31.588-44.210Q-31.907-43.914-32.051-43.446",[605],[589,4059,4060,4063],{"fill":2223},[594,4061],{"d":4062},"M84.831 70.747h14.227V56.521H84.83Z",[589,4064,4066],{"transform":4065},"translate(123.405 106.782)",[594,4067],{"d":4068,"fill":591,"stroke":591,"className":4069,"style":2077},"M-32.218-42.543Q-32.218-42.219-32.030-42.007Q-31.842-41.795-31.524-41.795Q-31.073-41.795-30.663-41.961Q-30.253-42.126-29.986-42.461Q-29.969-42.489-29.921-42.489Q-29.873-42.489-29.827-42.439Q-29.781-42.390-29.781-42.342Q-29.781-42.311-29.802-42.284Q-30.092-41.918-30.554-41.745Q-31.015-41.573-31.538-41.573Q-31.890-41.573-32.187-41.726Q-32.485-41.880-32.656-42.161Q-32.827-42.441-32.827-42.796Q-32.827-43.172-32.654-43.524Q-32.481-43.876-32.181-44.150Q-31.880-44.423-31.523-44.575Q-31.165-44.727-30.789-44.727Q-30.588-44.727-30.372-44.668Q-30.157-44.608-30.015-44.473Q-29.873-44.338-29.873-44.126Q-29.873-43.938-29.988-43.798Q-30.102-43.658-30.294-43.658Q-30.410-43.658-30.492-43.731Q-30.574-43.805-30.574-43.924Q-30.574-44.071-30.475-44.184Q-30.376-44.297-30.229-44.328Q-30.417-44.505-30.803-44.505Q-31.138-44.505-31.403-44.319Q-31.668-44.133-31.849-43.835Q-32.030-43.538-32.124-43.191Q-32.218-42.844-32.218-42.543",[605],[685,4071,4073,4074,4089,4090,753],{"className":4072},[688],"Kahn's algorithm on the prerequisite DAG: each vertex tagged with its in-degree; repeatedly emit an in-degree-",[427,4075,4077],{"className":4076},[430],[427,4078,4080],{"className":4079,"ariaHidden":435},[434],[427,4081,4083,4086],{"className":4082},[439],[427,4084],{"className":4085,"style":3586},[443],[427,4087,3328],{"className":4088},[448]," vertex, yielding the order ",[427,4091,4093],{"className":4092},[430],[427,4094,4096],{"className":4095,"ariaHidden":435},[434],[427,4097,4099,4102,4106,4109,4112,4115,4118,4121,4124,4127,4130,4133,4136,4139,4142,4145],{"className":4098},[439],[427,4100],{"className":4101,"style":799},[443],[427,4103,4105],{"className":4104},[803],"⟨",[427,4107,404],{"className":4108},[448,449],[427,4110,814],{"className":4111},[813],[427,4113],{"className":4114,"style":818},[519],[427,4116,467],{"className":4117},[448,449],[427,4119,814],{"className":4120},[813],[427,4122],{"className":4123,"style":818},[519],[427,4125,933],{"className":4126},[448,449],[427,4128,814],{"className":4129},[813],[427,4131],{"className":4132,"style":818},[519],[427,4134,943],{"className":4135},[448,449],[427,4137,814],{"className":4138},[813],[427,4140],{"className":4141,"style":818},[519],[427,4143,953],{"className":4144},[448,449],[427,4146,4148],{"className":4147},[827],"⟩",[409,4150,4152],{"id":4151},"strong-connectivity","Strong connectivity",[381,4154,4155,4156,4159,4160,4163],{},"DAGs are the cycle-free case. What can we say about a ",[385,4157,4158],{},"general"," digraph, cycles\nand all? The right notion of ",[395,4161,4162],{},"connected"," for directed graphs is mutual\nreachability.",[414,4165,4166],{"type":416},[381,4167,4168,4171,4172,468,4187,4202,4203,4206,4207,705,4222,1951,4237,4240,4241,705,4256,4271],{},[390,4169,4170],{},"Definition (Strongly connected component)."," Two vertices ",[427,4173,4175],{"className":4174},[430],[427,4176,4178],{"className":4177,"ariaHidden":435},[434],[427,4179,4181,4184],{"className":4180},[439],[427,4182],{"className":4183,"style":444},[443],[427,4185,515],{"className":4186},[448,449],[427,4188,4190],{"className":4189},[430],[427,4191,4193],{"className":4192,"ariaHidden":435},[434],[427,4194,4196,4199],{"className":4195},[439],[427,4197],{"className":4198,"style":444},[443],[427,4200,539],{"className":4201,"style":538},[448,449]," are ",[390,4204,4205],{},"strongly connected"," if there is a directed\npath from ",[427,4208,4210],{"className":4209},[430],[427,4211,4213],{"className":4212,"ariaHidden":435},[434],[427,4214,4216,4219],{"className":4215},[439],[427,4217],{"className":4218,"style":444},[443],[427,4220,515],{"className":4221},[448,449],[427,4223,4225],{"className":4224},[430],[427,4226,4228],{"className":4227,"ariaHidden":435},[434],[427,4229,4231,4234],{"className":4230},[439],[427,4232],{"className":4233,"style":444},[443],[427,4235,539],{"className":4236,"style":538},[448,449],[385,4238,4239],{},"and"," one from ",[427,4242,4244],{"className":4243},[430],[427,4245,4247],{"className":4246,"ariaHidden":435},[434],[427,4248,4250,4253],{"className":4249},[439],[427,4251],{"className":4252,"style":444},[443],[427,4254,539],{"className":4255,"style":538},[448,449],[427,4257,4259],{"className":4258},[430],[427,4260,4262],{"className":4261,"ariaHidden":435},[434],[427,4263,4265,4268],{"className":4264},[439],[427,4266],{"className":4267,"style":444},[443],[427,4269,515],{"className":4270},[448,449],". A strongly connected\ncomponent (SCC) is a maximal set of mutually-reachable vertices.",[381,4273,4274,4275,4290,4291,4294,4295,4298],{},"Strong connectivity partitions ",[427,4276,4278],{"className":4277},[430],[427,4279,4281],{"className":4280,"ariaHidden":435},[434],[427,4282,4284,4287],{"className":4283},[439],[427,4285],{"className":4286,"style":778},[443],[427,4288,809],{"className":4289,"style":808},[448,449]," into SCCs. Collapsing each component to a\nsingle super-vertex yields the ",[390,4292,4293],{},"component graph"," (or ",[385,4296,4297],{},"condensation","), and a\nbeautiful fact holds:",[414,4300,4301],{"type":1202},[381,4302,4303,4305],{},[390,4304,1207],{}," The component graph of any digraph is always a DAG.",[381,4307,4308],{},"If it had a cycle, the components on that cycle could all reach one another and\nwould have been merged into one larger component, contradicting maximality. So\nevery directed graph is, at the coarse level of its components, a DAG. SCCs are\nthe standard first step in analyzing a digraph: find the components, contract\nthem, and reason about the resulting DAG.",[576,4310,4312,4385],{"className":4311},[579,580],[582,4313,4316],{"xmlns":584,"width":4314,"height":586,"viewBox":4315},"131.116","-75 -75 98.337 86.468",[589,4317,4318,4320,4325,4328,4334,4336,4342,4345,4351,4354,4357,4360,4363,4366,4369,4372,4375,4378,4381,4383],{"stroke":591,"style":592},[594,4319],{"fill":596,"d":597},[589,4321,4322],{"transform":600},[594,4323],{"d":603,"fill":591,"stroke":591,"className":4324,"style":606},[605],[594,4326],{"fill":596,"d":4327},"M19.867-60.689c0-6.286-5.096-11.381-11.381-11.381S-2.895-66.975-2.895-60.689 2.2-49.308 8.485-49.308s11.382-5.095 11.382-11.38Zm-11.381 0",[589,4329,4331],{"transform":4330},"translate(63.86 3.125)",[594,4332],{"d":615,"fill":591,"stroke":591,"className":4333,"style":606},[605],[594,4335],{"fill":596,"d":629},[589,4337,4339],{"transform":4338},"translate(-2.002 59.243)",[594,4340],{"d":625,"fill":591,"stroke":591,"className":4341,"style":606},[605],[594,4343],{"fill":596,"d":4344},"M19.867-3.383c0-6.286-5.096-11.382-11.381-11.382S-2.895-9.669-2.895-3.383 2.2 7.997 8.485 7.997s11.382-5.095 11.382-11.38Zm-11.381 0",[589,4346,4348],{"transform":4347},"translate(63.445 60.43)",[594,4349],{"d":635,"fill":591,"stroke":591,"className":4350,"style":606},[605],[594,4352],{"fill":596,"d":4353},"M-46.473-64.65c16.152-5.879 27.924-5.879 41.186-1.052",[594,4355],{"d":4356,"style":1020},"m-2.932-64.845-2.906-2.495.645 1.673-1.57.866Z",[594,4358],{"fill":596,"d":4359},"M-2.397-56.728c-16.152 5.879-27.924 5.879-41.186 1.052",[594,4361],{"d":4362,"style":1020},"m-45.938-56.533 2.907 2.495-.646-1.672 1.57-.867Z",[594,4364],{"fill":596,"d":4365},"M8.486-49.108v31.068",[594,4367],{"d":4368},"m8.486-15.534 1.35-3.585-1.35 1.18-1.351-1.18Z",[594,4370],{"fill":596,"d":4371},"M-46.473-7.344c16.152-5.88 27.924-5.88 41.186-1.052",[594,4373],{"d":4374,"style":1020},"m-2.932-7.54-2.906-2.494.645 1.672-1.57.866Z",[594,4376],{"fill":596,"d":4377},"M-2.397.577c-16.152 5.88-27.924 5.88-41.186 1.052",[594,4379],{"d":4380,"style":1020},"m-45.938.772 2.907 2.495-.646-1.672 1.57-.866Z",[594,4382],{"fill":596,"d":661},[594,4384],{"d":664},[685,4386,4388,4389,468,4413,4437,4438,705,4462,753],{"className":4387},[688],"A digraph with two strongly connected components ",[427,4390,4392],{"className":4391},[430],[427,4393,4395],{"className":4394,"ariaHidden":435},[434],[427,4396,4398,4401,4404,4407,4410],{"className":4397},[439],[427,4399],{"className":4400,"style":911},[443],[427,4402,404],{"className":4403},[448,449],[427,4405,814],{"className":4406},[813],[427,4408],{"className":4409,"style":818},[519],[427,4411,467],{"className":4412},[448,449],[427,4414,4416],{"className":4415},[430],[427,4417,4419],{"className":4418,"ariaHidden":435},[434],[427,4420,4422,4425,4428,4431,4434],{"className":4421},[439],[427,4423],{"className":4424,"style":911},[443],[427,4426,953],{"className":4427},[448,449],[427,4429,814],{"className":4430},[813],[427,4432],{"className":4433,"style":818},[519],[427,4435,933],{"className":4436},[448,449]," linked by edges from ",[427,4439,4441],{"className":4440},[430],[427,4442,4444],{"className":4443,"ariaHidden":435},[434],[427,4445,4447,4450,4453,4456,4459],{"className":4446},[439],[427,4448],{"className":4449,"style":911},[443],[427,4451,404],{"className":4452},[448,449],[427,4454,814],{"className":4455},[813],[427,4457],{"className":4458,"style":818},[519],[427,4460,467],{"className":4461},[448,449],[427,4463,4465],{"className":4464},[430],[427,4466,4468],{"className":4467,"ariaHidden":435},[434],[427,4469,4471,4474,4477,4480,4483],{"className":4470},[439],[427,4472],{"className":4473,"style":911},[443],[427,4475,953],{"className":4476},[448,449],[427,4478,814],{"className":4479},[813],[427,4481],{"className":4482,"style":818},[519],[427,4484,933],{"className":4485},[448,449],[381,4487,4488,4489,4526,4527,4560,4561,705,4594,4627,4628,3751,4661,574],{},"Here ",[427,4490,4492],{"className":4491},[430],[427,4493,4495],{"className":4494,"ariaHidden":435},[434],[427,4496,4498,4501],{"className":4497},[439],[427,4499],{"className":4500,"style":799},[443],[427,4502,4504,4510,4513,4516,4519,4522],{"className":4503},[3441],[427,4505,4509],{"className":4506,"style":4508},[803,4507],"delimcenter","top:0em;","{",[427,4511,404],{"className":4512},[448,449],[427,4514,814],{"className":4515},[813],[427,4517],{"className":4518,"style":818},[519],[427,4520,467],{"className":4521},[448,449],[427,4523,4525],{"className":4524,"style":4508},[827,4507],"}"," form one SCC (each reaches the other) and ",[427,4528,4530],{"className":4529},[430],[427,4531,4533],{"className":4532,"ariaHidden":435},[434],[427,4534,4536,4539],{"className":4535},[439],[427,4537],{"className":4538,"style":799},[443],[427,4540,4542,4545,4548,4551,4554,4557],{"className":4541},[3441],[427,4543,4509],{"className":4544,"style":4508},[803,4507],[427,4546,953],{"className":4547},[448,449],[427,4549,814],{"className":4550},[813],[427,4552],{"className":4553,"style":818},[519],[427,4555,933],{"className":4556},[448,449],[427,4558,4525],{"className":4559,"style":4508},[827,4507]," another,\nand the only edges between the two groups run from ",[427,4562,4564],{"className":4563},[430],[427,4565,4567],{"className":4566,"ariaHidden":435},[434],[427,4568,4570,4573],{"className":4569},[439],[427,4571],{"className":4572,"style":799},[443],[427,4574,4576,4579,4582,4585,4588,4591],{"className":4575},[3441],[427,4577,4509],{"className":4578,"style":4508},[803,4507],[427,4580,404],{"className":4581},[448,449],[427,4583,814],{"className":4584},[813],[427,4586],{"className":4587,"style":818},[519],[427,4589,467],{"className":4590},[448,449],[427,4592,4525],{"className":4593,"style":4508},[827,4507],[427,4595,4597],{"className":4596},[430],[427,4598,4600],{"className":4599,"ariaHidden":435},[434],[427,4601,4603,4606],{"className":4602},[439],[427,4604],{"className":4605,"style":799},[443],[427,4607,4609,4612,4615,4618,4621,4624],{"className":4608},[3441],[427,4610,4509],{"className":4611,"style":4508},[803,4507],[427,4613,953],{"className":4614},[448,449],[427,4616,814],{"className":4617},[813],[427,4619],{"className":4620,"style":818},[519],[427,4622,933],{"className":4623},[448,449],[427,4625,4525],{"className":4626,"style":4508},[827,4507],".\nCollapsing each component to a super-vertex leaves the two-node condensation,\nitself a DAG, with its own trivial topological order ",[427,4629,4631],{"className":4630},[430],[427,4632,4634],{"className":4633,"ariaHidden":435},[434],[427,4635,4637,4640],{"className":4636},[439],[427,4638],{"className":4639,"style":799},[443],[427,4641,4643,4646,4649,4652,4655,4658],{"className":4642},[3441],[427,4644,4509],{"className":4645,"style":4508},[803,4507],[427,4647,404],{"className":4648},[448,449],[427,4650,814],{"className":4651},[813],[427,4653],{"className":4654,"style":818},[519],[427,4656,467],{"className":4657},[448,449],[427,4659,4525],{"className":4660,"style":4508},[827,4507],[427,4662,4664],{"className":4663},[430],[427,4665,4667],{"className":4666,"ariaHidden":435},[434],[427,4668,4670,4673],{"className":4669},[439],[427,4671],{"className":4672,"style":799},[443],[427,4674,4676,4679,4682,4685,4688,4691],{"className":4675},[3441],[427,4677,4509],{"className":4678,"style":4508},[803,4507],[427,4680,953],{"className":4681},[448,449],[427,4683,814],{"className":4684},[813],[427,4686],{"className":4687,"style":818},[519],[427,4689,933],{"className":4690},[448,449],[427,4692,4525],{"className":4693,"style":4508},[827,4507],[576,4695,4697,4770],{"className":4696},[579,580],[582,4698,4702],{"xmlns":584,"width":4699,"height":4700,"viewBox":4701},"166.339","42.677","-75 -75 124.754 32.007",[589,4703,4704,4707,4735,4738,4764,4767],{"stroke":591,"style":592},[594,4705],{"fill":596,"d":4706},"M-43.846-72.07h-20.89a4 4 0 0 0-4 4v17.607a4 4 0 0 0 4 4h20.89a4 4 0 0 0 4-4V-68.07a4 4 0 0 0-4-4Zm-24.89 25.607",[589,4708,4710,4717,4723,4729],{"stroke":596,"fontSize":4709},"9",[589,4711,4713],{"transform":4712},"translate(-11.113 2.25)",[594,4714],{"d":4715,"fill":591,"stroke":591,"className":4716,"style":606},"M-52.318-58.185L-52.318-60.373Q-52.318-60.839-52.698-61.114Q-53.078-61.389-53.562-61.389Q-53.588-61.389-53.621-61.413Q-53.654-61.437-53.654-61.472L-53.654-61.569Q-53.654-61.599-53.619-61.626Q-53.583-61.652-53.562-61.652Q-53.078-61.652-52.698-61.920Q-52.318-62.188-52.318-62.659L-52.318-64.847Q-52.318-65.265-52.026-65.528Q-51.733-65.792-51.307-65.904Q-50.881-66.016-50.485-66.016L-50.402-66.016Q-50.371-66.016-50.343-65.992Q-50.314-65.968-50.314-65.937L-50.314-65.836Q-50.314-65.814-50.347-65.785Q-50.380-65.757-50.402-65.757Q-50.876-65.757-51.261-65.506Q-51.645-65.256-51.645-64.812L-51.645-62.623Q-51.645-62.210-51.951-61.927Q-52.256-61.643-52.709-61.516Q-52.432-61.441-52.188-61.290Q-51.944-61.138-51.795-60.914Q-51.645-60.690-51.645-60.409L-51.645-58.220Q-51.645-57.917-51.461-57.704Q-51.276-57.491-50.993-57.383Q-50.709-57.275-50.402-57.275Q-50.371-57.275-50.343-57.251Q-50.314-57.227-50.314-57.196L-50.314-57.095Q-50.314-57.073-50.347-57.045Q-50.380-57.016-50.402-57.016L-50.485-57.016Q-50.881-57.016-51.307-57.128Q-51.733-57.240-52.026-57.504Q-52.318-57.767-52.318-58.185",[605],[589,4718,4719],{"transform":4712},[594,4720],{"d":4721,"fill":591,"stroke":591,"className":4722,"style":606},"M-48.044-59.165Q-48.440-59.165-48.726-59.369Q-49.011-59.574-49.158-59.908Q-49.306-60.242-49.306-60.633Q-49.306-61.068-49.132-61.529Q-48.958-61.991-48.646-62.382Q-48.334-62.773-47.924-63.008Q-47.513-63.243-47.073-63.243Q-46.805-63.243-46.588-63.105Q-46.370-62.966-46.238-62.720Q-46.199-62.870-46.091-62.966Q-45.983-63.063-45.843-63.063Q-45.720-63.063-45.636-62.990Q-45.553-62.918-45.553-62.795Q-45.553-62.742-45.562-62.711L-46.181-60.220Q-46.238-60.022-46.238-59.824Q-46.238-59.429-45.975-59.429Q-45.689-59.429-45.555-59.752Q-45.421-60.075-45.302-60.580Q-45.293-60.611-45.269-60.635Q-45.245-60.659-45.210-60.659L-45.104-60.659Q-45.056-60.659-45.034-60.626Q-45.012-60.593-45.012-60.545Q-45.126-60.114-45.217-59.861Q-45.307-59.609-45.500-59.387Q-45.693-59.165-45.992-59.165Q-46.300-59.165-46.548-59.336Q-46.796-59.508-46.867-59.798Q-47.122-59.512-47.418-59.339Q-47.715-59.165-48.044-59.165M-48.027-59.429Q-47.697-59.429-47.387-59.670Q-47.078-59.912-46.867-60.228Q-46.858-60.237-46.858-60.255L-46.361-62.219Q-46.418-62.536-46.610-62.760Q-46.801-62.984-47.091-62.984Q-47.460-62.984-47.759-62.665Q-48.058-62.347-48.225-61.938Q-48.361-61.591-48.486-61.081Q-48.611-60.571-48.611-60.246Q-48.611-59.921-48.473-59.675Q-48.334-59.429-48.027-59.429M-43.870-57.662Q-43.870-57.702-43.834-57.737Q-43.509-58.049-43.329-58.455Q-43.149-58.862-43.149-59.310L-43.149-59.393Q-43.290-59.266-43.492-59.266Q-43.637-59.266-43.751-59.332Q-43.865-59.398-43.931-59.510Q-43.997-59.622-43.997-59.771Q-43.997-59.991-43.856-60.132Q-43.716-60.272-43.492-60.272Q-43.171-60.272-43.030-59.974Q-42.890-59.675-42.890-59.310Q-42.890-58.800-43.094-58.345Q-43.298-57.891-43.663-57.539Q-43.698-57.521-43.725-57.521Q-43.782-57.521-43.826-57.565Q-43.870-57.609-43.870-57.662",[605],[589,4724,4725],{"transform":4712},[594,4726],{"d":4727,"fill":591,"stroke":591,"className":4728,"style":606},"M-39.033-59.165Q-39.609-59.165-39.930-59.596Q-40.251-60.026-40.251-60.606Q-40.251-61.011-40.167-61.239L-39.288-64.737Q-39.253-64.887-39.253-64.961Q-39.253-65.098-39.820-65.098Q-39.917-65.098-39.917-65.216Q-39.917-65.273-39.886-65.344Q-39.855-65.414-39.789-65.414L-38.568-65.511Q-38.515-65.511-38.482-65.482Q-38.449-65.453-38.449-65.405L-38.449-65.370L-39.108-62.760Q-38.585-63.243-38.062-63.243Q-37.676-63.243-37.385-63.039Q-37.095-62.834-36.948-62.500Q-36.801-62.166-36.801-61.775Q-36.801-61.191-37.104-60.582Q-37.407-59.974-37.928-59.569Q-38.449-59.165-39.033-59.165M-39.016-59.429Q-38.647-59.429-38.343-59.752Q-38.040-60.075-37.882-60.470Q-37.737-60.826-37.616-61.334Q-37.495-61.841-37.495-62.162Q-37.495-62.487-37.640-62.735Q-37.785-62.984-38.080-62.984Q-38.682-62.984-39.253-62.184L-39.495-61.191Q-39.640-60.567-39.640-60.303Q-39.640-59.960-39.488-59.694Q-39.337-59.429-39.016-59.429",[605],[589,4730,4731],{"transform":4712},[594,4732],{"d":4733,"fill":591,"stroke":591,"className":4734,"style":606},"M-36.054-57.095L-36.054-57.196Q-36.054-57.227-36.023-57.251Q-35.992-57.275-35.962-57.275Q-35.654-57.275-35.370-57.383Q-35.087-57.491-34.902-57.704Q-34.718-57.917-34.718-58.220L-34.718-60.409Q-34.718-60.699-34.568-60.921Q-34.419-61.142-34.177-61.292Q-33.936-61.441-33.659-61.516Q-34.116-61.648-34.417-61.929Q-34.718-62.210-34.718-62.623L-34.718-64.812Q-34.718-65.115-34.902-65.328Q-35.087-65.541-35.370-65.649Q-35.654-65.757-35.962-65.757Q-35.979-65.757-36.016-65.785Q-36.054-65.814-36.054-65.836L-36.054-65.937Q-36.054-65.968-36.023-65.992Q-35.992-66.016-35.962-66.016L-35.882-66.016Q-35.483-66.016-35.056-65.904Q-34.630-65.792-34.338-65.528Q-34.045-65.265-34.045-64.847L-34.045-62.659Q-34.045-62.342-33.865-62.114Q-33.685-61.885-33.395-61.769Q-33.105-61.652-32.802-61.652Q-32.775-61.652-32.745-61.626Q-32.714-61.599-32.714-61.569L-32.714-61.472Q-32.714-61.437-32.743-61.413Q-32.771-61.389-32.802-61.389Q-33.285-61.389-33.665-61.114Q-34.045-60.839-34.045-60.373L-34.045-58.185Q-34.045-57.767-34.338-57.504Q-34.630-57.240-35.056-57.128Q-35.483-57.016-35.882-57.016L-35.962-57.016Q-35.979-57.016-36.016-57.045Q-36.054-57.073-36.054-57.095",[605],[594,4736],{"fill":596,"d":4737},"M42.284-72.07H21.46a4 4 0 0 0-4 4v17.607a4 4 0 0 0 4 4h20.824a4 4 0 0 0 4-4V-68.07a4 4 0 0 0-4-4ZM17.46-46.463",[589,4739,4740,4746,4752,4758],{"stroke":596,"fontSize":4709},[589,4741,4743],{"transform":4742},"translate(75.084 2.25)",[594,4744],{"d":4715,"fill":591,"stroke":591,"className":4745,"style":606},[605],[589,4747,4748],{"transform":4742},[594,4749],{"d":4750,"fill":591,"stroke":591,"className":4751,"style":606},"M-48.576-60.373Q-48.576-59.978-48.363-59.703Q-48.150-59.429-47.768-59.429Q-47.223-59.429-46.717-59.664Q-46.212-59.899-45.895-60.321Q-45.874-60.356-45.812-60.356Q-45.755-60.356-45.709-60.305Q-45.663-60.255-45.663-60.202Q-45.663-60.167-45.689-60.141Q-46.036-59.666-46.599-59.415Q-47.161-59.165-47.785-59.165Q-48.216-59.165-48.565-59.367Q-48.915-59.569-49.106-59.925Q-49.297-60.281-49.297-60.707Q-49.297-61.169-49.095-61.626Q-48.893-62.083-48.537-62.452Q-48.181-62.821-47.737-63.032Q-47.293-63.243-46.823-63.243Q-46.555-63.243-46.306-63.162Q-46.058-63.080-45.891-62.902Q-45.724-62.724-45.724-62.461Q-45.724-62.224-45.874-62.046Q-46.023-61.868-46.256-61.868Q-46.396-61.868-46.502-61.962Q-46.607-62.057-46.607-62.202Q-46.607-62.404-46.460-62.558Q-46.313-62.711-46.111-62.711Q-46.216-62.852-46.421-62.918Q-46.625-62.984-46.832-62.984Q-47.368-62.984-47.765-62.555Q-48.163-62.127-48.370-61.507Q-48.576-60.888-48.576-60.373M-44.770-57.662Q-44.770-57.702-44.735-57.737Q-44.410-58.049-44.230-58.455Q-44.050-58.862-44.050-59.310L-44.050-59.393Q-44.190-59.266-44.393-59.266Q-44.538-59.266-44.652-59.332Q-44.766-59.398-44.832-59.510Q-44.898-59.622-44.898-59.771Q-44.898-59.991-44.757-60.132Q-44.617-60.272-44.393-60.272Q-44.072-60.272-43.931-59.974Q-43.791-59.675-43.791-59.310Q-43.791-58.800-43.995-58.345Q-44.199-57.891-44.564-57.539Q-44.599-57.521-44.625-57.521Q-44.683-57.521-44.727-57.565Q-44.770-57.609-44.770-57.662",[605],[589,4753,4754],{"transform":4742},[594,4755],{"d":4756,"fill":591,"stroke":591,"className":4757,"style":606},"M-39.929-59.165Q-40.325-59.165-40.611-59.369Q-40.896-59.574-41.043-59.908Q-41.191-60.242-41.191-60.633Q-41.191-61.068-41.017-61.529Q-40.843-61.991-40.531-62.382Q-40.219-62.773-39.809-63.008Q-39.398-63.243-38.958-63.243Q-38.690-63.243-38.473-63.105Q-38.255-62.966-38.123-62.720L-37.618-64.737Q-37.583-64.887-37.583-64.961Q-37.583-65.098-38.150-65.098Q-38.246-65.098-38.246-65.216Q-38.246-65.273-38.216-65.344Q-38.185-65.414-38.123-65.414L-36.897-65.511Q-36.844-65.511-36.814-65.482Q-36.783-65.453-36.783-65.405L-36.783-65.370L-38.066-60.220Q-38.066-60.162-38.095-60.031Q-38.123-59.899-38.123-59.824Q-38.123-59.429-37.860-59.429Q-37.574-59.429-37.440-59.752Q-37.306-60.075-37.187-60.580Q-37.178-60.611-37.154-60.635Q-37.130-60.659-37.095-60.659L-36.989-60.659Q-36.941-60.659-36.919-60.626Q-36.897-60.593-36.897-60.545Q-37.011-60.114-37.102-59.861Q-37.192-59.609-37.385-59.387Q-37.578-59.165-37.877-59.165Q-38.185-59.165-38.433-59.336Q-38.681-59.508-38.752-59.798Q-39.007-59.512-39.303-59.339Q-39.600-59.165-39.929-59.165M-39.912-59.429Q-39.582-59.429-39.272-59.670Q-38.963-59.912-38.752-60.228Q-38.743-60.237-38.743-60.264L-38.246-62.219Q-38.303-62.536-38.495-62.760Q-38.686-62.984-38.976-62.984Q-39.345-62.984-39.644-62.665Q-39.943-62.347-40.110-61.938Q-40.246-61.591-40.371-61.081Q-40.496-60.571-40.496-60.246Q-40.496-59.921-40.358-59.675Q-40.219-59.429-39.912-59.429",[605],[589,4759,4760],{"transform":4742},[594,4761],{"d":4762,"fill":591,"stroke":591,"className":4763,"style":606},"M-36.121-57.095L-36.121-57.196Q-36.121-57.227-36.090-57.251Q-36.059-57.275-36.029-57.275Q-35.721-57.275-35.437-57.383Q-35.154-57.491-34.969-57.704Q-34.785-57.917-34.785-58.220L-34.785-60.409Q-34.785-60.699-34.635-60.921Q-34.486-61.142-34.244-61.292Q-34.003-61.441-33.726-61.516Q-34.183-61.648-34.484-61.929Q-34.785-62.210-34.785-62.623L-34.785-64.812Q-34.785-65.115-34.969-65.328Q-35.154-65.541-35.437-65.649Q-35.721-65.757-36.029-65.757Q-36.046-65.757-36.083-65.785Q-36.121-65.814-36.121-65.836L-36.121-65.937Q-36.121-65.968-36.090-65.992Q-36.059-66.016-36.029-66.016L-35.949-66.016Q-35.550-66.016-35.123-65.904Q-34.697-65.792-34.405-65.528Q-34.112-65.265-34.112-64.847L-34.112-62.659Q-34.112-62.342-33.932-62.114Q-33.752-61.885-33.462-61.769Q-33.172-61.652-32.869-61.652Q-32.842-61.652-32.812-61.626Q-32.781-61.599-32.781-61.569L-32.781-61.472Q-32.781-61.437-32.810-61.413Q-32.838-61.389-32.869-61.389Q-33.352-61.389-33.732-61.114Q-34.112-60.839-34.112-60.373L-34.112-58.185Q-34.112-57.767-34.405-57.504Q-34.697-57.240-35.123-57.128Q-35.550-57.016-35.949-57.016L-36.029-57.016Q-36.046-57.016-36.083-57.045Q-36.121-57.073-36.121-57.095",[605],[594,4765],{"fill":596,"d":4766},"M-39.646-59.266h53.83",[594,4768],{"d":4769},"m16.69-59.266-3.584-1.351 1.179 1.35-1.18 1.351Z",[685,4771,4773,4774,4798,4799,753],{"className":4772},[688],"The two-node condensation DAG with component ",[427,4775,4777],{"className":4776},[430],[427,4778,4780],{"className":4779,"ariaHidden":435},[434],[427,4781,4783,4786,4789,4792,4795],{"className":4782},[439],[427,4784],{"className":4785,"style":911},[443],[427,4787,404],{"className":4788},[448,449],[427,4790,814],{"className":4791},[813],[427,4793],{"className":4794,"style":818},[519],[427,4796,467],{"className":4797},[448,449]," pointing to component ",[427,4800,4802],{"className":4801},[430],[427,4803,4805],{"className":4804,"ariaHidden":435},[434],[427,4806,4808,4811,4814,4817,4820],{"className":4807},[439],[427,4809],{"className":4810,"style":911},[443],[427,4812,953],{"className":4813},[448,449],[427,4815,814],{"className":4816},[813],[427,4818],{"className":4819,"style":818},[519],[427,4821,933],{"className":4822},[448,449],[2432,4824,4826],{"id":4825},"kosarajus-two-pass-algorithm","Kosaraju's two-pass algorithm",[381,4828,4829,4830,4838,4839,1951,4842,398,4890,4905,4906,4909,4910,4925],{},"The cleanest way to find SCCs, due to Kosaraju and Sharir, is two depth-first\nsearches with a transpose in between.",[1191,4831,4832],{},[404,4833,4837],{"href":4834,"ariaDescribedBy":4835,"dataFootnoteRef":376,"id":4836},"#user-content-fn-skiena-scc",[1197],"user-content-fnref-skiena-scc","3"," The ",[390,4840,4841],{},"transpose",[427,4843,4845],{"className":4844},[430],[427,4846,4848],{"className":4847,"ariaHidden":435},[434],[427,4849,4851,4855],{"className":4850},[439],[427,4852],{"className":4853,"style":4854},[443],"height:0.8491em;",[427,4856,4858,4861],{"className":4857},[448],[427,4859,782],{"className":4860},[448,449],[427,4862,4864],{"className":4863},[2463],[427,4865,4867],{"className":4866},[2467],[427,4868,4870],{"className":4869},[2472],[427,4871,4873],{"className":4872,"style":4854},[2476],[427,4874,4876,4879],{"style":4875},"top:-3.063em;margin-right:0.05em;",[427,4877],{"className":4878,"style":2485},[2484],[427,4880,4882],{"className":4881},[2489,2490,2491,2492],[427,4883,4885],{"className":4884},[448,2492],[427,4886,4889],{"className":4887},[448,4888,2492],"mathsf","T",[427,4891,4893],{"className":4892},[430],[427,4894,4896],{"className":4895,"ariaHidden":435},[434],[427,4897,4899,4902],{"className":4898},[439],[427,4900],{"className":4901,"style":778},[443],[427,4903,782],{"className":4904},[448,449],"\nwith every edge reversed; crucially, it has ",[385,4907,4908],{},"exactly the same SCCs"," as ",[427,4911,4913],{"className":4912},[430],[427,4914,4916],{"className":4915,"ariaHidden":435},[434],[427,4917,4919,4922],{"className":4918},[439],[427,4920],{"className":4921,"style":778},[443],[427,4923,782],{"className":4924},[448,449],",\nbecause reversing all edges does not affect mutual reachability.",[1459,4927,4929],{"className":1461,"code":4928,"language":1463,"meta":376,"style":376},"caption: $\\textsc{Strongly-Connected-Components}(G)$ — Kosaraju's two passes\nnumber: 4\ncall $\\textsc{DFS}(G)$ to compute the finish time $u.f$ for each vertex $u$\ncompute $G^{\\mathsf{T}}$ \u002F\u002F reverse all edges\ncall $\\textsc{DFS}(G^{\\mathsf{T}})$, considering vertices in order of decreasing $u.f$\noutput the vertices of each tree in the second forest as one SCC\n",[1465,4930,4931,4936,4941,4946,4951,4956],{"__ignoreMap":376},[427,4932,4933],{"class":1469,"line":6},[427,4934,4935],{},"caption: $\\textsc{Strongly-Connected-Components}(G)$ — Kosaraju's two passes\n",[427,4937,4938],{"class":1469,"line":18},[427,4939,4940],{},"number: 4\n",[427,4942,4943],{"class":1469,"line":24},[427,4944,4945],{},"call $\\textsc{DFS}(G)$ to compute the finish time $u.f$ for each vertex $u$\n",[427,4947,4948],{"class":1469,"line":73},[427,4949,4950],{},"compute $G^{\\mathsf{T}}$ \u002F\u002F reverse all edges\n",[427,4952,4953],{"class":1469,"line":102},[427,4954,4955],{},"call $\\textsc{DFS}(G^{\\mathsf{T}})$, considering vertices in order of decreasing $u.f$\n",[427,4957,4958],{"class":1469,"line":108},[427,4959,4960],{},"output the vertices of each tree in the second forest as one SCC\n",[381,4962,4963,4966,4967,4970,4971,4986,4987,4990,4991,5035,5036,5039,5040,5043,5044,753],{},[390,4964,4965],{},"Why it works (the intuition)."," Imagine the component graph laid out in\ntopological order, sources on the left. The ",[385,4968,4969],{},"first"," DFS on ",[427,4972,4974],{"className":4973},[430],[427,4975,4977],{"className":4976,"ariaHidden":435},[434],[427,4978,4980,4983],{"className":4979},[439],[427,4981],{"className":4982,"style":778},[443],[427,4984,782],{"className":4985},[448,449]," assigns the\nlargest finish time to a vertex in a ",[385,4988,4989],{},"source"," component of that DAG. When we\nthen run DFS on ",[427,4992,4994],{"className":4993},[430],[427,4995,4997],{"className":4996,"ariaHidden":435},[434],[427,4998,5000,5003],{"className":4999},[439],[427,5001],{"className":5002,"style":4854},[443],[427,5004,5006,5009],{"className":5005},[448],[427,5007,782],{"className":5008},[448,449],[427,5010,5012],{"className":5011},[2463],[427,5013,5015],{"className":5014},[2467],[427,5016,5018],{"className":5017},[2472],[427,5019,5021],{"className":5020,"style":4854},[2476],[427,5022,5023,5026],{"style":4875},[427,5024],{"className":5025,"style":2485},[2484],[427,5027,5029],{"className":5028},[2489,2490,2491,2492],[427,5030,5032],{"className":5031},[448,2492],[427,5033,4889],{"className":5034},[448,4888,2492],", where every component-graph edge is reversed,\nand start from that highest-finishing vertex, we are launching from a ",[385,5037,5038],{},"sink","\nof the reversed component graph. From a sink, the search cannot leak into any\nother component, so it visits ",[385,5041,5042],{},"exactly"," one SCC and stops. Peeling components off\nin decreasing finish order keeps this true at every step. The whole procedure is\ntwo DFS passes plus a transpose, all linear, so SCCs cost ",[427,5045,5047],{"className":5046},[430],[427,5048,5050,5074],{"className":5049,"ariaHidden":435},[434],[427,5051,5053,5056,5059,5062,5065,5068,5071],{"className":5052},[439],[427,5054],{"className":5055,"style":799},[443],[427,5057,1879],{"className":5058},[448],[427,5060,804],{"className":5061},[803],[427,5063,809],{"className":5064,"style":808},[448,449],[427,5066],{"className":5067,"style":808},[519],[427,5069,1893],{"className":5070},[1892],[427,5072],{"className":5073,"style":808},[519],[427,5075,5077,5080,5083],{"className":5076},[439],[427,5078],{"className":5079,"style":799},[443],[427,5081,823],{"className":5082,"style":822},[448,449],[427,5084,828],{"className":5085},[827],[381,5087,5088,5089,5105,5106,5108,5109,5142,5143,5158],{},"The picture below makes the source\u002Fsink reversal concrete. The first DFS on a\ngraph with three SCCs lands the largest finish time (",[427,5090,5092],{"className":5091},[430],[427,5093,5095],{"className":5094,"ariaHidden":435},[434],[427,5096,5098,5101],{"className":5097},[439],[427,5099],{"className":5100,"style":3586},[443],[427,5102,5104],{"className":5103},[448],"12",") inside the ",[390,5107,4989],{},"\ncomponent ",[427,5110,5112],{"className":5111},[430],[427,5113,5115],{"className":5114,"ariaHidden":435},[434],[427,5116,5118,5121],{"className":5117},[439],[427,5119],{"className":5120,"style":799},[443],[427,5122,5124,5127,5130,5133,5136,5139],{"className":5123},[3441],[427,5125,4509],{"className":5126,"style":4508},[803,4507],[427,5128,404],{"className":5129},[448,449],[427,5131,814],{"className":5132},[813],[427,5134],{"className":5135,"style":818},[519],[427,5137,467],{"className":5138},[448,449],[427,5140,4525],{"className":5141,"style":4508},[827,4507],"; reversing the edges turns that source into a sink, so the\nsecond DFS, launched from ",[427,5144,5146],{"className":5145},[430],[427,5147,5149],{"className":5148,"ariaHidden":435},[434],[427,5150,5152,5155],{"className":5151},[439],[427,5153],{"className":5154,"style":444},[443],[427,5156,404],{"className":5157},[448,449],", is trapped inside one SCC and peels it off cleanly:",[576,5160,5162,5542],{"className":5161},[579,580],[582,5163,5167],{"xmlns":584,"width":5164,"height":5165,"viewBox":5166},"268.562","223.049","-75 -75 201.422 167.287",[589,5168,5169,5208,5212,5215,5222,5225,5232,5235,5242,5245,5252,5255,5262,5265,5269,5272,5275,5278,5281,5284,5287,5296,5304,5325,5332,5339,5346,5353,5399,5431,5434,5460,5463,5483,5491,5499,5535],{"stroke":591,"style":592},[589,5170,5171,5178,5184,5190,5196,5202],{"stroke":596,"fontSize":2176},[589,5172,5174],{"transform":5173},"translate(17.953 -69.132)",[594,5175],{"d":5176,"fill":591,"stroke":591,"className":5177,"style":2184},"M-46.542 3.934Q-46.542 4.449-46.326 4.832Q-46.109 5.215-45.718 5.418Q-45.328 5.621-44.812 5.621Q-44.288 5.621-43.820 5.406Q-43.351 5.191-43.245 4.758L-43.078 4.086Q-43.070 4.055-43.070 3.988Q-43.070 3.910-43.140 3.879Q-43.331 3.840-43.949 3.840Q-44.054 3.801-44.054 3.711L-44.023 3.605Q-43.976 3.543-43.894 3.543L-41.734 3.543Q-41.691 3.543-41.663 3.578Q-41.636 3.613-41.636 3.660L-41.660 3.766Q-41.695 3.824-41.749 3.840Q-42.042 3.840-42.161 3.885Q-42.281 3.930-42.339 4.141L-42.726 5.680Q-42.749 5.750-42.820 5.750Q-42.898 5.750-43.025 5.578Q-43.152 5.406-43.206 5.277Q-43.503 5.613-43.986 5.766Q-44.468 5.918-44.995 5.918Q-45.648 5.918-46.187 5.639Q-46.726 5.359-47.033 4.852Q-47.339 4.344-47.339 3.688Q-47.339 2.996-47.021 2.344Q-46.703 1.691-46.156 1.188Q-45.609 0.684-44.941 0.400Q-44.273 0.117-43.597 0.117Q-43.324 0.117-43.060 0.195Q-42.796 0.273-42.572 0.438Q-42.347 0.602-42.199 0.820L-41.558 0.141Q-41.535 0.117-41.499 0.117L-41.453 0.117Q-41.413 0.117-41.390 0.145Q-41.367 0.172-41.367 0.215L-41.367 0.238L-41.902 2.359Q-41.917 2.430-41.980 2.430L-42.101 2.430Q-42.191 2.430-42.191 2.324Q-42.163 2.148-42.163 1.957Q-42.163 1.535-42.322 1.184Q-42.480 0.832-42.785 0.623Q-43.089 0.414-43.519 0.414Q-44.175 0.414-44.734 0.715Q-45.292 1.016-45.703 1.539Q-46.113 2.063-46.328 2.688Q-46.542 3.313-46.542 3.934",[605],[589,5179,5180],{"transform":5173},[594,5181],{"d":5182,"fill":591,"stroke":591,"className":5183,"style":2184},"M-35.906 5.621L-37.180 2.645L-37.652 2.645L-37.652 2.199L-35.738 2.199L-35.738 2.645L-36.141 2.645L-35.316 4.574L-34.602 2.902L-34.715 2.645L-35.187 2.645L-35.187 2.199L-33.434 2.199L-33.434 2.645L-33.836 2.645L-32.930 4.766L-32.043 2.695Q-32.043 2.645-32.469 2.645L-32.469 2.199L-31.027 2.199L-31.027 2.645Q-31.477 2.645-31.523 2.703L-32.770 5.621Q-32.852 5.789-33.027 5.789L-33.187 5.789Q-33.371 5.789-33.434 5.621L-34.340 3.520L-35.242 5.621Q-35.305 5.789-35.492 5.789L-35.652 5.789Q-35.832 5.789-35.906 5.621M-28.391 5.750L-30.348 5.750L-30.348 5.301L-29.820 5.301L-29.820 2.879Q-29.820 2.727-29.957 2.689Q-30.094 2.652-30.324 2.652L-30.324 2.207L-28.859 2.141L-28.859 5.301L-28.391 5.301L-28.391 5.750M-30.102 0.848Q-30.102 0.570-29.908 0.381Q-29.715 0.191-29.445 0.191Q-29.266 0.191-29.115 0.281Q-28.965 0.371-28.877 0.518Q-28.789 0.664-28.789 0.848Q-28.789 1.117-28.982 1.311Q-29.176 1.504-29.445 1.504Q-29.719 1.504-29.910 1.313Q-30.102 1.121-30.102 0.848M-27.230 4.828L-27.230 2.645L-27.902 2.645L-27.902 2.277Q-27.516 2.277-27.242 2.031Q-26.969 1.785-26.836 1.410Q-26.703 1.035-26.703 0.672L-26.223 0.672L-26.223 2.199L-24.988 2.199L-24.988 2.645L-26.223 2.645L-26.223 4.813Q-26.223 5.398-25.766 5.398Q-25.555 5.398-25.432 5.215Q-25.309 5.031-25.309 4.813L-25.309 4.359L-24.828 4.359L-24.828 4.828Q-24.828 5.102-24.975 5.324Q-25.121 5.547-25.361 5.676Q-25.602 5.805-25.871 5.805Q-26.445 5.805-26.838 5.582Q-27.230 5.359-27.230 4.828M-21.781 5.750L-23.844 5.750L-23.844 5.301L-23.316 5.301L-23.316 0.934Q-23.316 0.785-23.463 0.748Q-23.609 0.711-23.844 0.711L-23.844 0.262L-22.355 0.199L-22.355 2.848Q-22.125 2.512-21.746 2.326Q-21.367 2.141-20.949 2.141Q-20.508 2.141-20.211 2.248Q-19.914 2.355-19.752 2.615Q-19.590 2.875-19.590 3.309L-19.590 5.301L-19.062 5.301L-19.062 5.750L-21.125 5.750L-21.125 5.301L-20.598 5.301L-20.598 3.336Q-20.598 2.961-20.676 2.736Q-20.754 2.512-21.047 2.512Q-21.559 2.512-21.934 2.846Q-22.309 3.180-22.309 3.688L-22.309 5.301L-21.781 5.301",[605],[589,5185,5186],{"transform":5173},[594,5187],{"d":5188,"fill":591,"stroke":591,"className":5189,"style":2184},"M-11.591 5.750L-15.177 5.750L-15.177 5.301L-14.314 5.301L-14.314 0.711L-15.177 0.711L-15.177 0.262L-11.591 0.262Q-10.943 0.262-10.396 0.449Q-9.849 0.637-9.448 0.996Q-9.048 1.355-8.823 1.875Q-8.599 2.395-8.599 3.055Q-8.599 3.703-8.825 4.205Q-9.052 4.707-9.466 5.055Q-9.880 5.402-10.421 5.576Q-10.962 5.750-11.591 5.750M-13.138 0.711L-13.138 5.301L-11.919 5.301Q-11.142 5.301-10.693 5.051Q-10.243 4.801-10.054 4.314Q-9.864 3.828-9.864 3.055Q-9.864 2.441-9.941 2.031Q-10.017 1.621-10.294 1.309Q-10.572 0.996-10.999 0.854Q-11.427 0.711-11.919 0.711L-13.138 0.711M-4.513 5.750L-7.681 5.750L-7.681 5.301L-6.818 5.301L-6.818 0.711L-7.681 0.711L-7.681 0.262L-2.583 0.262L-2.322 2.238L-2.798 2.238Q-2.880 1.602-3.066 1.277Q-3.251 0.953-3.601 0.832Q-3.950 0.711-4.607 0.711L-5.591 0.711L-5.591 2.781L-5.263 2.781Q-4.884 2.781-4.687 2.705Q-4.489 2.629-4.409 2.432Q-4.329 2.234-4.329 1.863L-3.849 1.863L-3.849 4.148L-4.329 4.148Q-4.329 3.777-4.409 3.580Q-4.489 3.383-4.685 3.307Q-4.880 3.230-5.263 3.230L-5.591 3.230L-5.591 5.301L-4.513 5.301L-4.513 5.750M-1.126 5.863L-1.239 5.863Q-1.368 5.832-1.368 5.727L-1.368 4.055Q-1.368 4.008-1.327 3.967Q-1.286 3.926-1.239 3.926L-1.017 3.926Q-0.888 3.957-0.888 4.055Q-0.888 4.805-0.310 5.109Q0.268 5.414 1.081 5.414Q1.288 5.414 1.485 5.357Q1.682 5.301 1.831 5.188Q1.979 5.074 2.061 4.902Q2.143 4.730 2.143 4.512Q2.143 4.172 1.901 3.934Q1.659 3.695 1.319 3.621L0.096 3.375Q-0.302 3.281-0.636 3.064Q-0.970 2.848-1.169 2.514Q-1.368 2.180-1.368 1.781Q-1.368 1.391-1.214 1.076Q-1.060 0.762-0.798 0.561Q-0.536 0.359-0.185 0.254Q0.167 0.148 0.538 0.148Q1.421 0.148 1.983 0.574L2.409 0.176Q2.444 0.148 2.479 0.148L2.585 0.148Q2.714 0.180 2.714 0.277L2.714 1.949Q2.714 2 2.671 2.043Q2.628 2.086 2.585 2.086L2.362 2.086Q2.253 2.070 2.241 1.980Q2.194 1.637 2.055 1.365Q1.917 1.094 1.700 0.916Q1.483 0.738 1.198 0.648Q0.913 0.559 0.538 0.559Q0.100 0.559-0.214 0.762Q-0.529 0.965-0.529 1.375Q-0.529 1.676-0.286 1.885Q-0.044 2.094 0.272 2.164L1.495 2.414Q1.917 2.512 2.253 2.748Q2.589 2.984 2.786 3.338Q2.983 3.691 2.983 4.117Q2.983 4.652 2.733 5.051Q2.483 5.449 2.048 5.656Q1.612 5.863 1.081 5.863Q0.585 5.863 0.147 5.770Q-0.290 5.676-0.646 5.445L-1.056 5.840Q-1.126 5.863-1.126 5.863",[605],[589,5191,5192],{"transform":5173},[594,5193],{"d":5194,"fill":591,"stroke":591,"className":5195,"style":2184},"M9.176 5.750L7.161 5.750L7.161 5.301L7.688 5.301L7.688 2.645L7.075 2.645L7.075 2.199L7.688 2.199L7.688 1.375Q7.688 1.008 7.938 0.758Q8.188 0.508 8.573 0.375Q8.957 0.242 9.362 0.191Q9.766 0.141 10.114 0.141Q10.414 0.141 10.698 0.256Q10.981 0.371 11.163 0.598Q11.344 0.824 11.344 1.125Q11.344 1.363 11.178 1.529Q11.012 1.695 10.770 1.695Q10.536 1.695 10.368 1.527Q10.200 1.359 10.200 1.125Q10.200 0.969 10.276 0.830Q10.352 0.691 10.489 0.621Q10.266 0.512 9.977 0.512Q9.657 0.512 9.342 0.594Q9.028 0.676 8.815 0.871Q8.602 1.066 8.602 1.391L8.602 2.199L9.879 2.199L9.879 2.176L11.368 2.109L11.368 5.301L11.899 5.301L11.899 5.750L9.879 5.750L9.879 5.301L10.411 5.301L10.411 2.840Q10.411 2.680 10.297 2.645L8.649 2.645L8.649 5.301L9.176 5.301L9.176 5.750M14.747 5.750L12.684 5.750L12.684 5.301L13.211 5.301L13.211 2.879Q13.211 2.727 13.065 2.689Q12.918 2.652 12.684 2.652L12.684 2.207L14.114 2.141L14.114 2.934Q14.262 2.688 14.497 2.508Q14.731 2.328 15.008 2.234Q15.286 2.141 15.579 2.141Q16.020 2.141 16.317 2.248Q16.614 2.355 16.776 2.615Q16.938 2.875 16.938 3.309L16.938 5.301L17.465 5.301L17.465 5.750L15.403 5.750L15.403 5.301L15.930 5.301L15.930 3.336Q15.930 2.961 15.852 2.736Q15.774 2.512 15.481 2.512Q14.969 2.512 14.594 2.846Q14.219 3.180 14.219 3.688L14.219 5.301L14.747 5.301L14.747 5.750M20.106 5.750L18.149 5.750L18.149 5.301L18.676 5.301L18.676 2.879Q18.676 2.727 18.539 2.689Q18.403 2.652 18.172 2.652L18.172 2.207L19.637 2.141L19.637 5.301L20.106 5.301L20.106 5.750M18.395 0.848Q18.395 0.570 18.588 0.381Q18.782 0.191 19.051 0.191Q19.231 0.191 19.381 0.281Q19.532 0.371 19.620 0.518Q19.707 0.664 19.707 0.848Q19.707 1.117 19.514 1.311Q19.321 1.504 19.051 1.504Q18.778 1.504 18.586 1.313Q18.395 1.121 18.395 0.848M20.977 5.805L20.868 5.805Q20.739 5.773 20.739 5.672L20.739 4.629Q20.739 4.586 20.776 4.545Q20.813 4.504 20.868 4.504L21.090 4.504Q21.192 4.531 21.219 4.605Q21.336 5.020 21.622 5.229Q21.907 5.438 22.340 5.438Q22.727 5.438 23.008 5.328Q23.289 5.219 23.289 4.887Q23.289 4.652 23.086 4.529Q22.883 4.406 22.594 4.352L21.969 4.254Q21.750 4.211 21.534 4.129Q21.317 4.047 21.133 3.918Q20.950 3.789 20.844 3.611Q20.739 3.434 20.739 3.199Q20.739 2.777 20.973 2.535Q21.207 2.293 21.563 2.201Q21.918 2.109 22.340 2.109Q22.848 2.109 23.153 2.246L23.426 2.117Q23.434 2.113 23.444 2.111Q23.454 2.109 23.465 2.109L23.571 2.109Q23.700 2.141 23.700 2.238L23.700 3.047Q23.700 3.098 23.657 3.141Q23.614 3.184 23.571 3.184L23.348 3.184Q23.219 3.145 23.219 3.047Q23.219 2.816 23.090 2.680Q22.961 2.543 22.764 2.490Q22.567 2.438 22.332 2.438Q21.387 2.438 21.387 2.895Q21.387 3.211 22.036 3.324L22.668 3.430Q23.184 3.523 23.561 3.820Q23.938 4.117 23.938 4.605Q23.938 5.262 23.487 5.533Q23.036 5.805 22.340 5.805Q21.782 5.805 21.395 5.574L21.036 5.789Q21.004 5.805 20.977 5.805M26.770 5.750L24.707 5.750L24.707 5.301L25.235 5.301L25.235 0.934Q25.235 0.785 25.088 0.748Q24.942 0.711 24.707 0.711L24.707 0.262L26.196 0.199L26.196 2.848Q26.426 2.512 26.805 2.326Q27.184 2.141 27.602 2.141Q28.043 2.141 28.340 2.248Q28.637 2.355 28.799 2.615Q28.961 2.875 28.961 3.309L28.961 5.301L29.489 5.301L29.489 5.750L27.426 5.750L27.426 5.301L27.954 5.301L27.954 3.336Q27.954 2.961 27.875 2.736Q27.797 2.512 27.504 2.512Q26.993 2.512 26.618 2.846Q26.243 3.180 26.243 3.688L26.243 5.301L26.770 5.301",[605],[589,5197,5198],{"transform":5173},[594,5199],{"d":5200,"fill":591,"stroke":591,"className":5201,"style":2184},"M33.852 4.828L33.852 2.645L33.181 2.645L33.181 2.277Q33.567 2.277 33.841 2.031Q34.114 1.785 34.247 1.410Q34.380 1.035 34.380 0.672L34.860 0.672L34.860 2.199L36.095 2.199L36.095 2.645L34.860 2.645L34.860 4.813Q34.860 5.398 35.317 5.398Q35.528 5.398 35.651 5.215Q35.774 5.031 35.774 4.813L35.774 4.359L36.255 4.359L36.255 4.828Q36.255 5.102 36.108 5.324Q35.962 5.547 35.722 5.676Q35.481 5.805 35.212 5.805Q34.638 5.805 34.245 5.582Q33.852 5.359 33.852 4.828M39.220 5.750L37.263 5.750L37.263 5.301L37.790 5.301L37.790 2.879Q37.790 2.727 37.653 2.689Q37.517 2.652 37.286 2.652L37.286 2.207L38.751 2.141L38.751 5.301L39.220 5.301L39.220 5.750M37.509 0.848Q37.509 0.570 37.702 0.381Q37.895 0.191 38.165 0.191Q38.345 0.191 38.495 0.281Q38.645 0.371 38.733 0.518Q38.821 0.664 38.821 0.848Q38.821 1.117 38.628 1.311Q38.434 1.504 38.165 1.504Q37.892 1.504 37.700 1.313Q37.509 1.121 37.509 0.848M42.020 5.750L39.958 5.750L39.958 5.301L40.485 5.301L40.485 2.879Q40.485 2.727 40.339 2.689Q40.192 2.652 39.958 2.652L39.958 2.207L41.388 2.141L41.388 2.934Q41.536 2.688 41.770 2.508Q42.005 2.328 42.282 2.234Q42.559 2.141 42.852 2.141Q43.349 2.141 43.694 2.297Q44.040 2.453 44.157 2.863Q44.388 2.520 44.765 2.330Q45.142 2.141 45.571 2.141Q46.013 2.141 46.309 2.248Q46.606 2.355 46.768 2.615Q46.931 2.875 46.931 3.309L46.931 5.301L47.462 5.301L47.462 5.750L45.395 5.750L45.395 5.301L45.923 5.301L45.923 3.336Q45.923 2.961 45.849 2.736Q45.774 2.512 45.477 2.512Q44.966 2.512 44.589 2.848Q44.212 3.184 44.212 3.688L44.212 5.301L44.739 5.301L44.739 5.750L42.677 5.750L42.677 5.301L43.204 5.301L43.204 3.336Q43.204 2.961 43.126 2.736Q43.048 2.512 42.755 2.512Q42.243 2.512 41.868 2.846Q41.493 3.180 41.493 3.688L41.493 5.301L42.020 5.301L42.020 5.750M47.958 3.949Q47.958 3.371 48.241 2.951Q48.524 2.531 49.009 2.320Q49.493 2.109 50.059 2.109Q50.501 2.109 50.837 2.221Q51.173 2.332 51.407 2.553Q51.642 2.773 51.767 3.104Q51.892 3.434 51.892 3.871Q51.892 4.027 51.739 4.055L49.067 4.055Q49.067 5.398 50.325 5.398Q50.677 5.398 50.983 5.242Q51.290 5.086 51.411 4.789Q51.485 4.660 51.571 4.660L51.739 4.660Q51.892 4.695 51.892 4.828Q51.892 4.863 51.884 4.879Q51.700 5.355 51.235 5.580Q50.770 5.805 50.196 5.805Q49.599 5.805 49.089 5.602Q48.579 5.398 48.268 4.977Q47.958 4.555 47.958 3.949M49.067 3.711L51.075 3.711Q51.075 3.172 50.827 2.824Q50.579 2.477 50.059 2.477Q49.716 2.477 49.491 2.643Q49.267 2.809 49.167 3.086Q49.067 3.363 49.067 3.711M52.739 5.805L52.630 5.805Q52.501 5.773 52.501 5.672L52.501 4.629Q52.501 4.586 52.538 4.545Q52.575 4.504 52.630 4.504L52.852 4.504Q52.954 4.531 52.981 4.605Q53.099 5.020 53.384 5.229Q53.669 5.438 54.102 5.438Q54.489 5.438 54.770 5.328Q55.052 5.219 55.052 4.887Q55.052 4.652 54.849 4.529Q54.645 4.406 54.356 4.352L53.731 4.254Q53.513 4.211 53.296 4.129Q53.079 4.047 52.895 3.918Q52.712 3.789 52.606 3.611Q52.501 3.434 52.501 3.199Q52.501 2.777 52.735 2.535Q52.970 2.293 53.325 2.201Q53.681 2.109 54.102 2.109Q54.610 2.109 54.915 2.246L55.188 2.117Q55.196 2.113 55.206 2.111Q55.216 2.109 55.227 2.109L55.333 2.109Q55.462 2.141 55.462 2.238L55.462 3.047Q55.462 3.098 55.419 3.141Q55.376 3.184 55.333 3.184L55.110 3.184Q54.981 3.145 54.981 3.047Q54.981 2.816 54.852 2.680Q54.724 2.543 54.526 2.490Q54.329 2.438 54.095 2.438Q53.149 2.438 53.149 2.895Q53.149 3.211 53.798 3.324L54.431 3.430Q54.946 3.523 55.323 3.820Q55.700 4.117 55.700 4.605Q55.700 5.262 55.249 5.533Q54.798 5.805 54.102 5.805Q53.544 5.805 53.157 5.574L52.798 5.789Q52.767 5.805 52.739 5.805",[605],[589,5203,5204],{"transform":5173},[594,5205],{"d":5206,"fill":591,"stroke":591,"className":5207,"style":2184},"M60.213 7.055Q60.357 7.125 60.533 7.125Q60.677 7.125 60.787 6.986Q60.896 6.848 60.959 6.660Q61.021 6.473 61.064 6.271Q61.107 6.070 61.134 5.902Q61.361 4.742 61.396 4.543L61.752 2.598L61.021 2.598Q60.927 2.570 60.927 2.469L60.951 2.367Q60.959 2.320 61.037 2.301L61.806 2.301L61.904 1.781Q61.982 1.328 62.056 1.057Q62.130 0.785 62.295 0.566Q62.451 0.363 62.672 0.240Q62.892 0.117 63.119 0.117Q63.420 0.117 63.662 0.264Q63.904 0.410 63.904 0.695Q63.904 0.902 63.767 1.051Q63.630 1.199 63.431 1.199Q63.298 1.199 63.205 1.115Q63.111 1.031 63.111 0.895Q63.111 0.742 63.205 0.619Q63.298 0.496 63.447 0.445Q63.291 0.375 63.111 0.375Q63.013 0.375 62.916 0.445Q62.818 0.516 62.775 0.613Q62.728 0.766 62.703 0.879Q62.677 0.992 62.642 1.180Q62.607 1.367 62.586 1.510Q62.564 1.652 62.541 1.766L62.439 2.301L63.318 2.301Q63.416 2.328 63.416 2.422L63.388 2.527Q63.380 2.578 63.302 2.598L62.388 2.598L62.029 4.535Q61.963 4.949 61.871 5.389Q61.779 5.828 61.607 6.299Q61.435 6.770 61.168 7.076Q60.900 7.383 60.525 7.383Q60.232 7.383 60 7.230Q59.767 7.078 59.767 6.805Q59.767 6.602 59.902 6.451Q60.037 6.301 60.240 6.301Q60.373 6.301 60.464 6.385Q60.556 6.469 60.556 6.605Q60.556 6.754 60.461 6.881Q60.365 7.008 60.213 7.055",[605],[594,5209],{"fill":596,"stroke":2066,"d":5210,"style":5211},"M-64.837-12.476v-34.68a4 4 0 0 1 4-4H-.55a4 4 0 0 1 4 4v34.68a4 4 0 0 1-4 4h-60.287a4 4 0 0 1-4-4ZM9.14-12.476v-34.68a4 4 0 0 1 4-4h60.287a4 4 0 0 1 4 4v34.68a4 4 0 0 1-4 4H13.141a4 4 0 0 1-4-4ZM83.118-12.476v-34.68a4 4 0 0 1 4-4h31.834a4 4 0 0 1 4 4v34.68a4 4 0 0 1-4 4H87.118a4 4 0 0 1-4-4Zm39.834-38.68","stroke-dasharray:3.0,3.0",[594,5213],{"fill":596,"d":5214},"M-37.806-34.083c0-5.5-4.459-9.959-9.959-9.959s-9.958 4.459-9.958 9.959 4.458 9.958 9.958 9.958 9.959-4.458 9.959-9.958Zm-9.959 0",[589,5216,5218],{"transform":5217},"translate(-2.169 -38.327)",[594,5219],{"d":5220,"fill":591,"stroke":591,"className":5221,"style":2077},"M-46.275 5.818Q-46.599 5.818-46.844 5.661Q-47.088 5.504-47.220 5.239Q-47.351 4.974-47.351 4.649Q-47.351 4.181-47.098 3.718Q-46.846 3.255-46.422 2.959Q-45.998 2.664-45.526 2.664Q-45.311 2.664-45.125 2.768Q-44.938 2.872-44.819 3.057Q-44.795 2.944-44.701 2.870Q-44.607 2.797-44.491 2.797Q-44.388 2.797-44.320 2.858Q-44.251 2.920-44.251 3.019Q-44.251 3.077-44.258 3.104L-44.740 5.022Q-44.767 5.179-44.767 5.268Q-44.767 5.395-44.716 5.495Q-44.665 5.596-44.545 5.596Q-44.323 5.596-44.210 5.343Q-44.098 5.090-44.012 4.721Q-43.988 4.660-43.937 4.660L-43.824 4.660Q-43.790 4.660-43.768 4.689Q-43.745 4.718-43.745 4.742Q-43.745 4.755-43.752 4.769Q-44.015 5.818-44.559 5.818Q-44.808 5.818-45.017 5.695Q-45.225 5.572-45.294 5.343Q-45.769 5.818-46.275 5.818M-46.261 5.596Q-45.988 5.596-45.736 5.412Q-45.485 5.227-45.294 4.960L-44.925 3.480Q-44.962 3.320-45.043 3.183Q-45.123 3.046-45.249 2.966Q-45.376 2.886-45.540 2.886Q-45.748 2.886-45.935 3.010Q-46.121 3.135-46.259 3.327Q-46.398 3.518-46.483 3.720Q-46.596 4.014-46.680 4.359Q-46.764 4.704-46.764 4.954Q-46.764 5.210-46.635 5.403Q-46.507 5.596-46.261 5.596",[605],[594,5223],{"fill":596,"d":5224},"M-3.663-34.083c0-5.5-4.459-9.959-9.958-9.959s-9.959 4.459-9.959 9.959 4.459 9.958 9.959 9.958 9.958-4.458 9.958-9.958Zm-9.958 0",[589,5226,5228],{"transform":5227},"translate(32.385 -37.403)",[594,5229],{"d":5230,"fill":591,"stroke":591,"className":5231,"style":2077},"M-46.275 5.818Q-46.593 5.818-46.825 5.663Q-47.057 5.507-47.184 5.244Q-47.310 4.981-47.310 4.667Q-47.310 4.448-47.252 4.232L-46.596 1.583Q-46.548 1.409-46.548 1.341Q-46.548 1.249-46.982 1.249Q-47.064 1.221-47.064 1.136L-47.037 1.026Q-47.030 0.985-46.958 0.968L-45.981 0.893Q-45.943 0.893-45.909 0.920Q-45.875 0.948-45.875 0.996L-46.377 3.026Q-45.967 2.664-45.526 2.664Q-45.205 2.664-44.959 2.819Q-44.713 2.975-44.583 3.241Q-44.453 3.508-44.453 3.833Q-44.453 4.185-44.598 4.537Q-44.744 4.889-44.995 5.177Q-45.246 5.466-45.581 5.642Q-45.916 5.818-46.275 5.818M-46.261 5.596Q-46.053 5.596-45.863 5.470Q-45.673 5.343-45.536 5.154Q-45.400 4.964-45.314 4.762Q-45.208 4.499-45.125 4.132Q-45.041 3.764-45.041 3.532Q-45.041 3.378-45.092 3.226Q-45.143 3.074-45.256 2.980Q-45.369 2.886-45.540 2.886Q-45.817 2.886-46.063 3.067Q-46.309 3.248-46.504 3.525L-46.695 4.267Q-46.791 4.684-46.791 4.909Q-46.791 5.186-46.658 5.391Q-46.524 5.596-46.261 5.596",[605],[594,5233],{"fill":596,"d":5234},"M36.171-34.083c0-5.5-4.458-9.959-9.958-9.959s-9.959 4.459-9.959 9.959 4.459 9.958 9.959 9.958 9.958-4.458 9.958-9.958Zm-9.958 0",[589,5236,5238],{"transform":5237},"translate(72.19 -38.327)",[594,5239],{"d":5240,"fill":591,"stroke":591,"className":5241,"style":2077},"M-46.736 4.848Q-46.736 5.172-46.548 5.384Q-46.360 5.596-46.042 5.596Q-45.591 5.596-45.181 5.430Q-44.771 5.265-44.504 4.930Q-44.487 4.902-44.439 4.902Q-44.391 4.902-44.345 4.952Q-44.299 5.001-44.299 5.049Q-44.299 5.080-44.320 5.107Q-44.610 5.473-45.072 5.646Q-45.533 5.818-46.056 5.818Q-46.408 5.818-46.705 5.665Q-47.003 5.511-47.174 5.230Q-47.345 4.950-47.345 4.595Q-47.345 4.219-47.172 3.867Q-46.999 3.515-46.699 3.241Q-46.398 2.968-46.041 2.816Q-45.683 2.664-45.307 2.664Q-45.106 2.664-44.890 2.723Q-44.675 2.783-44.533 2.918Q-44.391 3.053-44.391 3.265Q-44.391 3.453-44.506 3.593Q-44.620 3.733-44.812 3.733Q-44.928 3.733-45.010 3.660Q-45.092 3.586-45.092 3.467Q-45.092 3.320-44.993 3.207Q-44.894 3.094-44.747 3.063Q-44.935 2.886-45.321 2.886Q-45.656 2.886-45.921 3.072Q-46.186 3.258-46.367 3.556Q-46.548 3.853-46.642 4.200Q-46.736 4.547-46.736 4.848",[605],[594,5243],{"fill":596,"d":5244},"M70.314-34.083c0-5.5-4.458-9.959-9.958-9.959s-9.959 4.459-9.959 9.959 4.459 9.958 9.959 9.958 9.958-4.458 9.958-9.958Zm-9.958 0",[589,5246,5248],{"transform":5247},"translate(106.04 -37.403)",[594,5249],{"d":5250,"fill":591,"stroke":591,"className":5251,"style":2077},"M-46.275 5.818Q-46.599 5.818-46.844 5.661Q-47.088 5.504-47.220 5.239Q-47.351 4.974-47.351 4.649Q-47.351 4.181-47.098 3.718Q-46.846 3.255-46.422 2.959Q-45.998 2.664-45.526 2.664Q-45.311 2.664-45.125 2.768Q-44.938 2.872-44.819 3.057L-44.439 1.529Q-44.405 1.426-44.405 1.341Q-44.405 1.249-44.839 1.249Q-44.925 1.221-44.925 1.136L-44.894 1.026Q-44.867 0.979-44.819 0.968L-43.838 0.893Q-43.800 0.893-43.766 0.920Q-43.732 0.948-43.732 0.996L-44.740 5.022Q-44.767 5.179-44.767 5.268Q-44.767 5.395-44.716 5.495Q-44.665 5.596-44.545 5.596Q-44.323 5.596-44.210 5.343Q-44.098 5.090-44.012 4.721Q-43.988 4.660-43.937 4.660L-43.824 4.660Q-43.790 4.660-43.768 4.689Q-43.745 4.718-43.745 4.742Q-43.745 4.755-43.752 4.769Q-44.015 5.818-44.559 5.818Q-44.808 5.818-45.017 5.695Q-45.225 5.572-45.294 5.343Q-45.769 5.818-46.275 5.818M-46.261 5.596Q-45.988 5.596-45.736 5.412Q-45.485 5.227-45.294 4.960L-44.925 3.480Q-44.962 3.320-45.043 3.183Q-45.123 3.046-45.249 2.966Q-45.376 2.886-45.540 2.886Q-45.748 2.886-45.935 3.010Q-46.121 3.135-46.259 3.327Q-46.398 3.518-46.483 3.720Q-46.596 4.014-46.680 4.359Q-46.764 4.704-46.764 4.954Q-46.764 5.210-46.635 5.403Q-46.507 5.596-46.261 5.596",[605],[594,5253],{"fill":596,"d":5254},"M112.993-34.083c0-5.5-4.458-9.959-9.958-9.959s-9.959 4.459-9.959 9.959 4.459 9.958 9.959 9.958 9.958-4.458 9.958-9.958Zm-9.958 0",[589,5256,5258],{"transform":5257},"translate(148.903 -38.327)",[594,5259],{"d":5260,"fill":591,"stroke":591,"className":5261,"style":2077},"M-46.716 4.783Q-46.716 5.118-46.543 5.357Q-46.370 5.596-46.042 5.596Q-45.591 5.596-45.181 5.430Q-44.771 5.265-44.504 4.930Q-44.487 4.902-44.439 4.902Q-44.391 4.902-44.345 4.952Q-44.299 5.001-44.299 5.049Q-44.299 5.080-44.320 5.107Q-44.610 5.473-45.072 5.646Q-45.533 5.818-46.056 5.818Q-46.418 5.818-46.707 5.644Q-46.996 5.470-47.153 5.171Q-47.310 4.872-47.310 4.502Q-47.310 4.113-47.146 3.774Q-46.982 3.436-46.695 3.187Q-46.408 2.937-46.047 2.800Q-45.687 2.664-45.307 2.664Q-45.099 2.664-44.902 2.729Q-44.706 2.793-44.573 2.932Q-44.439 3.070-44.439 3.279Q-44.439 3.593-44.668 3.780Q-44.897 3.966-45.249 4.048Q-45.601 4.130-45.916 4.149Q-46.230 4.167-46.603 4.167L-46.623 4.167Q-46.716 4.537-46.716 4.783M-46.569 3.945Q-46.278 3.945-46.010 3.932Q-45.742 3.918-45.451 3.856Q-45.161 3.795-44.964 3.655Q-44.767 3.515-44.767 3.286Q-44.767 3.094-44.942 2.990Q-45.116 2.886-45.328 2.886Q-45.786 2.886-46.106 3.181Q-46.425 3.477-46.569 3.945",[605],[594,5263],{"fill":596,"d":5264},"M-38.558-38.376c5.56-2.593 10.17-2.593 12.943-1.3",[594,5266],{"d":5267,"style":5268},"m-23.344-38.617-2.678-2.74.497 1.723-1.639.726Z","stroke-width:.399996",[594,5270],{"fill":596,"d":5271},"M-22.828-29.79c-5.56 2.592-10.17 2.592-12.943 1.3",[594,5273],{"d":5274,"style":5268},"m-38.042-29.55 2.678 2.74-.498-1.723 1.64-.726Z",[594,5276],{"fill":596,"d":5277},"M35.42-38.376c5.559-2.593 10.17-2.593 12.942-1.3",[594,5279],{"d":5280,"style":5268},"m50.633-38.617-2.678-2.74.498 1.723-1.64.726Z",[594,5282],{"fill":596,"d":5283},"M51.15-29.79c-5.56 2.592-10.171 2.592-12.944 1.3",[594,5285],{"d":5286,"style":5268},"m35.935-29.55 2.678 2.74-.497-1.723 1.639-.726Z",[589,5288,5290,5293],{"fill":2066,"stroke":2066,"style":5289},"stroke-width:.8",[594,5291],{"fill":596,"d":5292},"M-3.463-34.083h15.391",[594,5294],{"d":5295},"m14.915-34.083-4.169-1.577 1.382 1.577-1.382 1.576Z",[589,5297,5298,5301],{"fill":2066,"stroke":2066,"style":5289},[594,5299],{"fill":596,"d":5300},"M70.514-34.083h18.237",[594,5302],{"d":5303},"m91.737-34.083-4.169-1.577 1.383 1.577-1.383 1.576Z",[589,5305,5306,5313,5319],{"stroke":596,"fontSize":2069},[589,5307,5309],{"transform":5308},"translate(-9.398 -19.59)",[594,5310],{"d":5311,"fill":591,"stroke":591,"className":5312,"style":2077},"M-47.252 6.673Q-47.252 6.495-47.134 6.360Q-47.016 6.225-46.835 6.225Q-46.719 6.225-46.637 6.299Q-46.555 6.372-46.555 6.492Q-46.555 6.625-46.632 6.731Q-46.709 6.837-46.842 6.885Q-46.709 6.953-46.548 6.953Q-46.309 6.953-46.200 6.640Q-46.090 6.328-46.008 5.883Q-45.977 5.733-45.907 5.364Q-45.837 4.995-45.783 4.701L-45.482 3.012L-46.148 3.012Q-46.230 2.985-46.230 2.899L-46.203 2.790Q-46.196 2.749-46.128 2.732L-45.434 2.732L-45.348 2.277Q-45.294 1.970-45.266 1.835Q-45.239 1.700-45.174 1.527Q-45.109 1.354-45.007 1.221Q-44.877 1.043-44.675 0.932Q-44.473 0.821-44.258 0.821Q-43.988 0.821-43.766 0.946Q-43.544 1.071-43.544 1.327Q-43.544 1.505-43.665 1.640Q-43.786 1.775-43.957 1.775Q-44.074 1.775-44.159 1.701Q-44.244 1.628-44.244 1.508Q-44.244 1.378-44.164 1.267Q-44.084 1.156-43.957 1.115Q-44.098 1.047-44.265 1.047Q-44.402 1.047-44.482 1.143Q-44.562 1.238-44.595 1.361Q-44.627 1.484-44.658 1.642Q-44.668 1.693-44.721 1.971Q-44.774 2.250-44.778 2.264L-44.860 2.732L-44.063 2.732Q-43.978 2.756-43.978 2.838L-44.005 2.951Q-44.012 2.995-44.084 3.012L-44.908 3.012L-45.208 4.687Q-45.314 5.271-45.393 5.624Q-45.472 5.976-45.608 6.311Q-45.738 6.642-45.993 6.910Q-46.247 7.179-46.555 7.179Q-46.825 7.179-47.039 7.049Q-47.252 6.919-47.252 6.673",[605],[589,5314,5315],{"transform":5308},[594,5316],{"d":5317,"fill":591,"stroke":591,"className":5318,"style":2077},"M-37.599 4.943L-42.432 4.943Q-42.500 4.933-42.546 4.887Q-42.592 4.841-42.592 4.769Q-42.592 4.704-42.546 4.658Q-42.500 4.612-42.432 4.602L-37.599 4.602Q-37.530 4.612-37.484 4.658Q-37.438 4.704-37.438 4.769Q-37.438 4.841-37.484 4.887Q-37.530 4.933-37.599 4.943M-37.599 3.405L-42.432 3.405Q-42.500 3.395-42.546 3.349Q-42.592 3.303-42.592 3.231Q-42.592 3.087-42.432 3.063L-37.599 3.063Q-37.438 3.087-37.438 3.231Q-37.438 3.303-37.484 3.349Q-37.530 3.395-37.599 3.405",[605],[589,5320,5321],{"transform":5308},[594,5322],{"d":5323,"fill":591,"stroke":591,"className":5324,"style":2077},"M-33.616 5.750L-36.146 5.750L-36.146 5.470Q-35.178 5.470-35.178 5.261L-35.178 1.642Q-35.571 1.830-36.193 1.830L-36.193 1.549Q-35.776 1.549-35.412 1.448Q-35.048 1.348-34.792 1.102L-34.666 1.102Q-34.601 1.119-34.584 1.187L-34.584 5.261Q-34.584 5.470-33.616 5.470L-33.616 5.750M-29.634 5.750L-32.519 5.750L-32.519 5.548Q-32.519 5.518-32.492 5.490L-31.244 4.273Q-31.172 4.198-31.130 4.156Q-31.087 4.113-31.008 4.034Q-30.595 3.621-30.364 3.263Q-30.133 2.906-30.133 2.482Q-30.133 2.250-30.212 2.047Q-30.291 1.843-30.432 1.693Q-30.574 1.542-30.769 1.462Q-30.964 1.382-31.196 1.382Q-31.507 1.382-31.765 1.541Q-32.024 1.700-32.153 1.977L-32.133 1.977Q-31.965 1.977-31.858 2.088Q-31.750 2.199-31.750 2.363Q-31.750 2.520-31.859 2.633Q-31.969 2.746-32.133 2.746Q-32.294 2.746-32.406 2.633Q-32.519 2.520-32.519 2.363Q-32.519 1.987-32.311 1.700Q-32.102 1.413-31.767 1.257Q-31.432 1.102-31.077 1.102Q-30.653 1.102-30.274 1.260Q-29.894 1.419-29.660 1.736Q-29.426 2.052-29.426 2.482Q-29.426 2.793-29.566 3.062Q-29.706 3.330-29.911 3.535Q-30.116 3.740-30.479 4.022Q-30.841 4.304-30.950 4.400L-31.805 5.128L-31.162 5.128Q-30.899 5.128-30.610 5.126Q-30.321 5.125-30.103 5.116Q-29.884 5.107-29.867 5.090Q-29.805 5.025-29.768 4.858Q-29.730 4.690-29.692 4.448L-29.426 4.448",[605],[589,5326,5328],{"transform":5327},"translate(30.157 -19.084)",[594,5329],{"d":5330,"fill":591,"stroke":591,"className":5331,"style":2077},"M-44.439 5.750L-46.969 5.750L-46.969 5.470Q-46.001 5.470-46.001 5.261L-46.001 1.642Q-46.394 1.830-47.016 1.830L-47.016 1.549Q-46.599 1.549-46.235 1.448Q-45.871 1.348-45.615 1.102L-45.489 1.102Q-45.424 1.119-45.407 1.187L-45.407 5.261Q-45.407 5.470-44.439 5.470L-44.439 5.750M-40.457 5.750L-42.987 5.750L-42.987 5.470Q-42.019 5.470-42.019 5.261L-42.019 1.642Q-42.412 1.830-43.035 1.830L-43.035 1.549Q-42.618 1.549-42.254 1.448Q-41.890 1.348-41.633 1.102L-41.507 1.102Q-41.442 1.119-41.425 1.187L-41.425 5.261Q-41.425 5.470-40.457 5.470",[605],[589,5333,5335],{"transform":5334},"translate(71.984 -19.084)",[594,5336],{"d":5337,"fill":591,"stroke":591,"className":5338,"style":2077},"M-47.386 4.673Q-47.386 4.232-47.083 3.911Q-46.781 3.590-46.329 3.398L-46.569 3.258Q-46.839 3.098-47.005 2.840Q-47.170 2.582-47.170 2.284Q-47.170 1.932-46.965 1.660Q-46.760 1.389-46.439 1.245Q-46.118 1.102-45.776 1.102Q-45.454 1.102-45.131 1.218Q-44.808 1.334-44.597 1.575Q-44.385 1.816-44.385 2.151Q-44.385 2.513-44.629 2.776Q-44.873 3.040-45.253 3.217L-44.853 3.453Q-44.658 3.566-44.499 3.735Q-44.340 3.904-44.253 4.113Q-44.166 4.321-44.166 4.554Q-44.166 4.957-44.400 5.261Q-44.634 5.565-45.008 5.728Q-45.383 5.890-45.776 5.890Q-46.162 5.890-46.531 5.753Q-46.900 5.617-47.143 5.340Q-47.386 5.063-47.386 4.673M-46.938 4.673Q-46.938 4.960-46.769 5.183Q-46.599 5.405-46.331 5.521Q-46.063 5.637-45.776 5.637Q-45.338 5.637-44.976 5.420Q-44.614 5.203-44.614 4.796Q-44.614 4.595-44.742 4.417Q-44.870 4.239-45.048 4.140L-46.070 3.545Q-46.309 3.655-46.507 3.821Q-46.705 3.986-46.822 4.202Q-46.938 4.417-46.938 4.673M-46.415 2.544L-45.495 3.077Q-45.188 2.917-44.986 2.684Q-44.785 2.452-44.785 2.151Q-44.785 1.912-44.930 1.722Q-45.075 1.532-45.307 1.433Q-45.540 1.334-45.776 1.334Q-45.998 1.334-46.227 1.404Q-46.456 1.474-46.613 1.631Q-46.770 1.789-46.770 2.018Q-46.770 2.332-46.415 2.544",[605],[589,5340,5342],{"transform":5341},"translate(106.127 -19.084)",[594,5343],{"d":5344,"fill":591,"stroke":591,"className":5345,"style":2077},"M-46.791 5.436Q-46.671 5.552-46.494 5.594Q-46.316 5.637-46.100 5.637Q-45.861 5.637-45.651 5.528Q-45.441 5.418-45.287 5.236Q-45.133 5.053-45.034 4.820Q-44.867 4.393-44.867 3.573Q-45.017 3.867-45.280 4.046Q-45.543 4.226-45.861 4.226Q-46.295 4.226-46.642 4.017Q-46.989 3.809-47.187 3.448Q-47.386 3.087-47.386 2.664Q-47.386 2.329-47.256 2.040Q-47.126 1.751-46.895 1.537Q-46.664 1.324-46.365 1.213Q-46.066 1.102-45.735 1.102Q-44.877 1.102-44.521 1.816Q-44.166 2.530-44.166 3.487Q-44.166 3.904-44.294 4.332Q-44.422 4.759-44.679 5.114Q-44.935 5.470-45.297 5.680Q-45.660 5.890-46.100 5.890Q-46.555 5.890-46.873 5.702Q-47.191 5.514-47.191 5.090Q-47.191 4.940-47.092 4.841Q-46.993 4.742-46.842 4.742Q-46.774 4.742-46.707 4.769Q-46.640 4.796-46.596 4.841Q-46.552 4.885-46.524 4.952Q-46.497 5.019-46.497 5.090Q-46.497 5.220-46.577 5.318Q-46.658 5.415-46.791 5.436M-45.820 4Q-45.526 4-45.311 3.822Q-45.096 3.645-44.988 3.369Q-44.880 3.094-44.880 2.804Q-44.880 2.759-44.882 2.732Q-44.884 2.705-44.887 2.670Q-44.884 2.660-44.882 2.653Q-44.880 2.646-44.880 2.636Q-44.880 2.134-45.078 1.734Q-45.277 1.334-45.735 1.334Q-46.302 1.334-46.495 1.693Q-46.688 2.052-46.688 2.664Q-46.688 3.050-46.634 3.333Q-46.579 3.617-46.384 3.809Q-46.189 4-45.820 4",[605],[589,5347,5349],{"transform":5348},"translate(148.807 -19.084)",[594,5350],{"d":5351,"fill":591,"stroke":591,"className":5352,"style":2077},"M-46.958 4.988L-46.989 4.988Q-46.852 5.285-46.555 5.461Q-46.258 5.637-45.930 5.637Q-45.567 5.637-45.340 5.459Q-45.113 5.282-45.019 4.993Q-44.925 4.704-44.925 4.342Q-44.925 4.027-44.979 3.742Q-45.034 3.457-45.207 3.251Q-45.379 3.046-45.694 3.046Q-45.967 3.046-46.150 3.113Q-46.333 3.180-46.437 3.269Q-46.541 3.357-46.637 3.467Q-46.733 3.576-46.777 3.586L-46.856 3.586Q-46.928 3.569-46.945 3.498L-46.945 1.180Q-46.945 1.146-46.921 1.124Q-46.897 1.102-46.863 1.102L-46.835 1.102Q-46.548 1.218-46.280 1.272Q-46.012 1.327-45.735 1.327Q-45.458 1.327-45.188 1.272Q-44.918 1.218-44.638 1.102L-44.614 1.102Q-44.579 1.102-44.556 1.125Q-44.532 1.149-44.532 1.180L-44.532 1.249Q-44.532 1.276-44.552 1.296Q-44.826 1.611-45.210 1.787Q-45.595 1.963-46.008 1.963Q-46.347 1.963-46.664 1.877L-46.664 3.159Q-46.268 2.824-45.694 2.824Q-45.290 2.824-44.954 3.034Q-44.617 3.245-44.424 3.597Q-44.231 3.949-44.231 4.349Q-44.231 4.680-44.371 4.966Q-44.511 5.251-44.755 5.461Q-45 5.671-45.302 5.781Q-45.605 5.890-45.923 5.890Q-46.282 5.890-46.608 5.726Q-46.934 5.562-47.129 5.270Q-47.324 4.978-47.324 4.615Q-47.324 4.465-47.218 4.359Q-47.112 4.253-46.958 4.253Q-46.805 4.253-46.700 4.357Q-46.596 4.461-46.596 4.615Q-46.596 4.772-46.700 4.880Q-46.805 4.988-46.958 4.988",[605],[589,5354,5356,5363,5369,5375,5381,5387,5393],{"stroke":596,"fontFamily":5355,"fontSize":2176},"cmbx8",[589,5357,5359],{"transform":5358},"translate(11.052 31.23)",[594,5360],{"d":5361,"fill":591,"stroke":591,"className":5362,"style":2184},"M-47.437 3.973Q-47.437 3.527-47.271 3.178Q-47.105 2.828-46.808 2.588Q-46.511 2.348-46.132 2.229Q-45.753 2.109-45.316 2.109Q-44.722 2.109-44.263 2.275Q-43.804 2.441-43.804 2.926Q-43.804 3.160-43.962 3.318Q-44.120 3.477-44.359 3.477Q-44.593 3.477-44.755 3.314Q-44.917 3.152-44.917 2.926Q-44.917 2.691-44.781 2.551Q-45.003 2.520-45.316 2.520Q-45.726 2.520-45.947 2.723Q-46.167 2.926-46.245 3.244Q-46.324 3.563-46.324 3.965Q-46.324 4.621-46.044 5.010Q-45.765 5.398-45.124 5.398Q-44.402 5.398-44.156 4.766Q-44.124 4.688-44.046 4.688L-43.820 4.688Q-43.695 4.715-43.695 4.820L-43.695 4.863Q-43.824 5.199-44.064 5.408Q-44.304 5.617-44.626 5.711Q-44.949 5.805-45.316 5.805Q-45.894 5.805-46.376 5.596Q-46.859 5.387-47.148 4.973Q-47.437 4.559-47.437 3.973M-43.140 4.016Q-43.140 3.551-42.970 3.191Q-42.800 2.832-42.497 2.590Q-42.195 2.348-41.802 2.229Q-41.410 2.109-40.964 2.109Q-40.519 2.109-40.128 2.227Q-39.738 2.344-39.431 2.588Q-39.124 2.832-38.956 3.191Q-38.788 3.551-38.788 4.016Q-38.788 4.465-38.966 4.803Q-39.144 5.141-39.456 5.365Q-39.769 5.590-40.154 5.697Q-40.538 5.805-40.964 5.805Q-41.386 5.805-41.775 5.697Q-42.163 5.590-42.474 5.365Q-42.785 5.141-42.962 4.801Q-43.140 4.461-43.140 4.016M-40.964 5.398Q-40.484 5.398-40.251 5.207Q-40.019 5.016-39.960 4.713Q-39.902 4.410-39.902 3.902Q-39.902 3.172-40.095 2.824Q-40.288 2.477-40.964 2.477Q-41.320 2.477-41.536 2.580Q-41.753 2.684-41.859 2.871Q-41.964 3.059-41.997 3.299Q-42.031 3.539-42.031 3.902Q-42.031 4.410-41.970 4.715Q-41.910 5.020-41.675 5.209Q-41.441 5.398-40.964 5.398M-36.023 5.750L-38.085 5.750L-38.085 5.301L-37.558 5.301L-37.558 2.879Q-37.558 2.727-37.704 2.689Q-37.851 2.652-38.085 2.652L-38.085 2.207L-36.656 2.141L-36.656 2.934Q-36.507 2.688-36.273 2.508Q-36.038 2.328-35.761 2.234Q-35.484 2.141-35.191 2.141Q-34.749 2.141-34.453 2.248Q-34.156 2.355-33.994 2.615Q-33.831 2.875-33.831 3.309L-33.831 5.301L-33.304 5.301L-33.304 5.750L-35.367 5.750L-35.367 5.301L-34.839 5.301L-34.839 3.336Q-34.839 2.961-34.917 2.736Q-34.995 2.512-35.288 2.512Q-35.800 2.512-36.175 2.846Q-36.550 3.180-36.550 3.688L-36.550 5.301L-36.023 5.301L-36.023 5.750M-32.749 3.973Q-32.749 3.527-32.579 3.182Q-32.410 2.836-32.109 2.605Q-31.808 2.375-31.419 2.258Q-31.031 2.141-30.613 2.141Q-30.304 2.141-30.013 2.227Q-29.722 2.313-29.476 2.477L-29.476 0.934Q-29.476 0.785-29.622 0.748Q-29.769 0.711-30.007 0.711L-30.007 0.262L-28.519 0.199L-28.519 5.078Q-28.519 5.227-28.372 5.264Q-28.226 5.301-27.988 5.301L-27.988 5.750L-29.527 5.805L-29.527 5.430Q-30.042 5.805-30.718 5.805Q-31.128 5.805-31.495 5.686Q-31.863 5.566-32.148 5.330Q-32.433 5.094-32.591 4.748Q-32.749 4.402-32.749 3.973M-30.628 5.438Q-30.304 5.438-30.007 5.279Q-29.710 5.121-29.527 4.848L-29.527 2.980Q-29.699 2.758-29.966 2.635Q-30.234 2.512-30.519 2.512Q-30.972 2.512-31.220 2.701Q-31.468 2.891-31.552 3.203Q-31.636 3.516-31.636 3.973Q-31.636 4.422-31.570 4.729Q-31.503 5.035-31.281 5.236Q-31.058 5.438-30.628 5.438M-27.363 3.949Q-27.363 3.371-27.079 2.951Q-26.796 2.531-26.312 2.320Q-25.828 2.109-25.261 2.109Q-24.820 2.109-24.484 2.221Q-24.148 2.332-23.913 2.553Q-23.679 2.773-23.554 3.104Q-23.429 3.434-23.429 3.871Q-23.429 4.027-23.581 4.055L-26.253 4.055Q-26.253 5.398-24.995 5.398Q-24.644 5.398-24.337 5.242Q-24.031 5.086-23.910 4.789Q-23.835 4.660-23.749 4.660L-23.581 4.660Q-23.429 4.695-23.429 4.828Q-23.429 4.863-23.437 4.879Q-23.620 5.355-24.085 5.580Q-24.550 5.805-25.124 5.805Q-25.722 5.805-26.232 5.602Q-26.742 5.398-27.052 4.977Q-27.363 4.555-27.363 3.949M-26.253 3.711L-24.245 3.711Q-24.245 3.172-24.494 2.824Q-24.742 2.477-25.261 2.477Q-25.605 2.477-25.829 2.643Q-26.054 2.809-26.154 3.086Q-26.253 3.363-26.253 3.711M-20.652 5.750L-22.714 5.750L-22.714 5.301L-22.187 5.301L-22.187 2.879Q-22.187 2.727-22.333 2.689Q-22.480 2.652-22.714 2.652L-22.714 2.207L-21.285 2.141L-21.285 2.934Q-21.136 2.688-20.902 2.508Q-20.667 2.328-20.390 2.234Q-20.113 2.141-19.820 2.141Q-19.378 2.141-19.081 2.248Q-18.785 2.355-18.622 2.615Q-18.460 2.875-18.460 3.309L-18.460 5.301L-17.933 5.301L-17.933 5.750L-19.995 5.750L-19.995 5.301L-19.468 5.301L-19.468 3.336Q-19.468 2.961-19.546 2.736Q-19.624 2.512-19.917 2.512Q-20.429 2.512-20.804 2.846Q-21.179 3.180-21.179 3.688L-21.179 5.301L-20.652 5.301L-20.652 5.750M-17.140 5.805L-17.249 5.805Q-17.378 5.773-17.378 5.672L-17.378 4.629Q-17.378 4.586-17.341 4.545Q-17.304 4.504-17.249 4.504L-17.027 4.504Q-16.925 4.531-16.898 4.605Q-16.781 5.020-16.495 5.229Q-16.210 5.438-15.777 5.438Q-15.390 5.438-15.109 5.328Q-14.828 5.219-14.828 4.887Q-14.828 4.652-15.031 4.529Q-15.234 4.406-15.523 4.352L-16.148 4.254Q-16.367 4.211-16.583 4.129Q-16.800 4.047-16.984 3.918Q-17.167 3.789-17.273 3.611Q-17.378 3.434-17.378 3.199Q-17.378 2.777-17.144 2.535Q-16.910 2.293-16.554 2.201Q-16.199 2.109-15.777 2.109Q-15.269 2.109-14.964 2.246L-14.691 2.117Q-14.683 2.113-14.673 2.111Q-14.663 2.109-14.652 2.109L-14.546 2.109Q-14.417 2.141-14.417 2.238L-14.417 3.047Q-14.417 3.098-14.460 3.141Q-14.503 3.184-14.546 3.184L-14.769 3.184Q-14.898 3.145-14.898 3.047Q-14.898 2.816-15.027 2.680Q-15.156 2.543-15.353 2.490Q-15.550 2.438-15.785 2.438Q-16.730 2.438-16.730 2.895Q-16.730 3.211-16.081 3.324L-15.449 3.430Q-14.933 3.523-14.556 3.820Q-14.179 4.117-14.179 4.605Q-14.179 5.262-14.630 5.533Q-15.081 5.805-15.777 5.805Q-16.335 5.805-16.722 5.574L-17.081 5.789Q-17.113 5.805-17.140 5.805M-13.570 4.820Q-13.570 4.449-13.275 4.197Q-12.980 3.945-12.529 3.814Q-12.078 3.684-11.642 3.637Q-11.206 3.590-10.820 3.590L-10.820 3.336Q-10.820 2.938-11.050 2.707Q-11.281 2.477-11.675 2.477Q-12.101 2.477-12.308 2.527Q-12.148 2.672-12.148 2.926Q-12.148 3.160-12.306 3.318Q-12.464 3.477-12.699 3.477Q-12.941 3.477-13.099 3.318Q-13.257 3.160-13.257 2.926Q-13.257 2.414-12.792 2.262Q-12.328 2.109-11.675 2.109Q-11.253 2.109-10.824 2.225Q-10.394 2.340-10.103 2.611Q-9.812 2.883-9.812 3.316L-9.812 5.176Q-9.781 5.301-9.242 5.301Q-9.183 5.301-9.136 5.348Q-9.089 5.395-9.089 5.453L-9.089 5.590Q-9.089 5.656-9.136 5.703Q-9.183 5.750-9.242 5.750L-9.788 5.750Q-10.667 5.750-10.667 5.246Q-10.855 5.523-11.201 5.664Q-11.546 5.805-11.913 5.805Q-12.288 5.805-12.669 5.721Q-13.050 5.637-13.310 5.414Q-13.570 5.191-13.570 4.820M-12.562 4.820Q-12.562 5.008-12.451 5.148Q-12.339 5.289-12.163 5.363Q-11.988 5.438-11.804 5.438Q-11.574 5.438-11.345 5.357Q-11.117 5.277-10.968 5.117Q-10.820 4.957-10.820 4.719L-10.820 3.926Q-11.156 3.926-11.558 4.010Q-11.960 4.094-12.261 4.295Q-12.562 4.496-12.562 4.820M-8.226 4.828L-8.226 2.645L-8.898 2.645L-8.898 2.277Q-8.511 2.277-8.238 2.031Q-7.964 1.785-7.831 1.410Q-7.699 1.035-7.699 0.672L-7.218 0.672L-7.218 2.199L-5.984 2.199L-5.984 2.645L-7.218 2.645L-7.218 4.813Q-7.218 5.398-6.761 5.398Q-6.550 5.398-6.427 5.215Q-6.304 5.031-6.304 4.813L-6.304 4.359L-5.824 4.359L-5.824 4.828Q-5.824 5.102-5.970 5.324Q-6.117 5.547-6.357 5.676Q-6.597 5.805-6.867 5.805Q-7.441 5.805-7.833 5.582Q-8.226 5.359-8.226 4.828M-2.859 5.750L-4.816 5.750L-4.816 5.301L-4.288 5.301L-4.288 2.879Q-4.288 2.727-4.425 2.689Q-4.562 2.652-4.792 2.652L-4.792 2.207L-3.328 2.141L-3.328 5.301L-2.859 5.301L-2.859 5.750M-4.570 0.848Q-4.570 0.570-4.376 0.381Q-4.183 0.191-3.913 0.191Q-3.734 0.191-3.583 0.281Q-3.433 0.371-3.345 0.518Q-3.257 0.664-3.257 0.848Q-3.257 1.117-3.451 1.311Q-3.644 1.504-3.913 1.504Q-4.187 1.504-4.378 1.313Q-4.570 1.121-4.570 0.848M-2.281 4.016Q-2.281 3.551-2.111 3.191Q-1.941 2.832-1.638 2.590Q-1.335 2.348-0.943 2.229Q-0.550 2.109-0.105 2.109Q0.340 2.109 0.731 2.227Q1.122 2.344 1.428 2.588Q1.735 2.832 1.903 3.191Q2.071 3.551 2.071 4.016Q2.071 4.465 1.893 4.803Q1.715 5.141 1.403 5.365Q1.090 5.590 0.706 5.697Q0.321 5.805-0.105 5.805Q-0.527 5.805-0.915 5.697Q-1.304 5.590-1.615 5.365Q-1.925 5.141-2.103 4.801Q-2.281 4.461-2.281 4.016M-0.105 5.398Q0.376 5.398 0.608 5.207Q0.840 5.016 0.899 4.713Q0.958 4.410 0.958 3.902Q0.958 3.172 0.764 2.824Q0.571 2.477-0.105 2.477Q-0.460 2.477-0.677 2.580Q-0.894 2.684-0.999 2.871Q-1.105 3.059-1.138 3.299Q-1.171 3.539-1.171 3.902Q-1.171 4.410-1.111 4.715Q-1.050 5.020-0.816 5.209Q-0.581 5.398-0.105 5.398M4.837 5.750L2.774 5.750L2.774 5.301L3.301 5.301L3.301 2.879Q3.301 2.727 3.155 2.689Q3.008 2.652 2.774 2.652L2.774 2.207L4.204 2.141L4.204 2.934Q4.352 2.688 4.587 2.508Q4.821 2.328 5.098 2.234Q5.376 2.141 5.669 2.141Q6.110 2.141 6.407 2.248Q6.704 2.355 6.866 2.615Q7.028 2.875 7.028 3.309L7.028 5.301L7.555 5.301L7.555 5.750L5.493 5.750L5.493 5.301L6.020 5.301L6.020 3.336Q6.020 2.961 5.942 2.736Q5.864 2.512 5.571 2.512Q5.059 2.512 4.684 2.846Q4.309 3.180 4.309 3.688L4.309 5.301L4.837 5.301",[605],[589,5364,5365],{"transform":5358},[594,5366],{"d":5367,"fill":591,"stroke":591,"className":5368,"style":2184},"M20.880 3.742L11.087 3.742L11.087 3.375L20.880 3.375",[605],[589,5370,5371],{"transform":5358},[594,5372],{"d":5373,"fill":591,"stroke":591,"className":5374,"style":2184},"M26.568 5.750L24.611 5.750L24.611 5.301L25.138 5.301L25.138 2.879Q25.138 2.727 25.002 2.689Q24.865 2.652 24.634 2.652L24.634 2.207L26.099 2.141L26.099 5.301L26.568 5.301L26.568 5.750M24.857 0.848Q24.857 0.570 25.050 0.381Q25.244 0.191 25.513 0.191Q25.693 0.191 25.843 0.281Q25.994 0.371 26.082 0.518Q26.170 0.664 26.170 0.848Q26.170 1.117 25.976 1.311Q25.783 1.504 25.513 1.504Q25.240 1.504 25.049 1.313Q24.857 1.121 24.857 0.848M27.728 4.828L27.728 2.645L27.056 2.645L27.056 2.277Q27.443 2.277 27.716 2.031Q27.990 1.785 28.123 1.410Q28.256 1.035 28.256 0.672L28.736 0.672L28.736 2.199L29.970 2.199L29.970 2.645L28.736 2.645L28.736 4.813Q28.736 5.398 29.193 5.398Q29.404 5.398 29.527 5.215Q29.650 5.031 29.650 4.813L29.650 4.359L30.131 4.359L30.131 4.828Q30.131 5.102 29.984 5.324Q29.838 5.547 29.597 5.676Q29.357 5.805 29.088 5.805Q28.513 5.805 28.121 5.582Q27.728 5.359 27.728 4.828M31.248 5.805L31.138 5.805Q31.009 5.773 31.009 5.672L31.009 4.629Q31.009 4.586 31.047 4.545Q31.084 4.504 31.138 4.504L31.361 4.504Q31.463 4.531 31.490 4.605Q31.607 5.020 31.892 5.229Q32.177 5.438 32.611 5.438Q32.998 5.438 33.279 5.328Q33.560 5.219 33.560 4.887Q33.560 4.652 33.357 4.529Q33.154 4.406 32.865 4.352L32.240 4.254Q32.021 4.211 31.804 4.129Q31.588 4.047 31.404 3.918Q31.220 3.789 31.115 3.611Q31.009 3.434 31.009 3.199Q31.009 2.777 31.244 2.535Q31.478 2.293 31.834 2.201Q32.189 2.109 32.611 2.109Q33.119 2.109 33.424 2.246L33.697 2.117Q33.705 2.113 33.715 2.111Q33.724 2.109 33.736 2.109L33.841 2.109Q33.970 2.141 33.970 2.238L33.970 3.047Q33.970 3.098 33.927 3.141Q33.884 3.184 33.841 3.184L33.619 3.184Q33.490 3.145 33.490 3.047Q33.490 2.816 33.361 2.680Q33.232 2.543 33.035 2.490Q32.838 2.438 32.603 2.438Q31.658 2.438 31.658 2.895Q31.658 3.211 32.306 3.324L32.939 3.430Q33.455 3.523 33.832 3.820Q34.209 4.117 34.209 4.605Q34.209 5.262 33.758 5.533Q33.306 5.805 32.611 5.805Q32.052 5.805 31.666 5.574L31.306 5.789Q31.275 5.805 31.248 5.805M34.818 3.949Q34.818 3.371 35.101 2.951Q35.384 2.531 35.869 2.320Q36.353 2.109 36.920 2.109Q37.361 2.109 37.697 2.221Q38.033 2.332 38.267 2.553Q38.502 2.773 38.627 3.104Q38.752 3.434 38.752 3.871Q38.752 4.027 38.599 4.055L35.927 4.055Q35.927 5.398 37.185 5.398Q37.537 5.398 37.843 5.242Q38.150 5.086 38.271 4.789Q38.345 4.660 38.431 4.660L38.599 4.660Q38.752 4.695 38.752 4.828Q38.752 4.863 38.744 4.879Q38.560 5.355 38.095 5.580Q37.631 5.805 37.056 5.805Q36.459 5.805 35.949 5.602Q35.439 5.398 35.129 4.977Q34.818 4.555 34.818 3.949M35.927 3.711L37.935 3.711Q37.935 3.172 37.687 2.824Q37.439 2.477 36.920 2.477Q36.576 2.477 36.351 2.643Q36.127 2.809 36.027 3.086Q35.927 3.363 35.927 3.711M41.506 5.750L39.490 5.750L39.490 5.301L40.017 5.301L40.017 0.934Q40.017 0.785 39.871 0.748Q39.724 0.711 39.490 0.711L39.490 0.262L40.978 0.199L40.978 5.301L41.506 5.301L41.506 5.750M44.353 5.750L42.209 5.750L42.209 5.301L42.736 5.301L42.736 2.645L42.119 2.645L42.119 2.199L42.736 2.199L42.736 1.375Q42.736 0.938 43.023 0.660Q43.310 0.383 43.734 0.262Q44.158 0.141 44.591 0.141Q44.818 0.141 45.031 0.229Q45.244 0.316 45.383 0.488Q45.521 0.660 45.521 0.895Q45.521 1.129 45.363 1.283Q45.205 1.438 44.974 1.438Q44.748 1.438 44.590 1.279Q44.431 1.121 44.431 0.895Q44.431 0.660 44.576 0.512L44.506 0.512Q44.107 0.512 43.877 0.754Q43.646 0.996 43.646 1.391L43.646 2.199L44.654 2.199L44.654 2.645L43.697 2.645L43.697 5.301L44.353 5.301",[605],[589,5376,5377],{"transform":5358},[594,5378],{"d":5379,"fill":591,"stroke":591,"className":5380,"style":2184},"M48.299 4.820Q48.299 4.449 48.594 4.197Q48.889 3.945 49.340 3.814Q49.792 3.684 50.227 3.637Q50.663 3.590 51.049 3.590L51.049 3.336Q51.049 2.938 50.819 2.707Q50.589 2.477 50.194 2.477Q49.768 2.477 49.561 2.527Q49.721 2.672 49.721 2.926Q49.721 3.160 49.563 3.318Q49.405 3.477 49.171 3.477Q48.928 3.477 48.770 3.318Q48.612 3.160 48.612 2.926Q48.612 2.414 49.077 2.262Q49.542 2.109 50.194 2.109Q50.616 2.109 51.046 2.225Q51.475 2.340 51.766 2.611Q52.057 2.883 52.057 3.316L52.057 5.176Q52.089 5.301 52.628 5.301Q52.686 5.301 52.733 5.348Q52.780 5.395 52.780 5.453L52.780 5.590Q52.780 5.656 52.733 5.703Q52.686 5.750 52.628 5.750L52.081 5.750Q51.202 5.750 51.202 5.246Q51.014 5.523 50.669 5.664Q50.323 5.805 49.956 5.805Q49.581 5.805 49.200 5.721Q48.819 5.637 48.559 5.414Q48.299 5.191 48.299 4.820M49.307 4.820Q49.307 5.008 49.419 5.148Q49.530 5.289 49.706 5.363Q49.881 5.438 50.065 5.438Q50.296 5.438 50.524 5.357Q50.753 5.277 50.901 5.117Q51.049 4.957 51.049 4.719L51.049 3.926Q50.714 3.926 50.311 4.010Q49.909 4.094 49.608 4.295Q49.307 4.496 49.307 4.820",[605],[589,5382,5383],{"transform":5358},[594,5384],{"d":5385,"fill":591,"stroke":591,"className":5386,"style":2184},"M60.017 5.750L56.431 5.750L56.431 5.301L57.294 5.301L57.294 0.711L56.431 0.711L56.431 0.262L60.017 0.262Q60.665 0.262 61.212 0.449Q61.759 0.637 62.160 0.996Q62.560 1.355 62.785 1.875Q63.009 2.395 63.009 3.055Q63.009 3.703 62.783 4.205Q62.556 4.707 62.142 5.055Q61.728 5.402 61.187 5.576Q60.646 5.750 60.017 5.750M58.470 0.711L58.470 5.301L59.689 5.301Q60.466 5.301 60.915 5.051Q61.365 4.801 61.554 4.314Q61.743 3.828 61.743 3.055Q61.743 2.441 61.667 2.031Q61.591 1.621 61.314 1.309Q61.036 0.996 60.609 0.854Q60.181 0.711 59.689 0.711",[605],[589,5388,5389],{"transform":5358},[594,5390],{"d":5391,"fill":591,"stroke":591,"className":5392,"style":2184},"M65.772 5.750L63.643 5.750L63.643 5.301Q64.421 5.301 64.460 5.246L66.589 0.309Q66.667 0.141 66.843 0.141L67.093 0.141Q67.268 0.141 67.346 0.309L69.499 5.301L70.292 5.301L70.292 5.750L67.491 5.750L67.491 5.301L68.221 5.301L67.764 4.254L65.499 4.254L65.069 5.254Q65.085 5.277 65.401 5.289Q65.718 5.301 65.772 5.301L65.772 5.750M66.636 1.621L65.690 3.805L67.573 3.805",[605],[589,5394,5395],{"transform":5358},[594,5396],{"d":5397,"fill":591,"stroke":591,"className":5398,"style":2184},"M70.933 3.008Q70.933 2.301 71.210 1.758Q71.488 1.215 71.972 0.855Q72.456 0.496 73.070 0.322Q73.683 0.148 74.367 0.148Q74.812 0.148 75.242 0.289Q75.671 0.430 76.015 0.695L76.613 0.176Q76.648 0.148 76.687 0.148L76.788 0.148Q76.917 0.180 76.917 0.277L76.917 2.246Q76.917 2.293 76.876 2.338Q76.835 2.383 76.788 2.383L76.488 2.383Q76.378 2.367 76.367 2.277Q76.320 1.934 76.169 1.629Q76.019 1.324 75.775 1.088Q75.531 0.852 75.218 0.725Q74.906 0.598 74.550 0.598Q73.937 0.598 73.501 0.756Q73.066 0.914 72.788 1.219Q72.511 1.523 72.378 1.967Q72.245 2.410 72.245 3.008Q72.245 3.613 72.390 4.059Q72.535 4.504 72.835 4.811Q73.136 5.117 73.585 5.266Q74.035 5.414 74.636 5.414Q74.870 5.414 75.111 5.361Q75.351 5.309 75.523 5.174Q75.695 5.039 75.695 4.813L75.695 3.988L74.468 3.988L74.468 3.543L77.597 3.543L77.597 3.988L76.917 3.988L76.917 5.613Q76.917 5.676 76.872 5.713Q76.828 5.750 76.781 5.750Q76.765 5.750 76.734 5.742Q76.609 5.691 76.486 5.641Q76.363 5.590 76.232 5.523Q76.101 5.457 76.023 5.398Q75.749 5.672 75.314 5.768Q74.878 5.863 74.367 5.863Q73.703 5.863 73.078 5.686Q72.453 5.508 71.970 5.152Q71.488 4.797 71.210 4.254Q70.933 3.711 70.933 3.008",[605],[589,5400,5401,5404],{"fill":2223},[594,5402],{"d":5403},"M-20.247 51.977h-20.891a4 4 0 0 0-4 4v7.666a4 4 0 0 0 4 4h20.89a4 4 0 0 0 4-4v-7.666a4 4 0 0 0-4-4Zm-24.891 15.666",[589,5405,5406,5413,5419,5425],{"fill":591,"stroke":596,"fontSize":4709},[589,5407,5409],{"transform":5408},"translate(5.96 56.31)",[594,5410],{"d":5411,"fill":591,"stroke":591,"className":5412,"style":606},"M-45.792 6.831L-45.792 4.643Q-45.792 4.177-46.172 3.902Q-46.552 3.627-47.036 3.627Q-47.062 3.627-47.095 3.603Q-47.128 3.579-47.128 3.544L-47.128 3.447Q-47.128 3.417-47.093 3.390Q-47.057 3.364-47.036 3.364Q-46.552 3.364-46.172 3.096Q-45.792 2.828-45.792 2.357L-45.792 0.169Q-45.792-0.249-45.500-0.512Q-45.207-0.776-44.781-0.888Q-44.355-1-43.959-1L-43.876-1Q-43.845-1-43.817-0.976Q-43.788-0.952-43.788-0.921L-43.788-0.820Q-43.788-0.798-43.821-0.769Q-43.854-0.741-43.876-0.741Q-44.350-0.741-44.735-0.490Q-45.119-0.240-45.119 0.204L-45.119 2.393Q-45.119 2.806-45.425 3.089Q-45.730 3.373-46.183 3.500Q-45.906 3.575-45.662 3.726Q-45.418 3.878-45.269 4.102Q-45.119 4.326-45.119 4.607L-45.119 6.796Q-45.119 7.099-44.935 7.312Q-44.750 7.525-44.467 7.633Q-44.183 7.741-43.876 7.741Q-43.845 7.741-43.817 7.765Q-43.788 7.789-43.788 7.820L-43.788 7.921Q-43.788 7.943-43.821 7.971Q-43.854 8-43.876 8L-43.959 8Q-44.355 8-44.781 7.888Q-45.207 7.776-45.500 7.512Q-45.792 7.249-45.792 6.831",[605],[589,5414,5415],{"transform":5408},[594,5416],{"d":5417,"fill":591,"stroke":591,"className":5418,"style":606},"M-41.518 5.851Q-41.914 5.851-42.200 5.647Q-42.485 5.442-42.632 5.108Q-42.780 4.774-42.780 4.383Q-42.780 3.948-42.606 3.487Q-42.432 3.025-42.120 2.634Q-41.808 2.243-41.398 2.008Q-40.987 1.773-40.547 1.773Q-40.279 1.773-40.062 1.911Q-39.844 2.050-39.712 2.296Q-39.673 2.146-39.565 2.050Q-39.457 1.953-39.317 1.953Q-39.194 1.953-39.110 2.026Q-39.027 2.098-39.027 2.221Q-39.027 2.274-39.036 2.305L-39.655 4.796Q-39.712 4.994-39.712 5.192Q-39.712 5.587-39.449 5.587Q-39.163 5.587-39.029 5.264Q-38.895 4.941-38.776 4.436Q-38.767 4.405-38.743 4.381Q-38.719 4.357-38.684 4.357L-38.578 4.357Q-38.530 4.357-38.508 4.390Q-38.486 4.423-38.486 4.471Q-38.600 4.902-38.691 5.155Q-38.781 5.407-38.974 5.629Q-39.167 5.851-39.466 5.851Q-39.774 5.851-40.022 5.680Q-40.270 5.508-40.341 5.218Q-40.596 5.504-40.892 5.677Q-41.189 5.851-41.518 5.851M-41.501 5.587Q-41.171 5.587-40.861 5.346Q-40.552 5.104-40.341 4.788Q-40.332 4.779-40.332 4.761L-39.835 2.797Q-39.892 2.480-40.084 2.256Q-40.275 2.032-40.565 2.032Q-40.934 2.032-41.233 2.351Q-41.532 2.669-41.699 3.078Q-41.835 3.425-41.960 3.935Q-42.085 4.445-42.085 4.770Q-42.085 5.095-41.947 5.341Q-41.808 5.587-41.501 5.587M-37.344 7.354Q-37.344 7.314-37.308 7.279Q-36.983 6.967-36.803 6.561Q-36.623 6.154-36.623 5.706L-36.623 5.623Q-36.764 5.750-36.966 5.750Q-37.111 5.750-37.225 5.684Q-37.339 5.618-37.405 5.506Q-37.471 5.394-37.471 5.245Q-37.471 5.025-37.330 4.884Q-37.190 4.744-36.966 4.744Q-36.645 4.744-36.504 5.042Q-36.364 5.341-36.364 5.706Q-36.364 6.216-36.568 6.671Q-36.772 7.125-37.137 7.477Q-37.172 7.495-37.199 7.495Q-37.256 7.495-37.300 7.451Q-37.344 7.407-37.344 7.354",[605],[589,5420,5421],{"transform":5408},[594,5422],{"d":5423,"fill":591,"stroke":591,"className":5424,"style":606},"M-32.506 5.851Q-33.082 5.851-33.403 5.420Q-33.724 4.990-33.724 4.410Q-33.724 4.005-33.640 3.777L-32.761 0.279Q-32.726 0.129-32.726 0.055Q-32.726-0.082-33.293-0.082Q-33.390-0.082-33.390-0.200Q-33.390-0.257-33.359-0.328Q-33.328-0.398-33.262-0.398L-32.041-0.495Q-31.988-0.495-31.955-0.466Q-31.922-0.437-31.922-0.389L-31.922-0.354L-32.581 2.256Q-32.058 1.773-31.535 1.773Q-31.149 1.773-30.858 1.977Q-30.568 2.182-30.421 2.516Q-30.274 2.850-30.274 3.241Q-30.274 3.825-30.577 4.434Q-30.880 5.042-31.401 5.447Q-31.922 5.851-32.506 5.851M-32.489 5.587Q-32.120 5.587-31.816 5.264Q-31.513 4.941-31.355 4.546Q-31.210 4.190-31.089 3.682Q-30.968 3.175-30.968 2.854Q-30.968 2.529-31.113 2.281Q-31.258 2.032-31.553 2.032Q-32.155 2.032-32.726 2.832L-32.968 3.825Q-33.113 4.449-33.113 4.713Q-33.113 5.056-32.961 5.322Q-32.810 5.587-32.489 5.587",[605],[589,5426,5427],{"transform":5408},[594,5428],{"d":5429,"fill":591,"stroke":591,"className":5430,"style":606},"M-29.527 7.921L-29.527 7.820Q-29.527 7.789-29.496 7.765Q-29.465 7.741-29.435 7.741Q-29.127 7.741-28.843 7.633Q-28.560 7.525-28.375 7.312Q-28.191 7.099-28.191 6.796L-28.191 4.607Q-28.191 4.317-28.041 4.095Q-27.892 3.874-27.650 3.724Q-27.409 3.575-27.132 3.500Q-27.589 3.368-27.890 3.087Q-28.191 2.806-28.191 2.393L-28.191 0.204Q-28.191-0.099-28.375-0.312Q-28.560-0.525-28.843-0.633Q-29.127-0.741-29.435-0.741Q-29.452-0.741-29.489-0.769Q-29.527-0.798-29.527-0.820L-29.527-0.921Q-29.527-0.952-29.496-0.976Q-29.465-1-29.435-1L-29.355-1Q-28.956-1-28.529-0.888Q-28.103-0.776-27.811-0.512Q-27.518-0.249-27.518 0.169L-27.518 2.357Q-27.518 2.674-27.338 2.902Q-27.158 3.131-26.868 3.247Q-26.578 3.364-26.275 3.364Q-26.248 3.364-26.218 3.390Q-26.187 3.417-26.187 3.447L-26.187 3.544Q-26.187 3.579-26.216 3.603Q-26.244 3.627-26.275 3.627Q-26.758 3.627-27.138 3.902Q-27.518 4.177-27.518 4.643L-27.518 6.831Q-27.518 7.249-27.811 7.512Q-28.103 7.776-28.529 7.888Q-28.956 8-29.355 8L-29.435 8Q-29.452 8-29.489 7.971Q-29.527 7.943-29.527 7.921",[605],[594,5432],{"fill":596,"d":5433},"M42.315 51.977H21.491a4 4 0 0 0-4 4v7.666a4 4 0 0 0 4 4h20.824a4 4 0 0 0 4-4v-7.666a4 4 0 0 0-4-4ZM17.491 67.643",[589,5435,5436,5442,5448,5454],{"stroke":596,"fontSize":4709},[589,5437,5439],{"transform":5438},"translate(68.589 56.31)",[594,5440],{"d":5411,"fill":591,"stroke":591,"className":5441,"style":606},[605],[589,5443,5444],{"transform":5438},[594,5445],{"d":5446,"fill":591,"stroke":591,"className":5447,"style":606},"M-42.050 4.643Q-42.050 5.038-41.837 5.313Q-41.624 5.587-41.242 5.587Q-40.697 5.587-40.191 5.352Q-39.686 5.117-39.369 4.695Q-39.348 4.660-39.286 4.660Q-39.229 4.660-39.183 4.711Q-39.137 4.761-39.137 4.814Q-39.137 4.849-39.163 4.875Q-39.510 5.350-40.073 5.601Q-40.635 5.851-41.259 5.851Q-41.690 5.851-42.039 5.649Q-42.389 5.447-42.580 5.091Q-42.771 4.735-42.771 4.309Q-42.771 3.847-42.569 3.390Q-42.367 2.933-42.011 2.564Q-41.655 2.195-41.211 1.984Q-40.767 1.773-40.297 1.773Q-40.029 1.773-39.780 1.854Q-39.532 1.936-39.365 2.114Q-39.198 2.292-39.198 2.555Q-39.198 2.792-39.348 2.970Q-39.497 3.148-39.730 3.148Q-39.870 3.148-39.976 3.054Q-40.081 2.959-40.081 2.814Q-40.081 2.612-39.934 2.458Q-39.787 2.305-39.585 2.305Q-39.690 2.164-39.895 2.098Q-40.099 2.032-40.306 2.032Q-40.842 2.032-41.239 2.461Q-41.637 2.889-41.844 3.509Q-42.050 4.128-42.050 4.643M-38.244 7.354Q-38.244 7.314-38.209 7.279Q-37.884 6.967-37.704 6.561Q-37.524 6.154-37.524 5.706L-37.524 5.623Q-37.664 5.750-37.867 5.750Q-38.012 5.750-38.126 5.684Q-38.240 5.618-38.306 5.506Q-38.372 5.394-38.372 5.245Q-38.372 5.025-38.231 4.884Q-38.091 4.744-37.867 4.744Q-37.546 4.744-37.405 5.042Q-37.265 5.341-37.265 5.706Q-37.265 6.216-37.469 6.671Q-37.673 7.125-38.038 7.477Q-38.073 7.495-38.099 7.495Q-38.157 7.495-38.201 7.451Q-38.244 7.407-38.244 7.354",[605],[589,5449,5450],{"transform":5438},[594,5451],{"d":5452,"fill":591,"stroke":591,"className":5453,"style":606},"M-33.402 5.851Q-33.798 5.851-34.084 5.647Q-34.369 5.442-34.516 5.108Q-34.664 4.774-34.664 4.383Q-34.664 3.948-34.490 3.487Q-34.316 3.025-34.004 2.634Q-33.692 2.243-33.282 2.008Q-32.871 1.773-32.431 1.773Q-32.163 1.773-31.946 1.911Q-31.728 2.050-31.596 2.296L-31.091 0.279Q-31.056 0.129-31.056 0.055Q-31.056-0.082-31.623-0.082Q-31.719-0.082-31.719-0.200Q-31.719-0.257-31.689-0.328Q-31.658-0.398-31.596-0.398L-30.370-0.495Q-30.317-0.495-30.287-0.466Q-30.256-0.437-30.256-0.389L-30.256-0.354L-31.539 4.796Q-31.539 4.854-31.568 4.985Q-31.596 5.117-31.596 5.192Q-31.596 5.587-31.333 5.587Q-31.047 5.587-30.913 5.264Q-30.779 4.941-30.660 4.436Q-30.651 4.405-30.627 4.381Q-30.603 4.357-30.568 4.357L-30.462 4.357Q-30.414 4.357-30.392 4.390Q-30.370 4.423-30.370 4.471Q-30.484 4.902-30.575 5.155Q-30.665 5.407-30.858 5.629Q-31.051 5.851-31.350 5.851Q-31.658 5.851-31.906 5.680Q-32.154 5.508-32.225 5.218Q-32.480 5.504-32.776 5.677Q-33.073 5.851-33.402 5.851M-33.385 5.587Q-33.055 5.587-32.745 5.346Q-32.436 5.104-32.225 4.788Q-32.216 4.779-32.216 4.752L-31.719 2.797Q-31.776 2.480-31.968 2.256Q-32.159 2.032-32.449 2.032Q-32.818 2.032-33.117 2.351Q-33.416 2.669-33.583 3.078Q-33.719 3.425-33.844 3.935Q-33.969 4.445-33.969 4.770Q-33.969 5.095-33.831 5.341Q-33.692 5.587-33.385 5.587",[605],[589,5455,5456],{"transform":5438},[594,5457],{"d":5458,"fill":591,"stroke":591,"className":5459,"style":606},"M-29.594 7.921L-29.594 7.820Q-29.594 7.789-29.563 7.765Q-29.532 7.741-29.502 7.741Q-29.194 7.741-28.910 7.633Q-28.627 7.525-28.442 7.312Q-28.258 7.099-28.258 6.796L-28.258 4.607Q-28.258 4.317-28.108 4.095Q-27.959 3.874-27.717 3.724Q-27.476 3.575-27.199 3.500Q-27.656 3.368-27.957 3.087Q-28.258 2.806-28.258 2.393L-28.258 0.204Q-28.258-0.099-28.442-0.312Q-28.627-0.525-28.910-0.633Q-29.194-0.741-29.502-0.741Q-29.519-0.741-29.556-0.769Q-29.594-0.798-29.594-0.820L-29.594-0.921Q-29.594-0.952-29.563-0.976Q-29.532-1-29.502-1L-29.422-1Q-29.023-1-28.596-0.888Q-28.170-0.776-27.878-0.512Q-27.585-0.249-27.585 0.169L-27.585 2.357Q-27.585 2.674-27.405 2.902Q-27.225 3.131-26.935 3.247Q-26.645 3.364-26.342 3.364Q-26.315 3.364-26.285 3.390Q-26.254 3.417-26.254 3.447L-26.254 3.544Q-26.254 3.579-26.283 3.603Q-26.311 3.627-26.342 3.627Q-26.825 3.627-27.205 3.902Q-27.585 4.177-27.585 4.643L-27.585 6.831Q-27.585 7.249-27.878 7.512Q-28.170 7.776-28.596 7.888Q-29.023 8-29.422 8L-29.502 8Q-29.519 8-29.556 7.971Q-29.594 7.943-29.594 7.921",[605],[594,5461],{"fill":596,"d":5462},"M100.607 51.977H88.391a4 4 0 0 0-4 4v7.666a4 4 0 0 0 4 4h12.216a4 4 0 0 0 4-4v-7.666a4 4 0 0 0-4-4ZM84.391 67.643",[589,5464,5465,5471,5477],{"stroke":596,"fontSize":4709},[589,5466,5468],{"transform":5467},"translate(135.489 56.31)",[594,5469],{"d":5411,"fill":591,"stroke":591,"className":5470,"style":606},[605],[589,5472,5473],{"transform":5467},[594,5474],{"d":5475,"fill":591,"stroke":591,"className":5476,"style":606},"M-42.024 4.572Q-42.024 4.985-41.828 5.286Q-41.633 5.587-41.242 5.587Q-40.697 5.587-40.191 5.352Q-39.686 5.117-39.369 4.695Q-39.348 4.660-39.286 4.660Q-39.229 4.660-39.183 4.711Q-39.137 4.761-39.137 4.814Q-39.137 4.849-39.163 4.875Q-39.510 5.350-40.073 5.601Q-40.635 5.851-41.259 5.851Q-41.932 5.851-42.329 5.370Q-42.727 4.889-42.727 4.203Q-42.727 3.557-42.393 2.992Q-42.059 2.428-41.499 2.100Q-40.938 1.773-40.297 1.773Q-39.892 1.773-39.585 1.975Q-39.277 2.177-39.277 2.555Q-39.277 2.955-39.543 3.195Q-39.809 3.434-40.226 3.546Q-40.644 3.658-41.020 3.682Q-41.395 3.707-41.861 3.707L-41.896 3.707Q-42.024 4.269-42.024 4.572M-41.826 3.447Q-40.965 3.447-40.306 3.291Q-39.646 3.135-39.646 2.564Q-39.646 2.313-39.846 2.173Q-40.046 2.032-40.306 2.032Q-40.877 2.032-41.268 2.439Q-41.659 2.845-41.826 3.447",[605],[589,5478,5479],{"transform":5467},[594,5480],{"d":5481,"fill":591,"stroke":591,"className":5482,"style":606},"M-38.202 7.921L-38.202 7.820Q-38.202 7.789-38.171 7.765Q-38.140 7.741-38.110 7.741Q-37.802 7.741-37.518 7.633Q-37.235 7.525-37.050 7.312Q-36.866 7.099-36.866 6.796L-36.866 4.607Q-36.866 4.317-36.716 4.095Q-36.567 3.874-36.325 3.724Q-36.084 3.575-35.807 3.500Q-36.264 3.368-36.565 3.087Q-36.866 2.806-36.866 2.393L-36.866 0.204Q-36.866-0.099-37.050-0.312Q-37.235-0.525-37.518-0.633Q-37.802-0.741-38.110-0.741Q-38.127-0.741-38.164-0.769Q-38.202-0.798-38.202-0.820L-38.202-0.921Q-38.202-0.952-38.171-0.976Q-38.140-1-38.110-1L-38.030-1Q-37.631-1-37.204-0.888Q-36.778-0.776-36.486-0.512Q-36.193-0.249-36.193 0.169L-36.193 2.357Q-36.193 2.674-36.013 2.902Q-35.833 3.131-35.543 3.247Q-35.253 3.364-34.950 3.364Q-34.923 3.364-34.893 3.390Q-34.862 3.417-34.862 3.447L-34.862 3.544Q-34.862 3.579-34.891 3.603Q-34.919 3.627-34.950 3.627Q-35.433 3.627-35.813 3.902Q-36.193 4.177-36.193 4.643L-36.193 6.831Q-36.193 7.249-36.486 7.512Q-36.778 7.776-37.204 7.888Q-37.631 8-38.030 8L-38.110 8Q-38.127 8-38.164 7.971Q-38.202 7.943-38.202 7.921",[605],[589,5484,5485,5488],{"style":5289},[594,5486],{"fill":596,"d":5487},"M-16.047 59.81h29.212",[594,5489],{"d":5490},"m16.152 59.81-4.17-1.576 1.383 1.576-1.382 1.577Z",[589,5492,5493,5496],{"style":5289},[594,5494],{"fill":596,"d":5495},"M46.515 59.81h33.55",[594,5497],{"d":5498},"m83.052 59.81-4.17-1.576 1.383 1.576-1.382 1.577Z",[589,5500,5501],{"fill":2066,"stroke":2066},[589,5502,5503,5510,5516,5523,5529],{"fill":2066,"stroke":596},[589,5504,5506],{"transform":5505},"translate(-14.506 78.572)",[594,5507],{"d":5508,"fill":2066,"stroke":2066,"className":5509,"style":2077},"M-47.451 5.743L-47.451 4.680Q-47.451 4.656-47.423 4.629Q-47.396 4.602-47.372 4.602L-47.263 4.602Q-47.198 4.602-47.184 4.660Q-47.088 5.094-46.842 5.345Q-46.596 5.596-46.182 5.596Q-45.841 5.596-45.588 5.463Q-45.335 5.330-45.335 5.022Q-45.335 4.865-45.429 4.750Q-45.523 4.636-45.661 4.567Q-45.800 4.499-45.967 4.461L-46.548 4.362Q-46.904 4.294-47.177 4.073Q-47.451 3.853-47.451 3.511Q-47.451 3.262-47.339 3.087Q-47.228 2.913-47.042 2.814Q-46.856 2.715-46.640 2.672Q-46.425 2.629-46.182 2.629Q-45.769 2.629-45.489 2.811L-45.273 2.636Q-45.263 2.633-45.256 2.631Q-45.249 2.629-45.239 2.629L-45.188 2.629Q-45.161 2.629-45.137 2.653Q-45.113 2.677-45.113 2.705L-45.113 3.552Q-45.113 3.573-45.137 3.600Q-45.161 3.627-45.188 3.627L-45.301 3.627Q-45.328 3.627-45.354 3.602Q-45.379 3.576-45.379 3.552Q-45.379 3.316-45.485 3.152Q-45.591 2.988-45.774 2.906Q-45.957 2.824-46.189 2.824Q-46.517 2.824-46.774 2.927Q-47.030 3.029-47.030 3.306Q-47.030 3.501-46.847 3.610Q-46.664 3.720-46.435 3.761L-45.861 3.867Q-45.615 3.915-45.401 4.043Q-45.188 4.171-45.051 4.374Q-44.914 4.578-44.914 4.827Q-44.914 5.340-45.280 5.579Q-45.646 5.818-46.182 5.818Q-46.678 5.818-47.010 5.524L-47.276 5.798Q-47.297 5.818-47.324 5.818L-47.372 5.818Q-47.396 5.818-47.423 5.791Q-47.451 5.764-47.451 5.743M-44.327 4.267Q-44.327 3.925-44.192 3.626Q-44.057 3.327-43.817 3.103Q-43.578 2.879-43.260 2.754Q-42.942 2.629-42.611 2.629Q-42.166 2.629-41.766 2.845Q-41.367 3.060-41.132 3.438Q-40.898 3.815-40.898 4.267Q-40.898 4.608-41.040 4.892Q-41.182 5.176-41.426 5.383Q-41.671 5.589-41.980 5.704Q-42.289 5.818-42.611 5.818Q-43.041 5.818-43.443 5.617Q-43.845 5.415-44.086 5.063Q-44.327 4.711-44.327 4.267M-42.611 5.569Q-42.009 5.569-41.785 5.191Q-41.561 4.813-41.561 4.181Q-41.561 3.569-41.796 3.210Q-42.030 2.852-42.611 2.852Q-43.663 2.852-43.663 4.181Q-43.663 4.813-43.438 5.191Q-43.212 5.569-42.611 5.569M-39.729 4.916L-39.729 3.412Q-39.729 3.142-39.837 3.081Q-39.945 3.019-40.256 3.019L-40.256 2.739L-39.148 2.664L-39.148 4.896L-39.148 4.916Q-39.148 5.196-39.097 5.340Q-39.046 5.483-38.904 5.540Q-38.762 5.596-38.475 5.596Q-38.222 5.596-38.017 5.456Q-37.812 5.316-37.696 5.090Q-37.579 4.865-37.579 4.615L-37.579 3.412Q-37.579 3.142-37.687 3.081Q-37.795 3.019-38.106 3.019L-38.106 2.739L-36.998 2.664L-36.998 5.077Q-36.998 5.268-36.945 5.350Q-36.892 5.432-36.792 5.451Q-36.691 5.470-36.475 5.470L-36.475 5.750L-37.552 5.818L-37.552 5.254Q-37.661 5.436-37.807 5.559Q-37.952 5.682-38.138 5.750Q-38.325 5.818-38.526 5.818Q-39.729 5.818-39.729 4.916M-34.138 5.750L-35.874 5.750L-35.874 5.470Q-35.645 5.470-35.496 5.436Q-35.348 5.401-35.348 5.261L-35.348 3.412Q-35.348 3.142-35.455 3.081Q-35.563 3.019-35.874 3.019L-35.874 2.739L-34.845 2.664L-34.845 3.371Q-34.715 3.063-34.473 2.864Q-34.230 2.664-33.912 2.664Q-33.693 2.664-33.522 2.788Q-33.351 2.913-33.351 3.125Q-33.351 3.262-33.451 3.361Q-33.550 3.460-33.683 3.460Q-33.820 3.460-33.919 3.361Q-34.018 3.262-34.018 3.125Q-34.018 2.985-33.919 2.886Q-34.209 2.886-34.409 3.082Q-34.609 3.279-34.702 3.573Q-34.794 3.867-34.794 4.147L-34.794 5.261Q-34.794 5.470-34.138 5.470L-34.138 5.750M-32.767 4.239Q-32.767 3.911-32.632 3.610Q-32.497 3.310-32.261 3.089Q-32.025 2.869-31.721 2.749Q-31.417 2.629-31.092 2.629Q-30.586 2.629-30.238 2.732Q-29.889 2.834-29.889 3.210Q-29.889 3.357-29.986 3.458Q-30.084 3.559-30.231 3.559Q-30.385 3.559-30.484 3.460Q-30.583 3.361-30.583 3.210Q-30.583 3.022-30.443 2.930Q-30.644 2.879-31.085 2.879Q-31.441 2.879-31.670 3.075Q-31.899 3.272-32 3.581Q-32.100 3.891-32.100 4.239Q-32.100 4.588-31.974 4.894Q-31.848 5.200-31.593 5.384Q-31.338 5.569-30.983 5.569Q-30.761 5.569-30.576 5.485Q-30.391 5.401-30.256 5.246Q-30.121 5.090-30.063 4.882Q-30.050 4.827-29.995 4.827L-29.882 4.827Q-29.851 4.827-29.829 4.851Q-29.807 4.875-29.807 4.909L-29.807 4.930Q-29.892 5.217-30.080 5.415Q-30.268 5.613-30.533 5.716Q-30.798 5.818-31.092 5.818Q-31.523 5.818-31.911 5.612Q-32.299 5.405-32.533 5.042Q-32.767 4.680-32.767 4.239M-29.260 4.215Q-29.260 3.894-29.135 3.605Q-29.011 3.316-28.785 3.093Q-28.559 2.869-28.264 2.749Q-27.968 2.629-27.650 2.629Q-27.322 2.629-27.061 2.729Q-26.799 2.828-26.623 3.010Q-26.447 3.193-26.353 3.451Q-26.259 3.709-26.259 4.041Q-26.259 4.133-26.341 4.154L-28.597 4.154L-28.597 4.215Q-28.597 4.803-28.313 5.186Q-28.030 5.569-27.462 5.569Q-27.141 5.569-26.873 5.376Q-26.604 5.183-26.515 4.868Q-26.509 4.827-26.433 4.813L-26.341 4.813Q-26.259 4.837-26.259 4.909Q-26.259 4.916-26.266 4.943Q-26.379 5.340-26.750 5.579Q-27.120 5.818-27.544 5.818Q-27.982 5.818-28.382 5.610Q-28.782 5.401-29.021 5.034Q-29.260 4.667-29.260 4.215M-28.590 3.945L-26.775 3.945Q-26.775 3.668-26.873 3.416Q-26.970 3.163-27.168 3.007Q-27.367 2.852-27.650 2.852Q-27.927 2.852-28.141 3.010Q-28.354 3.169-28.472 3.424Q-28.590 3.679-28.590 3.945M-25.271 5.330Q-25.271 5.162-25.148 5.039Q-25.025 4.916-24.851 4.916Q-24.683 4.916-24.560 5.039Q-24.437 5.162-24.437 5.330Q-24.437 5.504-24.560 5.627Q-24.683 5.750-24.851 5.750Q-25.025 5.750-25.148 5.627Q-25.271 5.504-25.271 5.330M-25.271 3.146Q-25.271 2.978-25.148 2.855Q-25.025 2.732-24.851 2.732Q-24.683 2.732-24.560 2.855Q-24.437 2.978-24.437 3.146Q-24.437 3.320-24.560 3.443Q-24.683 3.566-24.851 3.566Q-25.025 3.566-25.148 3.443Q-25.271 3.320-25.271 3.146",[605],[589,5511,5512],{"transform":5505},[594,5513],{"d":5514,"fill":2066,"stroke":2066,"className":5515,"style":2077},"M-19.625 6.673Q-19.625 6.495-19.507 6.360Q-19.389 6.225-19.208 6.225Q-19.092 6.225-19.010 6.299Q-18.928 6.372-18.928 6.492Q-18.928 6.625-19.005 6.731Q-19.082 6.837-19.215 6.885Q-19.082 6.953-18.921 6.953Q-18.682 6.953-18.573 6.640Q-18.463 6.328-18.381 5.883Q-18.350 5.733-18.280 5.364Q-18.210 4.995-18.156 4.701L-17.855 3.012L-18.521 3.012Q-18.603 2.985-18.603 2.899L-18.576 2.790Q-18.569 2.749-18.501 2.732L-17.807 2.732L-17.721 2.277Q-17.667 1.970-17.639 1.835Q-17.612 1.700-17.547 1.527Q-17.482 1.354-17.380 1.221Q-17.250 1.043-17.048 0.932Q-16.846 0.821-16.631 0.821Q-16.361 0.821-16.139 0.946Q-15.917 1.071-15.917 1.327Q-15.917 1.505-16.038 1.640Q-16.159 1.775-16.330 1.775Q-16.447 1.775-16.532 1.701Q-16.617 1.628-16.617 1.508Q-16.617 1.378-16.537 1.267Q-16.457 1.156-16.330 1.115Q-16.471 1.047-16.638 1.047Q-16.775 1.047-16.855 1.143Q-16.935 1.238-16.968 1.361Q-17 1.484-17.031 1.642Q-17.041 1.693-17.094 1.971Q-17.147 2.250-17.151 2.264L-17.233 2.732L-16.436 2.732Q-16.351 2.756-16.351 2.838L-16.378 2.951Q-16.385 2.995-16.457 3.012L-17.281 3.012L-17.581 4.687Q-17.687 5.271-17.766 5.624Q-17.845 5.976-17.981 6.311Q-18.111 6.642-18.366 6.910Q-18.620 7.179-18.928 7.179Q-19.198 7.179-19.412 7.049Q-19.625 6.919-19.625 6.673",[605],[589,5517,5518],{"transform":5505},[594,5519],{"d":5520,"fill":2066,"stroke":2066,"className":5521,"style":5522},"M-14.545 6.750L-15.839 6.750L-15.839 6.511Q-15.424 6.511-15.424 6.391L-15.424 5.114Q-15.424 4.924-15.514 4.880Q-15.604 4.836-15.839 4.836L-15.839 4.594L-14.999 4.541L-14.999 5.004Q-14.904 4.855-14.760 4.750Q-14.615 4.646-14.443 4.593Q-14.271 4.541-14.088 4.541Q-13.949 4.541-13.818 4.559Q-13.688 4.577-13.578 4.624Q-13.468 4.670-13.380 4.761Q-13.292 4.853-13.253 4.990Q-13.114 4.772-12.869 4.656Q-12.623 4.541-12.355 4.541Q-11.488 4.541-11.488 5.219L-11.488 6.391Q-11.488 6.511-11.073 6.511L-11.073 6.750L-12.369 6.750L-12.369 6.511Q-11.954 6.511-11.954 6.391L-11.954 5.234Q-11.954 4.978-12.057 4.852Q-12.159 4.726-12.408 4.726Q-12.557 4.726-12.703 4.775Q-12.848 4.824-12.968 4.919Q-13.087 5.014-13.156 5.144Q-13.224 5.273-13.224 5.429L-13.224 6.391Q-13.224 6.511-12.809 6.511L-12.809 6.750L-14.105 6.750L-14.105 6.511Q-13.690 6.511-13.690 6.391L-13.690 5.234Q-13.690 4.978-13.793 4.852Q-13.895 4.726-14.144 4.726Q-14.293 4.726-14.438 4.775Q-14.584 4.824-14.703 4.919Q-14.823 5.014-14.891 5.144Q-14.960 5.273-14.960 5.429L-14.960 6.391Q-14.960 6.511-14.545 6.511L-14.545 6.750M-10.353 6.210Q-10.353 5.896-10.045 5.711Q-9.738 5.527-9.330 5.458Q-8.922 5.390-8.593 5.390L-8.593 5.234Q-8.593 5.078-8.684 4.953Q-8.776 4.829-8.922 4.761Q-9.069 4.694-9.227 4.694Q-9.564 4.694-9.718 4.741Q-9.608 4.819-9.608 4.965Q-9.608 5.041-9.644 5.103Q-9.679 5.166-9.745 5.203Q-9.811 5.241-9.884 5.241Q-9.994 5.241-10.076 5.162Q-10.157 5.083-10.157 4.965Q-10.157 4.672-9.885 4.591Q-9.613 4.509-9.227 4.509Q-9.059 4.509-8.868 4.550Q-8.678 4.592-8.511 4.678Q-8.343 4.765-8.236 4.902Q-8.129 5.039-8.129 5.219L-8.129 6.345Q-8.129 6.423-8.075 6.481Q-8.021 6.540-7.943 6.540Q-7.863 6.540-7.810 6.481Q-7.758 6.423-7.758 6.345L-7.758 6.025L-7.528 6.025L-7.528 6.345Q-7.528 6.564-7.731 6.672Q-7.933 6.779-8.173 6.779Q-8.314 6.779-8.409 6.671Q-8.505 6.562-8.529 6.416Q-8.612 6.545-8.749 6.634Q-8.885 6.723-9.048 6.765Q-9.210 6.806-9.374 6.806Q-9.596 6.806-9.818 6.754Q-10.040 6.701-10.197 6.568Q-10.353 6.435-10.353 6.210M-9.874 6.210Q-9.874 6.401-9.697 6.511Q-9.520 6.621-9.313 6.621Q-9.144 6.621-8.977 6.561Q-8.810 6.501-8.701 6.378Q-8.593 6.254-8.593 6.081L-8.593 5.561Q-9.017 5.561-9.446 5.715Q-9.874 5.869-9.874 6.210M-6.031 6.750L-7.098 6.750L-7.098 6.511Q-6.622 6.511-6.361 6.250L-5.802 5.690L-6.517 4.956Q-6.517 4.953-6.517 4.952Q-6.517 4.951-6.522 4.951Q-6.610 4.877-6.741 4.857Q-6.871 4.836-7.067 4.836L-7.067 4.594L-5.863 4.594L-5.863 4.836Q-5.907 4.836-5.950 4.855Q-5.992 4.875-5.992 4.914Q-5.992 4.941-5.978 4.956L-5.526 5.419L-5.201 5.095Q-5.118 5.002-5.118 4.924Q-5.118 4.899-5.131 4.880Q-5.143 4.860-5.162 4.848Q-5.182 4.836-5.206 4.836L-5.206 4.594L-4.142 4.594L-4.142 4.836Q-4.618 4.836-4.877 5.095L-5.367 5.585L-4.581 6.391Q-4.481 6.472-4.353 6.491Q-4.225 6.511-4.032 6.511L-4.032 6.750L-5.238 6.750L-5.238 6.511Q-5.192 6.511-5.149 6.491Q-5.106 6.472-5.106 6.430Q-5.106 6.406-5.123 6.391L-5.643 5.854L-6.031 6.250Q-6.122 6.340-6.122 6.420Q-6.122 6.452-6.095 6.481Q-6.068 6.511-6.031 6.511",[605],"stroke-width:0.150",[589,5524,5525],{"transform":5505},[594,5526],{"d":5527,"fill":2066,"stroke":2066,"className":5528,"style":2077},"M4.485 4.943L-0.348 4.943Q-0.416 4.933-0.462 4.887Q-0.508 4.841-0.508 4.769Q-0.508 4.704-0.462 4.658Q-0.416 4.612-0.348 4.602L4.485 4.602Q4.554 4.612 4.600 4.658Q4.646 4.704 4.646 4.769Q4.646 4.841 4.600 4.887Q4.554 4.933 4.485 4.943M4.485 3.405L-0.348 3.405Q-0.416 3.395-0.462 3.349Q-0.508 3.303-0.508 3.231Q-0.508 3.087-0.348 3.063L4.485 3.063Q4.646 3.087 4.646 3.231Q4.646 3.303 4.600 3.349Q4.554 3.395 4.485 3.405",[605],[589,5530,5531],{"transform":5505},[594,5532],{"d":5533,"fill":2066,"stroke":2066,"className":5534,"style":2077},"M10.744 5.750L8.214 5.750L8.214 5.470Q9.182 5.470 9.182 5.261L9.182 1.642Q8.789 1.830 8.167 1.830L8.167 1.549Q8.584 1.549 8.948 1.448Q9.312 1.348 9.568 1.102L9.694 1.102Q9.759 1.119 9.776 1.187L9.776 5.261Q9.776 5.470 10.744 5.470L10.744 5.750M14.726 5.750L11.841 5.750L11.841 5.548Q11.841 5.518 11.868 5.490L13.116 4.273Q13.188 4.198 13.230 4.156Q13.273 4.113 13.352 4.034Q13.765 3.621 13.996 3.263Q14.227 2.906 14.227 2.482Q14.227 2.250 14.148 2.047Q14.069 1.843 13.928 1.693Q13.786 1.542 13.591 1.462Q13.396 1.382 13.164 1.382Q12.853 1.382 12.595 1.541Q12.336 1.700 12.207 1.977L12.227 1.977Q12.395 1.977 12.502 2.088Q12.610 2.199 12.610 2.363Q12.610 2.520 12.501 2.633Q12.391 2.746 12.227 2.746Q12.066 2.746 11.954 2.633Q11.841 2.520 11.841 2.363Q11.841 1.987 12.049 1.700Q12.258 1.413 12.593 1.257Q12.928 1.102 13.283 1.102Q13.707 1.102 14.086 1.260Q14.466 1.419 14.700 1.736Q14.934 2.052 14.934 2.482Q14.934 2.793 14.794 3.062Q14.654 3.330 14.449 3.535Q14.244 3.740 13.881 4.022Q13.519 4.304 13.410 4.400L12.555 5.128L13.198 5.128Q13.461 5.128 13.750 5.126Q14.039 5.125 14.257 5.116Q14.476 5.107 14.493 5.090Q14.555 5.025 14.592 4.858Q14.630 4.690 14.668 4.448L14.934 4.448",[605],[589,5536,5538],{"transform":5537},"translate(135.239 79.253)",[594,5539],{"d":5540,"fill":591,"stroke":591,"className":5541,"style":2077},"M-47.451 5.743L-47.451 4.680Q-47.451 4.656-47.423 4.629Q-47.396 4.602-47.372 4.602L-47.263 4.602Q-47.198 4.602-47.184 4.660Q-47.088 5.094-46.842 5.345Q-46.596 5.596-46.182 5.596Q-45.841 5.596-45.588 5.463Q-45.335 5.330-45.335 5.022Q-45.335 4.865-45.429 4.750Q-45.523 4.636-45.661 4.567Q-45.800 4.499-45.967 4.461L-46.548 4.362Q-46.904 4.294-47.177 4.073Q-47.451 3.853-47.451 3.511Q-47.451 3.262-47.339 3.087Q-47.228 2.913-47.042 2.814Q-46.856 2.715-46.640 2.672Q-46.425 2.629-46.182 2.629Q-45.769 2.629-45.489 2.811L-45.273 2.636Q-45.263 2.633-45.256 2.631Q-45.249 2.629-45.239 2.629L-45.188 2.629Q-45.161 2.629-45.137 2.653Q-45.113 2.677-45.113 2.705L-45.113 3.552Q-45.113 3.573-45.137 3.600Q-45.161 3.627-45.188 3.627L-45.301 3.627Q-45.328 3.627-45.354 3.602Q-45.379 3.576-45.379 3.552Q-45.379 3.316-45.485 3.152Q-45.591 2.988-45.774 2.906Q-45.957 2.824-46.189 2.824Q-46.517 2.824-46.774 2.927Q-47.030 3.029-47.030 3.306Q-47.030 3.501-46.847 3.610Q-46.664 3.720-46.435 3.761L-45.861 3.867Q-45.615 3.915-45.401 4.043Q-45.188 4.171-45.051 4.374Q-44.914 4.578-44.914 4.827Q-44.914 5.340-45.280 5.579Q-45.646 5.818-46.182 5.818Q-46.678 5.818-47.010 5.524L-47.276 5.798Q-47.297 5.818-47.324 5.818L-47.372 5.818Q-47.396 5.818-47.423 5.791Q-47.451 5.764-47.451 5.743M-42.669 5.750L-44.221 5.750L-44.221 5.470Q-43.995 5.470-43.846 5.436Q-43.698 5.401-43.698 5.261L-43.698 3.412Q-43.698 3.224-43.745 3.140Q-43.793 3.057-43.891 3.038Q-43.988 3.019-44.200 3.019L-44.200 2.739L-43.144 2.664L-43.144 5.261Q-43.144 5.401-43.012 5.436Q-42.881 5.470-42.669 5.470L-42.669 5.750M-43.940 1.443Q-43.940 1.272-43.817 1.153Q-43.694 1.033-43.523 1.033Q-43.356 1.033-43.233 1.153Q-43.110 1.272-43.110 1.443Q-43.110 1.618-43.233 1.741Q-43.356 1.864-43.523 1.864Q-43.694 1.864-43.817 1.741Q-43.940 1.618-43.940 1.443M-40.341 5.750L-41.975 5.750L-41.975 5.470Q-41.746 5.470-41.597 5.436Q-41.449 5.401-41.449 5.261L-41.449 3.412Q-41.449 3.142-41.556 3.081Q-41.664 3.019-41.975 3.019L-41.975 2.739L-40.915 2.664L-40.915 3.313Q-40.744 3.005-40.440 2.834Q-40.136 2.664-39.791 2.664Q-39.285 2.664-39.001 2.887Q-38.718 3.111-38.718 3.607L-38.718 5.261Q-38.718 5.398-38.569 5.434Q-38.420 5.470-38.195 5.470L-38.195 5.750L-39.825 5.750L-39.825 5.470Q-39.596 5.470-39.447 5.436Q-39.299 5.401-39.299 5.261L-39.299 3.621Q-39.299 3.286-39.418 3.086Q-39.538 2.886-39.852 2.886Q-40.122 2.886-40.357 3.022Q-40.591 3.159-40.729 3.393Q-40.868 3.627-40.868 3.901L-40.868 5.261Q-40.868 5.398-40.717 5.434Q-40.567 5.470-40.341 5.470L-40.341 5.750M-36.011 5.750L-37.593 5.750L-37.593 5.470Q-37.364 5.470-37.215 5.436Q-37.067 5.401-37.067 5.261L-37.067 1.642Q-37.067 1.372-37.174 1.310Q-37.282 1.249-37.593 1.249L-37.593 0.968L-36.513 0.893L-36.513 4.181L-35.529 3.412Q-35.324 3.275-35.324 3.125Q-35.324 3.081-35.365 3.046Q-35.406 3.012-35.450 3.012L-35.450 2.732L-34.086 2.732L-34.086 3.012Q-34.575 3.012-35.095 3.412L-35.652 3.846L-34.674 5.070Q-34.473 5.316-34.339 5.393Q-34.206 5.470-33.919 5.470L-33.919 5.750L-35.351 5.750L-35.351 5.470Q-35.163 5.470-35.163 5.357Q-35.163 5.261-35.317 5.070L-36.052 4.161L-36.534 4.540L-36.534 5.261Q-36.534 5.398-36.385 5.434Q-36.236 5.470-36.011 5.470",[605],[685,5543,5545,5546,5561,5562,5606],{"className":5544},[688],"Kosaraju's idea: the source SCC of ",[427,5547,5549],{"className":5548},[430],[427,5550,5552],{"className":5551,"ariaHidden":435},[434],[427,5553,5555,5558],{"className":5554},[439],[427,5556],{"className":5557,"style":778},[443],[427,5559,782],{"className":5560},[448,449]," holds the highest finish time, so the second DFS on ",[427,5563,5565],{"className":5564},[430],[427,5566,5568],{"className":5567,"ariaHidden":435},[434],[427,5569,5571,5574],{"className":5570},[439],[427,5572],{"className":5573,"style":4854},[443],[427,5575,5577,5580],{"className":5576},[448],[427,5578,782],{"className":5579},[448,449],[427,5581,5583],{"className":5582},[2463],[427,5584,5586],{"className":5585},[2467],[427,5587,5589],{"className":5588},[2472],[427,5590,5592],{"className":5591,"style":4854},[2476],[427,5593,5594,5597],{"style":4875},[427,5595],{"className":5596,"style":2485},[2484],[427,5598,5600],{"className":5599},[2489,2490,2491,2492],[427,5601,5603],{"className":5602},[448,2492],[427,5604,4889],{"className":5605},[448,4888,2492]," launches from a sink and peels one SCC at a time.",[414,5608,5610],{"type":5609},"remark",[381,5611,5612,5615,5616,5619,5620,5664,5665,5707],{},[390,5613,5614],{},"Remark (Tarjan's one-pass alternative)."," A single DFS can find SCCs by tracking, for\neach vertex, the oldest vertex reachable via tree and back edges (its\n",[385,5617,5618],{},"low-link"," value) and maintaining a stack of vertices on the current path.\nWhen a vertex's low-link equals its own discovery time, it is the root of an\nSCC, and the stack above it is popped as that component. Tarjan's method\navoids building ",[427,5621,5623],{"className":5622},[430],[427,5624,5626],{"className":5625,"ariaHidden":435},[434],[427,5627,5629,5632],{"className":5628},[439],[427,5630],{"className":5631,"style":4854},[443],[427,5633,5635,5638],{"className":5634},[448],[427,5636,782],{"className":5637},[448,449],[427,5639,5641],{"className":5640},[2463],[427,5642,5644],{"className":5643},[2467],[427,5645,5647],{"className":5646},[2472],[427,5648,5650],{"className":5649,"style":4854},[2476],[427,5651,5652,5655],{"style":4875},[427,5653],{"className":5654,"style":2485},[2484],[427,5656,5658],{"className":5657},[2489,2490,2491,2492],[427,5659,5661],{"className":5660},[448,2492],[427,5662,4889],{"className":5663},[448,4888,2492]," and also runs in ",[427,5666,5668],{"className":5667},[430],[427,5669,5671,5695],{"className":5670,"ariaHidden":435},[434],[427,5672,5674,5677,5680,5683,5686,5689,5692],{"className":5673},[439],[427,5675],{"className":5676,"style":799},[443],[427,5678,1879],{"className":5679},[448],[427,5681,804],{"className":5682},[803],[427,5684,809],{"className":5685,"style":808},[448,449],[427,5687],{"className":5688,"style":808},[519],[427,5690,1893],{"className":5691},[1892],[427,5693],{"className":5694,"style":808},[519],[427,5696,5698,5701,5704],{"className":5697},[439],[427,5699],{"className":5700,"style":799},[443],[427,5702,823],{"className":5703,"style":822},[448,449],[427,5705,828],{"className":5706},[827],"; Kosaraju's\nwins on conceptual clarity.",[409,5709,5711],{"id":5710},"takeaways","Takeaways",[5713,5714,5715,5730,5782,5793,5801],"ul",{},[5716,5717,5718,5719,5721,5722,5725,5726,5729],"li",{},"A ",[390,5720,2782],{}," is a directed graph with no cycle; it has a ",[390,5723,5724],{},"topological order","\n(every edge points forward) ",[390,5727,5728],{},"if and only if"," it is acyclic.",[5716,5731,5732,5733,5736,5737,5739,5740,753],{},"DFS detects acyclicity by the absence of ",[390,5734,5735],{},"back edges",", and listing vertices\nin ",[390,5738,1445],{}," yields a topological order in ",[427,5741,5743],{"className":5742},[430],[427,5744,5746,5770],{"className":5745,"ariaHidden":435},[434],[427,5747,5749,5752,5755,5758,5761,5764,5767],{"className":5748},[439],[427,5750],{"className":5751,"style":799},[443],[427,5753,1879],{"className":5754},[448],[427,5756,804],{"className":5757},[803],[427,5759,809],{"className":5760,"style":808},[448,449],[427,5762],{"className":5763,"style":808},[519],[427,5765,1893],{"className":5766},[1892],[427,5768],{"className":5769,"style":808},[519],[427,5771,5773,5776,5779],{"className":5772},[439],[427,5774],{"className":5775,"style":799},[443],[427,5777,823],{"className":5778,"style":822},[448,449],[427,5780,828],{"className":5781},[827],[5716,5783,5784,5785,5788,5789,5792],{},"A topological order is exactly a ",[390,5786,5787],{},"safe evaluation order"," for acyclically\ndependent quantities, predecessors first. Collapsing the Fibonacci recursion\ninto its ",[390,5790,5791],{},"evaluation DAG"," and sweeping it in topological order turns\nexponential recursion into a linear pass, the seed of dynamic programming.",[5716,5794,5795,5798,5799,753],{},[390,5796,5797],{},"Strongly connected components"," are maximal mutually-reachable vertex sets;\ncontracting them always produces a ",[390,5800,2782],{},[5716,5802,5803,5806,5807,5849,5850,5853],{},[390,5804,5805],{},"Kosaraju's"," two-pass DFS (run DFS, transpose, run DFS in decreasing finish\norder) finds all SCCs in ",[427,5808,5810],{"className":5809},[430],[427,5811,5813,5837],{"className":5812,"ariaHidden":435},[434],[427,5814,5816,5819,5822,5825,5828,5831,5834],{"className":5815},[439],[427,5817],{"className":5818,"style":799},[443],[427,5820,1879],{"className":5821},[448],[427,5823,804],{"className":5824},[803],[427,5826,809],{"className":5827,"style":808},[448,449],[427,5829],{"className":5830,"style":808},[519],[427,5832,1893],{"className":5833},[1892],[427,5835],{"className":5836,"style":808},[519],[427,5838,5840,5843,5846],{"className":5839},[439],[427,5841],{"className":5842,"style":799},[443],[427,5844,823],{"className":5845,"style":822},[448,449],[427,5847,828],{"className":5848},[827],"; ",[390,5851,5852],{},"Tarjan's"," low-link method does it\nin one pass.",[5855,5856,5859,5864],"section",{"className":5857,"dataFootnotes":376},[5858],"footnotes",[409,5860,5863],{"className":5861,"id":1197},[5862],"sr-only","Footnotes",[5865,5866,5867,5881,5935],"ol",{},[5716,5868,5870,5873,5874],{"id":5869},"user-content-fn-erickson-back",[390,5871,5872],{},"Erickson",", Ch. 6 — Depth-First Search — a digraph is acyclic iff DFS finds no back edge. ",[404,5875,5880],{"href":5876,"ariaLabel":5877,"className":5878,"dataFootnoteBackref":376},"#user-content-fnref-erickson-back","Back to reference 1",[5879],"data-footnote-backref","↩",[5716,5882,5884,5887,5888,402,5930],{"id":5883},"user-content-fn-clrs-topo",[390,5885,5886],{},"CLRS",", Ch. 22 — Elementary Graph Algorithms — topological sort by decreasing DFS finish time in ",[427,5889,5891],{"className":5890},[430],[427,5892,5894,5918],{"className":5893,"ariaHidden":435},[434],[427,5895,5897,5900,5903,5906,5909,5912,5915],{"className":5896},[439],[427,5898],{"className":5899,"style":799},[443],[427,5901,1879],{"className":5902},[448],[427,5904,804],{"className":5905},[803],[427,5907,809],{"className":5908,"style":808},[448,449],[427,5910],{"className":5911,"style":808},[519],[427,5913,1893],{"className":5914},[1892],[427,5916],{"className":5917,"style":808},[519],[427,5919,5921,5924,5927],{"className":5920},[439],[427,5922],{"className":5923,"style":799},[443],[427,5925,823],{"className":5926,"style":822},[448,449],[427,5928,828],{"className":5929},[827],[404,5931,5880],{"href":5932,"ariaLabel":5933,"className":5934,"dataFootnoteBackref":376},"#user-content-fnref-clrs-topo","Back to reference 2",[5879],[5716,5936,5938,5941,5942],{"id":5937},"user-content-fn-skiena-scc",[390,5939,5940],{},"Skiena",", §5 — Graph Traversal — finding strongly connected components via two DFS passes. ",[404,5943,5880],{"href":5944,"ariaLabel":5945,"className":5946,"dataFootnoteBackref":376},"#user-content-fnref-skiena-scc","Back to reference 3",[5879],[5948,5949,5950],"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":5952},[5953,5954,5955,5958,5961,5962],{"id":411,"depth":18,"text":412},{"id":756,"depth":18,"text":757},{"id":1185,"depth":18,"text":1186,"children":5956},[5957],{"id":2434,"depth":24,"text":2435},{"id":4151,"depth":18,"text":4152,"children":5959},[5960],{"id":4825,"depth":24,"text":4826},{"id":5710,"depth":18,"text":5711},{"id":1197,"depth":18,"text":5863},"Many problems are really questions about order. To compile a program you must\nbuild each module before the ones that depend on it; to follow a recipe you must\nchop before you sauté; to finish a degree you must clear the prerequisites of\neach course. Each of these is a directed acyclic graph, a digraph with no\ndirected cycles, and the task of find a consistent order is topological\nsorting. Depth-first search,\nwith its finish-time timestamps from the previous lesson, solves it almost\nincidentally.","md",{"moduleNumber":102,"lessonNumber":18,"order":5966},502,true,[5969,5973,5976,5979,5983],{"title":5970,"slug":5971,"difficulty":5972},"Course Schedule","course-schedule","Medium",{"title":5974,"slug":5975,"difficulty":5972},"Course Schedule II","course-schedule-ii",{"title":5977,"slug":5978,"difficulty":5972},"Find Eventual Safe States","find-eventual-safe-states",{"title":5980,"slug":5981,"difficulty":5982},"Alien Dictionary","alien-dictionary","Hard",{"title":5984,"slug":5985,"difficulty":5982},"Critical Connections in a Network","critical-connections-in-a-network","---\ntitle: Topological Sort and Strong Connectivity\nmodule: Graphs\nmoduleNumber: 5\nlessonNumber: 2\norder: 502\nsummary: >-\n  Directed acyclic graphs model dependencies: tasks that must precede other\n  tasks. A _topological order_ lays such a graph out in a line so every edge\n  points forward, and depth-first finish times hand it to us almost for free.\n  We then ask the harder question for graphs _with_ cycles: which vertices can\n  reach each other? The answer is the strongly connected components, found by a\n  two-pass DFS.\ntopics: [Graph Traversal]\nsources:\n  - book: CLRS\n    ref: \"Ch. 22 — Elementary Graph Algorithms\"\n  - book: Skiena\n    ref: \"§5 — Graph Traversal\"\n  - book: Erickson\n    ref: \"Ch. 6 — Depth-First Search\"\npractice:\n  - title: 'Course Schedule'\n    slug: course-schedule\n    difficulty: Medium\n  - title: 'Course Schedule II'\n    slug: course-schedule-ii\n    difficulty: Medium\n  - title: 'Find Eventual Safe States'\n    slug: find-eventual-safe-states\n    difficulty: Medium\n  - title: 'Alien Dictionary'\n    slug: alien-dictionary\n    difficulty: Hard\n  - title: 'Critical Connections in a Network'\n    slug: critical-connections-in-a-network\n    difficulty: Hard\n---\n\nMany problems are really questions about _order_. To compile a program you must\nbuild each module before the ones that depend on it; to follow a recipe you must\nchop before you sauté; to finish a degree you must clear the prerequisites of\neach course. Each of these is a **directed acyclic graph**, a digraph with no\ndirected cycles, and the task of \"find a consistent order\" is **topological\nsorting**. [Depth-first search](\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal),\nwith its finish-time timestamps from the previous lesson, solves it almost\nincidentally.\n\n## Directed acyclic graphs\n\n> **Definition (Directed acyclic graph).** A directed acyclic graph (DAG) is a directed graph that contains no\n> directed cycle.\n\nThe absence of cycles is exactly what makes a consistent ordering possible: if\ntask $a$ must precede $b$ and $b$ must precede $a$, no linear order can satisfy\nboth. Here is a small DAG of course prerequisites, where an edge $u \\to v$ means\n\"$u$ must come before $v$\":\n\n$$\n% caption: A small DAG of course prerequisites where an edge $u$ to $v$ means $u$ precedes\n%          $v$.\n\\begin{tikzpicture}[every node\u002F.style={circle, draw, minimum size=8mm, font=\\small},\n  node distance=16mm]\n  \\node (a) {$a$};\n  \\node (b) [right=of a] {$b$};\n  \\node (c) [right=of b] {$c$};\n  \\node (d) [below=12mm of a] {$d$};\n  \\node (e) [right=of d] {$e$};\n  \\draw[->, >=Stealth] (a) -- (b);\n  \\draw[->, >=Stealth] (b) -- (c);\n  \\draw[->, >=Stealth] (a) -- (d);\n  \\draw[->, >=Stealth] (d) -- (e);\n  \\draw[->, >=Stealth] (e) -- (c);\n  \\draw[->, >=Stealth] (b) -- (e);\n\\end{tikzpicture}\n$$\n\n## Topological order\n\n> **Definition (Topological order).** A topological order of a DAG $G = (V, E)$ is a linear ordering of its\n> vertices such that for every edge $(u, v)$, vertex $u$ appears before $v$.\n\nPicture all the vertices pinned along a horizontal line so that _every_ edge\npoints rightward. The DAG above admits the order $a, b, d, e, c$, and you can\ncheck that each of its six edges goes left to right:\n\n$$\n% caption: The DAG laid out in topological order $a, b, d, e, c$ with every edge pointing\n%          rightward.\n\\begin{tikzpicture}[every node\u002F.style={circle, draw, minimum size=8mm, font=\\small},\n  node distance=14mm]\n  \\node (a) {$a$};\n  \\node (b) [right=of a] {$b$};\n  \\node (d) [right=of b] {$d$};\n  \\node (e) [right=of d] {$e$};\n  \\node (c) [right=of e] {$c$};\n  \\draw[->, >=Stealth] (a) to[bend left=30] (b);\n  \\draw[->, >=Stealth] (a) to[bend right=30] (d);\n  \\draw[->, >=Stealth] (b) to[bend left=30] (e);\n  \\draw[->, >=Stealth] (d) to[bend right=30] (e);\n  \\draw[->, >=Stealth] (e) to[bend left=30] (c);\n  \\draw[->, >=Stealth] (b) to[bend left=42] (c);\n\\end{tikzpicture}\n$$\n\nTopological orders are usually _not_ unique; $a, d, b, e, c$ works equally well.\nTwo facts tie ordering to acyclicity:\n\n> **Theorem.** A directed graph has a topological order if and only if it is acyclic.\n\nThe forward direction is immediate: a directed cycle could never be laid out\nwith all edges pointing the same way. The converse, that every DAG _has_ such an\norder, is what the algorithm below constructs.\n\n## Topological sort via DFS finish times\n\nThe key observation, drawn out by all three texts, links acyclicity to\ndepth-first search's edge classification from the previous lesson:[^erickson-back]\n\n> **Lemma.** A directed graph is acyclic if and only if a depth-first search of\n> it produces **no back edges**.\n\nA back edge $(u, v)$ runs from $u$ to a gray ancestor $v$; the tree path from\n$v$ down to $u$ together with that edge forms a cycle. Conversely, in any cycle\nthe first vertex discovered becomes a gray ancestor of the others, so the edge\nclosing the cycle is a back edge. Since DAGs have no back edges, every edge of a\nDAG is a tree, forward, or cross edge, and for all three of those, the finish\ntimes obey $u.f > v.f$. That single inequality is the whole trick:\n\n> **Theorem.** In a DAG, for every edge $(u, v)$ we have $u.f > v.f$. Hence\n> listing vertices in order of _decreasing finish time_ yields a topological\n> order.\n\nSo we run DFS, and as each vertex finishes we push it onto the front of a list.\nWhen DFS completes, the list reads off a valid topological order.[^clrs-topo]\n\n```algorithm\ncaption: $\\textsc{Topological-Sort}(G)$ — order a DAG by DFS finish times\nnumber: 1\n$L \\gets$ empty linked list\nforeach vertex $u \\in V$ do\n  $u.color \\gets \\text{white}$\nforeach vertex $u \\in V$ do\n  if $u.color = \\text{white}$ then\n    call $\\textsc{TS-Visit}(G, u, L)$\nreturn $L$\n```\n\n```algorithm\ncaption: $\\textsc{TS-Visit}(G, u, L)$ — finish $u$, then prepend it to $L$\nnumber: 2\n$u.color \\gets \\text{gray}$\nforeach $v$ adjacent to $u$ do\n  if $v.color = \\text{white}$ then\n    call $\\textsc{TS-Visit}(G, v, L)$\n$u.color \\gets \\text{black}$\nprepend $u$ to the front of $L$ \u002F\u002F smaller finish goes later\n```\n\n**Correctness.** Consider any edge $(u, v)$. When DFS explores it, $v$ is white,\ngray, or black. It cannot be gray — that would be a back edge, impossible in a\nDAG. If $v$ is white, it becomes a descendant of $u$ and finishes first, so\n$u.f > v.f$. If $v$ is black, it already finished, so again $u.f > v.f$. In\nevery case $u$ finishes after $v$, so prepending on finish places $u$ before\n$v$ in $L$, the defining property of a topological order.\n\n**Running time.** This is just DFS plus $O(1)$ work per vertex to splice it into\nthe list, so it runs in $\\Theta(V + E)$, which is\n[linear](\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis).\n\nConcretely, run DFS on the prerequisite DAG from $a$ (ties alphabetical) and read\noff each vertex's finish time $f$. Sorting the vertices by _decreasing_ $f$ drops\nthem straight into a valid topological order — and every edge, drawn below the\nsorted line, points rightward:\n\n$$\n% caption: DFS finish times on the DAG (left); sorting by decreasing $f$ gives the\n%          topological order $a, b, d, e, c$ with all edges forward (right).\n\\begin{tikzpicture}[>=Stealth, font=\\small,\n  V\u002F.style={circle, draw, minimum size=8mm, font=\\small}]\n  \\definecolor{acc}{HTML}{2348F2}\n  % --- DAG with finish times ---\n  \\node[V] (a) at (0,1.4) {$a$};\n  \\node[V] (b) at (1.5,1.4) {$b$};\n  \\node[V] (c) at (3.0,1.4) {$c$};\n  \\node[V] (d) at (0,0) {$d$};\n  \\node[V] (e) at (1.5,0) {$e$};\n  \\draw[->] (a) -- (b); \\draw[->] (b) -- (c);\n  \\draw[->] (a) -- (d); \\draw[->] (d) -- (e);\n  \\draw[->] (e) -- (c); \\draw[->] (b) -- (e);\n  \\node[font=\\scriptsize, acc] at (0,2.1) {$f{=}10$};\n  \\node[font=\\scriptsize, acc] at (1.5,2.1) {$f{=}9$};\n  \\node[font=\\scriptsize, acc] at (3.0,2.1) {$f{=}3$};\n  \\node[font=\\scriptsize, acc] at (-0.85,-0.05) {$f{=}8$};\n  \\node[font=\\scriptsize, acc] at (1.5,-0.75) {$f{=}5$};\n  % --- divider + sorted line, pushed well below the DAG ---\n  \\node[font=\\footnotesize] at (1.7,-1.75) {decreasing finish time $\\to$ topological order};\n  \\begin{scope}[yshift=-38mm]\n    \\foreach \\v\u002F\\f\u002F\\x in {a\u002F10\u002F0, b\u002F9\u002F1.2, d\u002F8\u002F2.4, e\u002F5\u002F3.6, c\u002F3\u002F4.8} {\n      \\node[V, fill=acc!12] (\\v 2) at (\\x,0) {$\\v$};\n      \\node[font=\\scriptsize, gray] at (\\x,-0.85) {$\\f$};\n    }\n    % forward edges arced ABOVE — they nest without crossing (no interleaving pair on this side)\n    \\draw[->] (a2) to[bend left=24] (b2);\n    \\draw[->] (e2) to[bend left=24] (c2);\n    \\draw[->] (b2) to[bend left=50] (e2);   % skips d: arc high enough to clear it\n    \\draw[->] (b2) to[bend left=64] (c2);   % skips d and e: highest arc\n    % the two interleaving edges go BELOW so they never cross the above arcs\n    \\draw[->] (a2) to[bend right=52] (d2);  % skips b\n    \\draw[->] (d2) to[bend right=22] (e2);\n  \\end{scope}\n\\end{tikzpicture}\n$$\n\n### Why a topological order matters: the evaluation DAG\n\nA problem that looks unrelated brings topological order to life:\ncomputing Fibonacci numbers $F_n = F_{n-1} + F_{n-2}$. The naive recursion\n$\\textsc{Fibo}(n)$ branches into $\\textsc{Fibo}(n-1)$ and $\\textsc{Fibo}(n-2)$,\nand its call tree is exponential, but _most of its nodes are duplicates_. If we\ncollapse the identical subproblems into single nodes, the recursion tree becomes\na small **DAG**: one node per value $F_i$, with an edge $F_i \\to F_j$ whenever\ncomputing $F_i$ needs $F_j$.\n\n$$\n% caption: The Fibonacci evaluation DAG with one node per value and an edge to each needed\n%          subproblem.\n\\begin{tikzpicture}[every node\u002F.style={circle, draw, minimum size=9mm, font=\\small},\n  node distance=13mm]\n  \\node (f5) {$F_5$};\n  \\node (f4) [right=of f5] {$F_4$};\n  \\node (f3) [right=of f4] {$F_3$};\n  \\node (f2) [right=of f3] {$F_2$};\n  \\node (f1) [right=of f2] {$F_1$};\n  \\node (f0) [right=of f1] {$F_0$};\n  \\draw[->, >=Stealth] (f5) to[bend left=30] (f4);\n  \\draw[->, >=Stealth] (f5) to[bend right=34] (f3);\n  \\draw[->, >=Stealth] (f4) to[bend left=30] (f3);\n  \\draw[->, >=Stealth] (f4) to[bend right=34] (f2);\n  \\draw[->, >=Stealth] (f3) to[bend left=30] (f2);\n  \\draw[->, >=Stealth] (f3) to[bend right=34] (f1);\n  \\draw[->, >=Stealth] (f2) to[bend left=30] (f1);\n  \\draw[->, >=Stealth] (f2) to[bend right=34] (f0);\n\\end{tikzpicture}\n$$\n\nTo compute $F_n$ we must evaluate every node _after_ the nodes it points to are\nalready known, that is, **in a valid topological order of the evaluation DAG**.\nHere the order is read off by level: $F_0, F_1, F_2, \\dots, F_n$. Filling an\narray in that order computes each value with $O(1)$ work, turning exponential\nrecursion into a single linear sweep:\n\n```algorithm\ncaption: $\\textsc{Dyn-Fibo}(n)$ — evaluate the DAG in topological order\nnumber: 3\nallocate array $F[0 \\mathbin{..} n]$\n$F[0] \\gets 0$; $F[1] \\gets 1$\nfor $i \\gets 2$ to $n$ do\n  $F[i] \\gets F[i-1] + F[i-2]$ \u002F\u002F predecessors already done\nreturn $F[n]$\n```\n\nThe lesson generalizes: whenever quantities depend on one another acyclically,\ntheir dependency digraph is a DAG, and a topological order is exactly a safe\norder in which to evaluate them, predecessors first. This is the structural\nbackbone of dynamic programming, which we return to later.\n\n> **Note (The alternative).** Skiena often presents the equivalent\n> _Kahn's algorithm_: repeatedly emit a vertex of in-degree $0$ and delete it,\n> which exposes new in-degree-$0$ vertices. It also runs in $\\Theta(V + E)$ and\n> has the side benefit of _detecting_ a cycle — if vertices remain but none has\n> in-degree $0$, the graph is not a DAG.\n\nRunning Kahn's algorithm on the prerequisite DAG, $a$ is the only source. Emit\nit, and removing its edges drops $b$ and $d$ to in-degree $0$; emitting $b$ then\n$d$ frees $e$, and finally $c$. The result is the same order $a, b, d, e, c$ that\nDFS finish times produced:\n\n$$\n% caption: Kahn's algorithm on the prerequisite DAG: each vertex tagged with its\n%          in-degree; repeatedly emit an in-degree-$0$ vertex, yielding the order\n%          $\\langle a, b, d, e, c \\rangle$.\n\\begin{tikzpicture}[>=Stealth, font=\\small,\n  V\u002F.style={circle, draw, minimum size=9mm, font=\\small}]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node[V, fill=acc!20] (a) {$a$};\n  \\node[V] (b) [right=16mm of a] {$b$};\n  \\node[V] (c) [right=16mm of b] {$c$};\n  \\node[V] (d) [below=14mm of a] {$d$};\n  \\node[V] (e) [right=16mm of d] {$e$};\n  \\draw[->] (a) -- (b); \\draw[->] (b) -- (c);\n  \\draw[->] (a) -- (d); \\draw[->] (d) -- (e);\n  \\draw[->] (e) -- (c); \\draw[->] (b) -- (e);\n  \\node[font=\\scriptsize, acc] at ($(a)+(0,0.85)$) {in-deg $0$};\n  \\node[font=\\scriptsize] at ($(b)+(0,0.85)$) {$1$};\n  \\node[font=\\scriptsize] at ($(c)+(0,0.85)$) {$2$};\n  \\node[font=\\scriptsize] at ($(d)+(-0.95,0)$) {$1$};\n  \\node[font=\\scriptsize] at ($(e)+(0,-0.85)$) {$2$};\n  \\node[font=\\footnotesize] at (0.0,-3.7) {emit order:};\n  \\foreach \\v\u002F\\x in {a\u002F1.6, b\u002F2.3, d\u002F3.0, e\u002F3.7, c\u002F4.4}\n    \\node[draw, minimum size=5mm, fill=acc!12, font=\\scriptsize] at (\\x,-3.7) {$\\v$};\n\\end{tikzpicture}\n$$\n\n## Strong connectivity\n\nDAGs are the cycle-free case. What can we say about a _general_ digraph, cycles\nand all? The right notion of \"connected\" for directed graphs is mutual\nreachability.\n\n> **Definition (Strongly connected component).** Two vertices $u$ and $v$ are **strongly connected** if there is a directed\n> path from $u$ to $v$ _and_ one from $v$ to $u$. A strongly connected\n> component (SCC) is a maximal set of mutually-reachable vertices.\n\nStrong connectivity partitions $V$ into SCCs. Collapsing each component to a\nsingle super-vertex yields the **component graph** (or _condensation_), and a\nbeautiful fact holds:\n\n> **Lemma.** The component graph of any digraph is always a DAG.\n\nIf it had a cycle, the components on that cycle could all reach one another and\nwould have been merged into one larger component, contradicting maximality. So\nevery directed graph is, at the coarse level of its components, a DAG. SCCs are\nthe standard first step in analyzing a digraph: find the components, contract\nthem, and reason about the resulting DAG.\n\n$$\n% caption: A digraph with two strongly connected components $a,b$ and $c,d$ linked by\n%          edges from $a,b$ to $c,d$.\n\\begin{tikzpicture}[every node\u002F.style={circle, draw, minimum size=8mm, font=\\small},\n  node distance=15mm]\n  \\node (a) {$a$};\n  \\node (b) [right=of a] {$b$};\n  \\node (c) [below=12mm of a] {$c$};\n  \\node (d) [below=12mm of b] {$d$};\n  \\draw[->, >=Stealth] (a) to[bend left=20] (b);\n  \\draw[->, >=Stealth] (b) to[bend left=20] (a);\n  \\draw[->, >=Stealth] (b) -- (d);\n  \\draw[->, >=Stealth] (c) to[bend left=20] (d);\n  \\draw[->, >=Stealth] (d) to[bend left=20] (c);\n  \\draw[->, >=Stealth] (a) -- (c);\n\\end{tikzpicture}\n$$\n\nHere $\\set{a, b}$ form one SCC (each reaches the other) and $\\set{c, d}$ another,\nand the only edges between the two groups run from $\\set{a,b}$ to $\\set{c,d}$.\nCollapsing each component to a super-vertex leaves the two-node condensation,\nitself a DAG, with its own trivial topological order $\\set{a,b}$ then\n$\\set{c,d}$:\n\n$$\n% caption: The two-node condensation DAG with component $a,b$ pointing to component $c,d$.\n\\begin{tikzpicture}[every node\u002F.style={draw, rounded corners, minimum size=9mm, font=\\small},\n  node distance=20mm]\n  \\node (ab) {$\\set{a, b}$};\n  \\node (cd) [right=of ab] {$\\set{c, d}$};\n  \\draw[->, >=Stealth] (ab) -- (cd);\n\\end{tikzpicture}\n$$\n\n### Kosaraju's two-pass algorithm\n\nThe cleanest way to find SCCs, due to Kosaraju and Sharir, is two depth-first\nsearches with a transpose in between.[^skiena-scc] The **transpose** $G^{\\mathsf{T}}$ is $G$\nwith every edge reversed; crucially, it has _exactly the same SCCs_ as $G$,\nbecause reversing all edges does not affect mutual reachability.\n\n```algorithm\ncaption: $\\textsc{Strongly-Connected-Components}(G)$ — Kosaraju's two passes\nnumber: 4\ncall $\\textsc{DFS}(G)$ to compute the finish time $u.f$ for each vertex $u$\ncompute $G^{\\mathsf{T}}$ \u002F\u002F reverse all edges\ncall $\\textsc{DFS}(G^{\\mathsf{T}})$, considering vertices in order of decreasing $u.f$\noutput the vertices of each tree in the second forest as one SCC\n```\n\n**Why it works (the intuition).** Imagine the component graph laid out in\ntopological order, sources on the left. The _first_ DFS on $G$ assigns the\nlargest finish time to a vertex in a _source_ component of that DAG. When we\nthen run DFS on $G^{\\mathsf{T}}$, where every component-graph edge is reversed,\nand start from that highest-finishing vertex, we are launching from a _sink_\nof the reversed component graph. From a sink, the search cannot leak into any\nother component, so it visits _exactly_ one SCC and stops. Peeling components off\nin decreasing finish order keeps this true at every step. The whole procedure is\ntwo DFS passes plus a transpose, all linear, so SCCs cost $\\Theta(V + E)$.\n\nThe picture below makes the source\u002Fsink reversal concrete. The first DFS on a\ngraph with three SCCs lands the largest finish time ($12$) inside the **source**\ncomponent $\\set{a, b}$; reversing the edges turns that source into a sink, so the\nsecond DFS, launched from $a$, is trapped inside one SCC and peels it off cleanly:\n\n$$\n% caption: Kosaraju's idea: the source SCC of $G$ holds the highest finish time, so the\n%          second DFS on $G^{\\mathsf{T}}$ launches from a sink and peels one SCC at a\n%          time.\n\\begin{tikzpicture}[>=Stealth, font=\\small,\n  V\u002F.style={circle, draw, minimum size=7mm, font=\\scriptsize}]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node[font=\\footnotesize] at (2.6,2.5) {\\textbf{$G$ with DFS finish times $f$}};\n  \\draw[dashed, draw=acc, rounded corners] (-0.6,0.5) rectangle (1.8,2.0);\n  \\draw[dashed, draw=acc, rounded corners] (2.0,0.5) rectangle (4.4,2.0);\n  \\draw[dashed, draw=acc, rounded corners] (4.6,0.5) rectangle (6.0,2.0);\n  \\node[V] (a) at (0,1.4) {$a$}; \\node[V] (b) at (1.2,1.4) {$b$};\n  \\node[V] (c) at (2.6,1.4) {$c$}; \\node[V] (d) at (3.8,1.4) {$d$};\n  \\node[V] (e) at (5.3,1.4) {$e$};\n  \\draw[->] (a) to[bend left=25] (b); \\draw[->] (b) to[bend left=25] (a);\n  \\draw[->] (c) to[bend left=25] (d); \\draw[->] (d) to[bend left=25] (c);\n  \\draw[->, acc, thick] (b) -- (c); \\draw[->, acc, thick] (d) -- (e);\n  \\node[font=\\scriptsize] at (0,0.75) {$f{=}12$}; \\node[font=\\scriptsize] at (1.2,0.75) {$11$};\n  \\node[font=\\scriptsize] at (2.6,0.75) {$8$}; \\node[font=\\scriptsize] at (3.8,0.75) {$9$};\n  \\node[font=\\scriptsize] at (5.3,0.75) {$5$};\n  \\node[font=\\footnotesize] at (2.6,-1.0) {\\textbf{condensation — itself a DAG}};\n  \\node[draw, rounded corners, fill=acc!15] (C1) at (0.6,-1.9) {$\\set{a, b}$};\n  \\node[draw, rounded corners] (C2) at (2.8,-1.9) {$\\set{c, d}$};\n  \\node[draw, rounded corners] (C3) at (5.0,-1.9) {$\\set{e}$};\n  \\draw[->, thick] (C1) -- (C2); \\draw[->, thick] (C2) -- (C3);\n  \\node[font=\\scriptsize, acc] at (0.6,-2.7) {source: $f_{\\max}=12$};\n  \\node[font=\\scriptsize] at (5.0,-2.7) {sink};\n\\end{tikzpicture}\n$$\n\n> **Remark (Tarjan's one-pass alternative).** A single DFS can find SCCs by tracking, for\n> each vertex, the oldest vertex reachable via tree and back edges (its\n> _low-link_ value) and maintaining a stack of vertices on the current path.\n> When a vertex's low-link equals its own discovery time, it is the root of an\n> SCC, and the stack above it is popped as that component. Tarjan's method\n> avoids building $G^{\\mathsf{T}}$ and also runs in $\\Theta(V + E)$; Kosaraju's\n> wins on conceptual clarity.\n\n## Takeaways\n\n- A **DAG** is a directed graph with no cycle; it has a **topological order**\n  (every edge points forward) **if and only if** it is acyclic.\n- DFS detects acyclicity by the absence of **back edges**, and listing vertices\n  in **decreasing finish time** yields a topological order in $\\Theta(V + E)$.\n- A topological order is exactly a **safe evaluation order** for acyclically\n  dependent quantities, predecessors first. Collapsing the Fibonacci recursion\n  into its **evaluation DAG** and sweeping it in topological order turns\n  exponential recursion into a linear pass, the seed of dynamic programming.\n- **Strongly connected components** are maximal mutually-reachable vertex sets;\n  contracting them always produces a **DAG**.\n- **Kosaraju's** two-pass DFS (run DFS, transpose, run DFS in decreasing finish\n  order) finds all SCCs in $\\Theta(V + E)$; **Tarjan's** low-link method does it\n  in one pass.\n\n[^erickson-back]: **Erickson**, Ch. 6 — Depth-First Search — a digraph is acyclic iff DFS finds no back edge.\n[^clrs-topo]: **CLRS**, Ch. 22 — Elementary Graph Algorithms — topological sort by decreasing DFS finish time in $\\Theta(V + E)$.\n[^skiena-scc]: **Skiena**, §5 — Graph Traversal — finding strongly connected components via two DFS passes.\n",{"text":5988,"minutes":5989,"time":5990,"words":5991},"9 min read",8.29,497400,1658,{"title":164,"description":5963},[5994,5996,5998],{"book":5886,"ref":5995},"Ch. 22 — Elementary Graph Algorithms",{"book":5940,"ref":5997},"§5 — Graph Traversal",{"book":5872,"ref":5999},"Ch. 6 — Depth-First Search","available","01.algorithms\u002F06.graphs\u002F02.topological-sort-and-scc",[161],"SrPHNFoxejywnKbZ_MoJEm4pV24-tXo6ZHKbtSvMvNk",{"\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm":6005,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":6006,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":6007,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":6008,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":6009,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":6010,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":6011,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":6012,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":6013,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":6014,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":6015,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":6016,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":6017,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":6018,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":6019,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":6020,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":6021,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":6022,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":6023,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":6024,"\u002Falgorithms\u002Fsequences\u002Ftries":6025,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":6026,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":5991,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":6027,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":6028,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":6029,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":6030,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":6031,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":6032,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":6033,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":6034,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":6035,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":6036,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":6037,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":6038,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":6039,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":6040,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":6041,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":6042,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":6043,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":6044,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":6045,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":6046,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":6047,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":6048,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":6049,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":6050,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":6021,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":6051,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":6052,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":6053,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":6054,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":6036,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":6055,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":6056,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":6017,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":6057,"\u002Falgorithms":6058,"\u002Ftheory-of-computation":6059,"\u002Fcomputer-architecture":6059,"\u002Fphysical-computing":6059,"\u002Fdatabases":6059,"\u002Fdeep-learning":6059},1763,2107,1738,2628,1723,2048,1697,1044,1542,1565,1679,1586,1388,1465,1971,1455,1533,1483,1578,1791,1481,2704,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":6061,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":6062,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":6063,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":6064,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":6065,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":6066,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":6067,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":6068,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":6069,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":6070,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":6071,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":6072,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":6073,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":6074,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":6075,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":6076,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":6077,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":6078,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":6079,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":6080,"\u002Falgorithms\u002Fsequences\u002Ftries":6081,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":6082,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":6083,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":6084,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":6085,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":6086,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":6087,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":6088,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":6089,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":6090,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":6091,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":6092,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":6093,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":6094,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":6095,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":6096,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":6097,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":6098,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":6099,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":6100,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":6101,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":6102,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":6103,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":6104,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":6105,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":6106,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":6107,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":6108,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":6109,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":6110,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":6111,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":6112,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":6113,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":6114,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":6115,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":6116,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":6117,"\u002Falgorithms":6118,"\u002Ftheory-of-computation":6121,"\u002Fcomputer-architecture":6124,"\u002Fphysical-computing":6127,"\u002Fdatabases":6130,"\u002Fdeep-learning":6133},{"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":6119,"title":6120,"module":376,"summary":376},"\u002Falgorithms","Algorithms",{"path":6122,"title":6123,"module":376,"summary":376},"\u002Ftheory-of-computation","Theory of Computation",{"path":6125,"title":6126,"module":376,"summary":376},"\u002Fcomputer-architecture","Computer Architecture",{"path":6128,"title":6129,"module":376,"summary":376},"\u002Fphysical-computing","Physical Computing",{"path":6131,"title":6132,"module":376,"summary":376},"\u002Fdatabases","Databases",{"path":6134,"title":6135,"module":376,"summary":376},"\u002Fdeep-learning","Deep Learning",1781560524024]