[{"data":1,"prerenderedAt":4360},["ShallowReactive",2],{"nav:algorithms":3,"lesson:\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":374,"course-wordcounts":4228,"ref-card-index":4284},[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":200,"blurb":376,"body":377,"description":4196,"extension":4197,"meta":4198,"module":153,"navigation":4200,"path":201,"practice":4201,"rawbody":4210,"readingTime":4211,"seo":4216,"sources":4217,"status":4224,"stem":4225,"summary":204,"topics":4226,"__hash__":4227},"course\u002F01.algorithms\u002F06.graphs\u002F09.eulerian-tours.md","",{"type":378,"value":379,"toc":4189},"minimark",[380,404,434,559,564,630,729,901,936,1179,1182,1501,1625,1831,2128,2132,2145,2227,2357,2730,2745,2821,3070,3074,3184,3493,3814,3821,3825,4134,4185],[381,382,383,384,388,389,393,394,398,399,403],"p",{},"The traversals of the previous lessons were about ",[385,386,387],"em",{},"reaching"," vertices: BFS and\n",[390,391,392],"a",{"href":158},"DFS"," each touch every vertex\nonce and impose no constraint on how often an edge is\nused. This lesson turns the question inside out. We ask for a walk that crosses\n",[395,396,397],"strong",{},"every edge exactly once",": the problem Euler posed in 1736 for the seven\nbridges of Königsberg, and the historical seed of graph theory itself. Unlike\nmost ",[400,401,402],"q",{},"use everything exactly once"," problems, this\none has a clean local characterization and a linear-time algorithm.",[405,406,408],"callout",{"type":407},"definition",[381,409,410,413,414,417,418,421,422,425,426,429,430,433],{},[395,411,412],{},"Definition."," An ",[395,415,416],{},"Eulerian path"," is a walk that uses every edge of the\ngraph ",[385,419,420],{},"exactly once",". An ",[395,423,424],{},"Eulerian circuit"," (or ",[385,427,428],{},"Eulerian tour",") is an\nEulerian path that starts and ends at the same vertex — a ",[385,431,432],{},"closed"," one.",[381,435,436,437,440,441,444,445,448,449,452,453,494,495,497,498,501,502,524,525,544,545,555,556],{},"It is worth fixing the contrast that gives the lesson its shape. An Eulerian tour\nconstrains ",[395,438,439],{},"edges","; its near-twin, the ",[395,442,443],{},"Hamiltonian"," tour, constrains\n",[395,446,447],{},"vertices",", visiting every ",[385,450,451],{},"vertex"," exactly once. The two look like mirror images,\nbut they sit on opposite sides of the great divide in algorithms. Deciding\nwhether an Eulerian tour exists, and building one, takes ",[454,455,458],"span",{"className":456},[457],"katex",[454,459,463],{"className":460,"ariaHidden":462},[461],"katex-html","true",[454,464,467,472,479,484,489],{"className":465},[466],"base",[454,468],{"className":469,"style":471},[470],"strut","height:1em;vertical-align:-0.25em;",[454,473,478],{"className":474,"style":477},[475,476],"mord","mathnormal","margin-right:0.0278em;","O",[454,480,483],{"className":481},[482],"mopen","(",[454,485,488],{"className":486,"style":487},[475,476],"margin-right:0.0576em;","E",[454,490,493],{"className":491},[492],"mclose",")"," time, as we will\nsee. Deciding whether a ",[395,496,443],{}," cycle exists is ",[395,499,500],{},"NP-complete",": no\npolynomial algorithm is known, and finding one would settle ",[454,503,505],{"className":504},[457],[454,506,508],{"className":507,"ariaHidden":462},[461],[454,509,511,515],{"className":510},[466],[454,512],{"className":513,"style":514},[470],"height:0.6944em;",[454,516,519],{"className":517},[475,518],"text",[454,520,523],{"className":521},[475,522],"textsf","P"," vs\n",[454,526,528],{"className":527},[457],[454,529,531],{"className":530,"ariaHidden":462},[461],[454,532,534,537],{"className":533},[466],[454,535],{"className":536,"style":514},[470],[454,538,540],{"className":539},[475,518],[454,541,543],{"className":542},[475,522],"NP"," (we return to intractability in a later module).",[546,547,548],"sup",{},[390,549,554],{"href":550,"ariaDescribedBy":551,"dataFootnoteRef":376,"id":553},"#user-content-fn-erickson-euler",[552],"footnote-label","user-content-fnref-erickson-euler","1","\nThe slogan to remember: ",[395,557,558],{},"visiting every edge is easy; visiting every vertex is\nhard.",[560,561,563],"h2",{"id":562},"when-does-an-eulerian-tour-exist","When does an Eulerian tour exist?",[381,565,566,567,570,571,589,590,593,594,609,610,613,614,629],{},"The existence test is pure local arithmetic on degrees. The intuition is a single\n",[395,568,569],{},"parity argument",": think of walking through the tour and watching one fixed\nvertex ",[454,572,574],{"className":573},[457],[454,575,577],{"className":576,"ariaHidden":462},[461],[454,578,580,584],{"className":579},[466],[454,581],{"className":582,"style":583},[470],"height:0.4306em;",[454,585,588],{"className":586,"style":587},[475,476],"margin-right:0.0359em;","v",". Every time the walk ",[385,591,592],{},"passes through"," ",[454,595,597],{"className":596},[457],[454,598,600],{"className":599,"ariaHidden":462},[461],[454,601,603,606],{"className":602},[466],[454,604],{"className":605,"style":583},[470],[454,607,588],{"className":608,"style":587},[475,476]," it arrives on one edge and\nleaves on another, consuming a ",[385,611,612],{},"pair"," of edges incident to ",[454,615,617],{"className":616},[457],[454,618,620],{"className":619,"ariaHidden":462},[461],[454,621,623,626],{"className":622},[466],[454,624],{"className":625,"style":583},[470],[454,627,588],{"className":628,"style":587},[475,476],". So the edges at\nan interior vertex must come in pairs.",[405,631,633],{"type":632},"theorem",[381,634,635,638,639,656,657,672,673,675,676,679,680,683,684,686,687,724,725,728],{},[395,636,637],{},"Theorem (undirected)."," Let ",[454,640,642],{"className":641},[457],[454,643,645],{"className":644,"ariaHidden":462},[461],[454,646,648,652],{"className":647},[466],[454,649],{"className":650,"style":651},[470],"height:0.6833em;",[454,653,655],{"className":654},[475,476],"G"," be connected when isolated vertices are\nignored. Then ",[454,658,660],{"className":659},[457],[454,661,663],{"className":662,"ariaHidden":462},[461],[454,664,666,669],{"className":665},[466],[454,667],{"className":668,"style":651},[470],[454,670,655],{"className":671},[475,476]," has an ",[395,674,424],{}," iff ",[385,677,678],{},"every"," vertex has ",[395,681,682],{},"even\ndegree",". It has an ",[395,685,416],{}," (open) iff ",[395,688,689,690,707,708],{},"exactly ",[454,691,693],{"className":692},[457],[454,694,696],{"className":695,"ariaHidden":462},[461],[454,697,699,703],{"className":698},[466],[454,700],{"className":701,"style":702},[470],"height:0.6444em;",[454,704,706],{"className":705},[475],"0"," or ",[454,709,711],{"className":710},[457],[454,712,714],{"className":713,"ariaHidden":462},[461],[454,715,717,720],{"className":716},[466],[454,718],{"className":719,"style":702},[470],[454,721,723],{"className":722},[475],"2","\nvertices have ",[395,726,727],{},"odd degree","; when there are two, they are the only possible\nendpoints.",[405,730,732],{"type":731},"proof",[381,733,734,737,738,753,754,769,770,772,773,788,789,819,820,835,836,839,840,707,855,870,871,593,878],{},[395,735,736],{},"Proof sketch (necessity)."," Fix the tour and a vertex ",[454,739,741],{"className":740},[457],[454,742,744],{"className":743,"ariaHidden":462},[461],[454,745,747,750],{"className":746},[466],[454,748],{"className":749,"style":583},[470],[454,751,588],{"className":752,"style":587},[475,476],". Each passage through\n",[454,755,757],{"className":756},[457],[454,758,760],{"className":759,"ariaHidden":462},[461],[454,761,763,766],{"className":762},[466],[454,764],{"className":765,"style":583},[470],[454,767,588],{"className":768,"style":587},[475,476]," uses two of its incident edges. If the tour is closed, ",[385,771,678],{}," visit to ",[454,774,776],{"className":775},[457],[454,777,779],{"className":778,"ariaHidden":462},[461],[454,780,782,785],{"className":781},[466],[454,783],{"className":784,"style":583},[470],[454,786,588],{"className":787,"style":587},[475,476],",\nincluding the start, where it leaves and later returns, is a through-passage, so\n",[454,790,792],{"className":791},[457],[454,793,795],{"className":794,"ariaHidden":462},[461],[454,796,798,801,810,813,816],{"className":797},[466],[454,799],{"className":800,"style":471},[470],[454,802,805,806],{"className":803},[804],"mop","de",[454,807,809],{"style":808},"margin-right:0.0139em;","g",[454,811,483],{"className":812},[482],[454,814,588],{"className":815,"style":587},[475,476],[454,817,493],{"className":818},[492]," is even for all ",[454,821,823],{"className":822},[457],[454,824,826],{"className":825,"ariaHidden":462},[461],[454,827,829,832],{"className":828},[466],[454,830],{"className":831,"style":583},[470],[454,833,588],{"className":834,"style":587},[475,476],". If the tour is open, the same pairing holds at\nevery vertex ",[385,837,838],{},"except"," the two endpoints, where one unpaired edge (the very first\ndeparture, the very last arrival) leaves an odd count. Hence at most two odd\nvertices, and a hand-shaking count forces the number of odd-degree vertices to be\neven, so it is ",[454,841,843],{"className":842},[457],[454,844,846],{"className":845,"ariaHidden":462},[461],[454,847,849,852],{"className":848},[466],[454,850],{"className":851,"style":702},[470],[454,853,706],{"className":854},[475],[454,856,858],{"className":857},[457],[454,859,861],{"className":860,"ariaHidden":462},[461],[454,862,864,867],{"className":863},[466],[454,865],{"className":866,"style":702},[470],[454,868,723],{"className":869},[475],". Sufficiency is exactly what Hierholzer's algorithm\nbelow constructs.",[546,872,873],{},[390,874,723],{"href":875,"ariaDescribedBy":876,"dataFootnoteRef":376,"id":877},"#user-content-fn-skiena-euler",[552],"user-content-fnref-skiena-euler",[454,879,881],{"className":880},[457],[454,882,884],{"className":883,"ariaHidden":462},[461],[454,885,887,891],{"className":886},[466],[454,888],{"className":889,"style":890},[470],"height:0.675em;",[454,892,896],{"className":893},[894,895],"enclosing","qed",[454,897,900],{"className":898},[475,899],"amsrm","□",[381,902,903,904,907,908,911,912,927,928,931,932,935],{},"For ",[395,905,906],{},"directed"," graphs the parity condition sharpens into a ",[385,909,910],{},"balance"," condition,\nbecause each edge now has a direction: a through-passage at ",[454,913,915],{"className":914},[457],[454,916,918],{"className":917,"ariaHidden":462},[461],[454,919,921,924],{"className":920},[466],[454,922],{"className":923,"style":583},[470],[454,925,588],{"className":926,"style":587},[475,476]," consumes one\n",[385,929,930],{},"incoming"," and one ",[385,933,934],{},"outgoing"," edge.",[405,937,938],{"type":632},[381,939,940,943,944,959,960,672,975,977,978,683,1041,1043,1044,1110,1111,1114,1115,1110,1175,1178],{},[395,941,942],{},"Theorem (directed)."," Let the edges of ",[454,945,947],{"className":946},[457],[454,948,950],{"className":949,"ariaHidden":462},[461],[454,951,953,956],{"className":952},[466],[454,954],{"className":955,"style":651},[470],[454,957,655],{"className":958},[475,476]," form a single connected component\n(every vertex with an edge is reachable in the underlying undirected sense).\nThen ",[454,961,963],{"className":962},[457],[454,964,966],{"className":965,"ariaHidden":462},[461],[454,967,969,972],{"className":968},[466],[454,970],{"className":971,"style":651},[470],[454,973,655],{"className":974},[475,476],[395,976,424],{}," iff every vertex has\n",[454,979,981],{"className":980},[457],[454,982,984,1019],{"className":983,"ariaHidden":462},[461],[454,985,987,990,997,1000,1003,1006,1011,1016],{"className":986},[466],[454,988],{"className":989,"style":471},[470],[454,991,993],{"className":992},[475,518],[454,994,996],{"className":995},[475],"in-deg",[454,998,483],{"className":999},[482],[454,1001,588],{"className":1002,"style":587},[475,476],[454,1004,493],{"className":1005},[492],[454,1007],{"className":1008,"style":1010},[1009],"mspace","margin-right:0.2778em;",[454,1012,1015],{"className":1013},[1014],"mrel","=",[454,1017],{"className":1018,"style":1010},[1009],[454,1020,1022,1025,1032,1035,1038],{"className":1021},[466],[454,1023],{"className":1024,"style":471},[470],[454,1026,1028],{"className":1027},[475,518],[454,1029,1031],{"className":1030},[475],"out-deg",[454,1033,483],{"className":1034},[482],[454,1036,588],{"className":1037,"style":587},[475,476],[454,1039,493],{"className":1040},[492],[395,1042,416],{}," iff exactly\none vertex has ",[454,1045,1047],{"className":1046},[457],[454,1048,1050,1075,1096],{"className":1049,"ariaHidden":462},[461],[454,1051,1053,1057,1063,1067,1072],{"className":1052},[466],[454,1054],{"className":1055,"style":1056},[470],"height:0.8889em;vertical-align:-0.1944em;",[454,1058,1060],{"className":1059},[475,518],[454,1061,1031],{"className":1062},[475],[454,1064],{"className":1065,"style":1066},[1009],"margin-right:0.2222em;",[454,1068,1071],{"className":1069},[1070],"mbin","−",[454,1073],{"className":1074,"style":1066},[1009],[454,1076,1078,1081,1087,1090,1093],{"className":1077},[466],[454,1079],{"className":1080,"style":1056},[470],[454,1082,1084],{"className":1083},[475,518],[454,1085,996],{"className":1086},[475],[454,1088],{"className":1089,"style":1010},[1009],[454,1091,1015],{"className":1092},[1014],[454,1094],{"className":1095,"style":1010},[1009],[454,1097,1099,1103,1107],{"className":1098},[466],[454,1100],{"className":1101,"style":1102},[470],"height:0.7278em;vertical-align:-0.0833em;",[454,1104,1106],{"className":1105},[475],"+",[454,1108,554],{"className":1109},[475]," (the ",[395,1112,1113],{},"start","), exactly\none has ",[454,1116,1118],{"className":1117},[457],[454,1119,1121,1142,1163],{"className":1120,"ariaHidden":462},[461],[454,1122,1124,1127,1133,1136,1139],{"className":1123},[466],[454,1125],{"className":1126,"style":1056},[470],[454,1128,1130],{"className":1129},[475,518],[454,1131,996],{"className":1132},[475],[454,1134],{"className":1135,"style":1066},[1009],[454,1137,1071],{"className":1138},[1070],[454,1140],{"className":1141,"style":1066},[1009],[454,1143,1145,1148,1154,1157,1160],{"className":1144},[466],[454,1146],{"className":1147,"style":1056},[470],[454,1149,1151],{"className":1150},[475,518],[454,1152,1031],{"className":1153},[475],[454,1155],{"className":1156,"style":1010},[1009],[454,1158,1015],{"className":1159},[1014],[454,1161],{"className":1162,"style":1010},[1009],[454,1164,1166,1169,1172],{"className":1165},[466],[454,1167],{"className":1168,"style":1102},[470],[454,1170,1106],{"className":1171},[475],[454,1173,554],{"className":1174},[475],[395,1176,1177],{},"end","), and every other\nvertex is balanced.",[381,1180,1181],{},"The two extra-edge vertices are forced: a start emits one more edge than it\nabsorbs, an end absorbs one more than it emits, and everyone the walk merely\npasses through breaks even. Connectivity is the second, easily-forgotten half of\nthe test: degrees can balance perfectly while the edges split into two disjoint\nloops, which no single walk can join.",[1183,1184,1188,1305],"figure",{"className":1185},[1186,1187],"tikz-figure","tikz-diagram-rendered",[1189,1190,1195],"svg",{"xmlns":1191,"width":1192,"height":1193,"viewBox":1194},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","238.238","114.849","-75 -75 178.678 86.137",[809,1196,1199,1217,1220,1227,1230,1237,1249,1252,1255,1258,1261,1264,1267,1270,1273,1291],{"stroke":1197,"style":1198},"currentColor","stroke-miterlimit:10;stroke-width:.4",[809,1200,1203,1208],{"stroke":1201,"style":1202},"var(--tk-accent)","stroke-width:.8",[1204,1205],"path",{"fill":1206,"d":1207},"none","M-39.726-35.082c0-6.285-5.096-11.38-11.381-11.38s-11.382 5.095-11.382 11.38S-57.393-23.7-51.107-23.7s11.38-5.095 11.38-11.38Zm-11.381 0",[809,1209,1211],{"transform":1210},"translate(-2.154 1.937)",[1204,1212],{"d":1213,"fill":1201,"stroke":1201,"className":1214,"style":1216},"M-50.272-35.631Q-50.052-35.245-49.296-35.245Q-48.998-35.245-48.703-35.346Q-48.409-35.447-48.215-35.660Q-48.022-35.873-48.022-36.181Q-48.022-36.409-48.200-36.556Q-48.378-36.704-48.624-36.756L-49.134-36.853Q-49.349-36.893-49.525-37.016Q-49.701-37.139-49.806-37.325Q-49.912-37.512-49.912-37.728Q-49.912-38.127-49.688-38.433Q-49.463-38.738-49.105-38.899Q-48.747-39.059-48.343-39.059Q-48.079-39.059-47.831-38.980Q-47.583-38.901-47.413-38.721Q-47.244-38.540-47.244-38.277Q-47.244-38.070-47.365-37.912Q-47.486-37.754-47.697-37.754Q-47.820-37.754-47.906-37.835Q-47.991-37.916-47.991-38.035Q-47.991-38.198-47.868-38.332Q-47.745-38.466-47.587-38.466Q-47.675-38.646-47.892-38.723Q-48.110-38.800-48.360-38.800Q-48.602-38.800-48.828-38.712Q-49.055-38.624-49.200-38.455Q-49.345-38.286-49.345-38.035Q-49.345-37.859-49.213-37.741Q-49.081-37.622-48.883-37.574L-48.378-37.477Q-47.991-37.398-47.723-37.128Q-47.455-36.857-47.455-36.475Q-47.455-36.145-47.644-35.825Q-47.833-35.504-48.110-35.306Q-48.611-34.981-49.305-34.981Q-49.617-34.981-49.918-35.067Q-50.219-35.152-50.424-35.350Q-50.628-35.548-50.628-35.855Q-50.628-36.106-50.485-36.290Q-50.342-36.475-50.101-36.475Q-49.947-36.475-49.848-36.383Q-49.749-36.290-49.749-36.145Q-49.749-35.935-49.901-35.783Q-50.052-35.631-50.272-35.631",[1215],"tikz-text","stroke-width:0.270",[1204,1218],{"fill":1206,"d":1219},"M17.18-35.082c0-6.285-5.096-11.38-11.382-11.38s-11.381 5.095-11.381 11.38S-.488-23.7 5.798-23.7s11.381-5.095 11.381-11.38Zm-11.382 0",[809,1221,1223],{"transform":1222},"translate(54.455 1.937)",[1204,1224],{"d":1225,"fill":1197,"stroke":1197,"className":1226,"style":1216},"M-49.485-34.981Q-49.881-34.981-50.167-35.185Q-50.452-35.390-50.599-35.724Q-50.747-36.058-50.747-36.449Q-50.747-36.884-50.573-37.345Q-50.399-37.807-50.087-38.198Q-49.775-38.589-49.365-38.824Q-48.954-39.059-48.514-39.059Q-48.246-39.059-48.029-38.921Q-47.811-38.782-47.679-38.536Q-47.640-38.686-47.532-38.782Q-47.424-38.879-47.284-38.879Q-47.161-38.879-47.077-38.806Q-46.994-38.734-46.994-38.611Q-46.994-38.558-47.003-38.527L-47.622-36.036Q-47.679-35.838-47.679-35.640Q-47.679-35.245-47.416-35.245Q-47.130-35.245-46.996-35.568Q-46.862-35.891-46.743-36.396Q-46.734-36.427-46.710-36.451Q-46.686-36.475-46.651-36.475L-46.545-36.475Q-46.497-36.475-46.475-36.442Q-46.453-36.409-46.453-36.361Q-46.567-35.930-46.658-35.677Q-46.748-35.425-46.941-35.203Q-47.134-34.981-47.433-34.981Q-47.741-34.981-47.989-35.152Q-48.237-35.324-48.308-35.614Q-48.563-35.328-48.859-35.155Q-49.156-34.981-49.485-34.981M-49.468-35.245Q-49.138-35.245-48.828-35.486Q-48.519-35.728-48.308-36.044Q-48.299-36.053-48.299-36.071L-47.802-38.035Q-47.859-38.352-48.051-38.576Q-48.242-38.800-48.532-38.800Q-48.901-38.800-49.200-38.481Q-49.499-38.163-49.666-37.754Q-49.802-37.407-49.927-36.897Q-50.052-36.387-50.052-36.062Q-50.052-35.737-49.914-35.491Q-49.775-35.245-49.468-35.245",[1215],[1204,1228],{"fill":1206,"d":1229},"M74.085-60.689c0-6.286-5.096-11.381-11.382-11.381s-11.38 5.095-11.38 11.381 5.095 11.381 11.38 11.381 11.382-5.095 11.382-11.38Zm-11.382 0",[809,1231,1233],{"transform":1232},"translate(111.829 -22.482)",[1204,1234],{"d":1235,"fill":1197,"stroke":1197,"className":1236,"style":1216},"M-49.485-34.981Q-50.061-34.981-50.382-35.412Q-50.703-35.842-50.703-36.422Q-50.703-36.827-50.619-37.055L-49.740-40.553Q-49.705-40.703-49.705-40.777Q-49.705-40.914-50.272-40.914Q-50.369-40.914-50.369-41.032Q-50.369-41.089-50.338-41.160Q-50.307-41.230-50.241-41.230L-49.020-41.327Q-48.967-41.327-48.934-41.298Q-48.901-41.270-48.901-41.221L-48.901-41.186L-49.560-38.576Q-49.037-39.059-48.514-39.059Q-48.128-39.059-47.837-38.855Q-47.547-38.650-47.400-38.316Q-47.253-37.982-47.253-37.591Q-47.253-37.007-47.556-36.398Q-47.859-35.790-48.380-35.385Q-48.901-34.981-49.485-34.981M-49.468-35.245Q-49.099-35.245-48.795-35.568Q-48.492-35.891-48.334-36.286Q-48.189-36.642-48.068-37.150Q-47.947-37.657-47.947-37.978Q-47.947-38.303-48.092-38.551Q-48.237-38.800-48.532-38.800Q-49.134-38.800-49.705-38L-49.947-37.007Q-50.092-36.383-50.092-36.119Q-50.092-35.776-49.940-35.510Q-49.789-35.245-49.468-35.245",[1215],[809,1238,1239,1242],{"stroke":1201,"style":1202},[1204,1240],{"fill":1206,"d":1241},"M74.085-9.474c0-6.286-5.096-11.381-11.382-11.381s-11.38 5.095-11.38 11.38 5.095 11.382 11.38 11.382S74.085-3.19 74.085-9.474Zm-11.382 0",[809,1243,1245],{"transform":1244},"translate(112.14 28.375)",[1204,1246],{"d":1247,"fill":1201,"stroke":1201,"className":1248,"style":1216},"M-50.523-35.820Q-50.523-35.952-50.496-36.071L-49.846-38.646L-50.791-38.646Q-50.900-38.646-50.900-38.765Q-50.900-38.826-50.867-38.894Q-50.835-38.962-50.773-38.962L-49.775-38.962L-49.415-40.399Q-49.380-40.540-49.268-40.628Q-49.156-40.716-49.020-40.716Q-48.897-40.716-48.813-40.641Q-48.730-40.566-48.730-40.448Q-48.730-40.391-48.738-40.364L-49.090-38.962L-48.163-38.962Q-48.114-38.962-48.086-38.929Q-48.057-38.896-48.057-38.853Q-48.057-38.787-48.090-38.716Q-48.123-38.646-48.180-38.646L-49.165-38.646L-49.819-36.036Q-49.872-35.833-49.872-35.640Q-49.872-35.245-49.613-35.245Q-49.332-35.245-49.101-35.425Q-48.870-35.605-48.699-35.877Q-48.527-36.150-48.426-36.414Q-48.418-36.440-48.396-36.457Q-48.374-36.475-48.343-36.475L-48.237-36.475Q-48.189-36.475-48.167-36.442Q-48.145-36.409-48.145-36.361Q-48.286-36.018-48.497-35.704Q-48.708-35.390-48.993-35.185Q-49.279-34.981-49.630-34.981Q-49.881-34.981-50.083-35.086Q-50.285-35.192-50.404-35.383Q-50.523-35.574-50.523-35.820",[1215],[1204,1250],{"fill":1206,"d":1251},"M-39.326-35.082h31.543",[1204,1253],{"stroke":1206,"d":1254},"m-5.783-35.082-3.2-1.6 1.2 1.6-1.2 1.6",[1204,1256],{"fill":1206,"d":1257},"M12.568-44.477c9.667-13.418 22.16-19.04 36.624-17.578",[1204,1259],{"stroke":1206,"d":1260},"m51.182-61.853-3.023-1.914 1.033 1.712-1.355 1.472",[1204,1262],{"fill":1206,"d":1263},"M55.934-51.293c-9.667 13.418-22.16 19.04-36.624 17.577",[1204,1265],{"stroke":1206,"d":1266},"m17.32-33.917 3.023 1.913-1.033-1.712 1.354-1.471",[1204,1268],{"fill":1206,"d":1269},"m16.359-30.33 33.778 15.2",[1204,1271],{"stroke":1206,"d":1272},"M51.96-14.309 49.7-17.08l.437 1.952-1.751.966",[809,1274,1277,1285],{"fill":1201,"stroke":1206,"fontFamily":1275,"fontSize":1276},"cmr8","8",[809,1278,1280],{"transform":1279},"translate(-12.986 30.614)",[1204,1281],{"d":1282,"fill":1201,"stroke":1201,"className":1283,"style":1284},"M-47.986-36.898L-50.459-36.898Q-50.537-36.910-50.586-36.959Q-50.634-37.008-50.634-37.082Q-50.634-37.156-50.586-37.205Q-50.537-37.254-50.459-37.266L-47.986-37.266L-47.986-39.746Q-47.959-39.914-47.802-39.914Q-47.728-39.914-47.679-39.865Q-47.630-39.816-47.619-39.746L-47.619-37.266L-45.146-37.266Q-44.978-37.234-44.978-37.082Q-44.978-36.930-45.146-36.898L-47.619-36.898L-47.619-34.418Q-47.630-34.348-47.679-34.299Q-47.728-34.250-47.802-34.250Q-47.959-34.250-47.986-34.418L-47.986-36.898M-40.904-35.082L-43.697-35.082L-43.697-35.379Q-42.634-35.379-42.634-35.641L-42.634-39.809Q-43.064-39.594-43.744-39.594L-43.744-39.891Q-42.724-39.891-42.209-40.402L-42.064-40.402Q-41.990-40.383-41.970-40.305L-41.970-35.641Q-41.970-35.379-40.904-35.379",[1215],"stroke-width:0.240",[809,1286,1287],{"transform":1279},[1204,1288],{"d":1289,"fill":1201,"stroke":1201,"className":1290,"style":1284},"M-37.175-36.777Q-37.175-37.281-36.919-37.713Q-36.663-38.145-36.227-38.396Q-35.792-38.648-35.292-38.648Q-34.905-38.648-34.563-38.504Q-34.222-38.359-33.960-38.098Q-33.698-37.836-33.556-37.500Q-33.413-37.164-33.413-36.777Q-33.413-36.285-33.677-35.875Q-33.940-35.465-34.370-35.234Q-34.800-35.004-35.292-35.004Q-35.784-35.004-36.218-35.236Q-36.651-35.469-36.913-35.877Q-37.175-36.285-37.175-36.777M-35.292-35.281Q-34.835-35.281-34.583-35.504Q-34.331-35.727-34.243-36.078Q-34.155-36.430-34.155-36.875Q-34.155-37.305-34.249-37.643Q-34.343-37.980-34.597-38.187Q-34.850-38.395-35.292-38.395Q-35.940-38.395-36.184-37.978Q-36.429-37.562-36.429-36.875Q-36.429-36.430-36.341-36.078Q-36.253-35.727-36.001-35.504Q-35.749-35.281-35.292-35.281M-32.245-36.035L-32.245-37.777Q-32.245-37.992-32.308-38.088Q-32.370-38.184-32.489-38.205Q-32.608-38.227-32.854-38.227L-32.854-38.523L-31.608-38.609L-31.608-36.059L-31.608-36.035Q-31.608-35.723-31.554-35.561Q-31.499-35.398-31.349-35.328Q-31.198-35.258-30.878-35.258Q-30.448-35.258-30.175-35.596Q-29.901-35.934-29.901-36.379L-29.901-37.777Q-29.901-37.992-29.964-38.088Q-30.026-38.184-30.145-38.205Q-30.265-38.227-30.511-38.227L-30.511-38.523L-29.265-38.609L-29.265-35.824Q-29.265-35.613-29.202-35.518Q-29.140-35.422-29.020-35.400Q-28.901-35.379-28.655-35.379L-28.655-35.082L-29.878-35.004L-29.878-35.625Q-30.046-35.336-30.327-35.170Q-30.608-35.004-30.929-35.004Q-32.245-35.004-32.245-36.035M-27.585-36.043L-27.585-38.234L-28.288-38.234L-28.288-38.488Q-27.933-38.488-27.690-38.721Q-27.448-38.953-27.337-39.301Q-27.225-39.648-27.225-40.004L-26.944-40.004L-26.944-38.531L-25.768-38.531L-25.768-38.234L-26.944-38.234L-26.944-36.059Q-26.944-35.738-26.825-35.510Q-26.706-35.281-26.425-35.281Q-26.245-35.281-26.128-35.404Q-26.011-35.527-25.958-35.707Q-25.905-35.887-25.905-36.059L-25.905-36.531L-25.624-36.531L-25.624-36.043Q-25.624-35.789-25.729-35.549Q-25.835-35.309-26.032-35.156Q-26.229-35.004-26.487-35.004Q-26.804-35.004-27.056-35.127Q-27.308-35.250-27.446-35.484Q-27.585-35.719-27.585-36.043",[1215],[809,1292,1293,1299],{"fill":1201,"stroke":1206,"fontFamily":1275,"fontSize":1276},[809,1294,1296],{"transform":1295},"translate(129.03 27.873)",[1204,1297],{"d":1282,"fill":1201,"stroke":1201,"className":1298,"style":1284},[1215],[809,1300,1301],{"transform":1295},[1204,1302],{"d":1303,"fill":1201,"stroke":1201,"className":1304,"style":1284},"M-35.315-35.082L-37.093-35.082L-37.093-35.379Q-36.819-35.379-36.651-35.426Q-36.483-35.473-36.483-35.641L-36.483-37.777Q-36.483-37.992-36.540-38.088Q-36.597-38.184-36.710-38.205Q-36.823-38.227-37.069-38.227L-37.069-38.523L-35.870-38.609L-35.870-35.641Q-35.870-35.473-35.724-35.426Q-35.577-35.379-35.315-35.379L-35.315-35.082M-36.757-40.004Q-36.757-40.195-36.622-40.326Q-36.487-40.457-36.292-40.457Q-36.171-40.457-36.067-40.395Q-35.964-40.332-35.901-40.228Q-35.839-40.125-35.839-40.004Q-35.839-39.809-35.970-39.674Q-36.100-39.539-36.292-39.539Q-36.491-39.539-36.624-39.672Q-36.757-39.805-36.757-40.004M-32.886-35.082L-34.741-35.082L-34.741-35.379Q-34.468-35.379-34.300-35.426Q-34.132-35.473-34.132-35.641L-34.132-37.777Q-34.132-37.992-34.194-38.088Q-34.257-38.184-34.376-38.205Q-34.495-38.227-34.741-38.227L-34.741-38.523L-33.550-38.609L-33.550-37.875Q-33.436-38.090-33.243-38.258Q-33.050-38.426-32.811-38.518Q-32.573-38.609-32.319-38.609Q-31.151-38.609-31.151-37.531L-31.151-35.641Q-31.151-35.473-30.981-35.426Q-30.811-35.379-30.542-35.379L-30.542-35.082L-32.397-35.082L-32.397-35.379Q-32.124-35.379-31.956-35.426Q-31.788-35.473-31.788-35.641L-31.788-37.516Q-31.788-37.898-31.909-38.127Q-32.030-38.355-32.382-38.355Q-32.694-38.355-32.948-38.193Q-33.202-38.031-33.349-37.762Q-33.495-37.492-33.495-37.195L-33.495-35.641Q-33.495-35.473-33.325-35.426Q-33.155-35.379-32.886-35.379",[1215],[1306,1307,1310,1311,1327,1328,1392,1393,1327,1410,1471,1472,1500],"figcaption",{"className":1308},[1309],"tikz-cap","directed path: start ",[454,1312,1314],{"className":1313},[457],[454,1315,1317],{"className":1316,"ariaHidden":462},[461],[454,1318,1320,1323],{"className":1319},[466],[454,1321],{"className":1322,"style":583},[470],[454,1324,1326],{"className":1325},[475,476],"s"," has ",[454,1329,1331],{"className":1330},[457],[454,1332,1334,1357,1380],{"className":1333,"ariaHidden":462},[461],[454,1335,1337,1341,1348,1351,1354],{"className":1336},[466],[454,1338],{"className":1339,"style":1340},[470],"height:0.6984em;vertical-align:-0.0833em;",[454,1342,1344],{"className":1343},[475,518],[454,1345,1347],{"className":1346},[475],"out",[454,1349],{"className":1350,"style":1066},[1009],[454,1352,1071],{"className":1353},[1070],[454,1355],{"className":1356,"style":1066},[1009],[454,1358,1360,1364,1371,1374,1377],{"className":1359},[466],[454,1361],{"className":1362,"style":1363},[470],"height:0.6679em;",[454,1365,1367],{"className":1366},[475,518],[454,1368,1370],{"className":1369},[475],"in",[454,1372],{"className":1373,"style":1010},[1009],[454,1375,1015],{"className":1376},[1014],[454,1378],{"className":1379,"style":1010},[1009],[454,1381,1383,1386,1389],{"className":1382},[466],[454,1384],{"className":1385,"style":1102},[470],[454,1387,1106],{"className":1388},[475],[454,1390,554],{"className":1391},[475],", end ",[454,1394,1396],{"className":1395},[457],[454,1397,1399],{"className":1398,"ariaHidden":462},[461],[454,1400,1402,1406],{"className":1401},[466],[454,1403],{"className":1404,"style":1405},[470],"height:0.6151em;",[454,1407,1409],{"className":1408},[475,476],"t",[454,1411,1413],{"className":1412},[457],[454,1414,1416,1438,1459],{"className":1415,"ariaHidden":462},[461],[454,1417,1419,1423,1429,1432,1435],{"className":1418},[466],[454,1420],{"className":1421,"style":1422},[470],"height:0.7512em;vertical-align:-0.0833em;",[454,1424,1426],{"className":1425},[475,518],[454,1427,1370],{"className":1428},[475],[454,1430],{"className":1431,"style":1066},[1009],[454,1433,1071],{"className":1434},[1070],[454,1436],{"className":1437,"style":1066},[1009],[454,1439,1441,1444,1450,1453,1456],{"className":1440},[466],[454,1442],{"className":1443,"style":1405},[470],[454,1445,1447],{"className":1446},[475,518],[454,1448,1347],{"className":1449},[475],[454,1451],{"className":1452,"style":1010},[1009],[454,1454,1015],{"className":1455},[1014],[454,1457],{"className":1458,"style":1010},[1009],[454,1460,1462,1465,1468],{"className":1461},[466],[454,1463],{"className":1464,"style":1102},[470],[454,1466,1106],{"className":1467},[475],[454,1469,554],{"className":1470},[475],", ",[454,1473,1475],{"className":1474},[457],[454,1476,1478],{"className":1477,"ariaHidden":462},[461],[454,1479,1481,1484,1487,1492,1496],{"className":1480},[466],[454,1482],{"className":1483,"style":1056},[470],[454,1485,390],{"className":1486},[475,476],[454,1488,1491],{"className":1489},[1490],"mpunct",",",[454,1493],{"className":1494,"style":1495},[1009],"margin-right:0.1667em;",[454,1497,1499],{"className":1498},[475,476],"b"," balanced",[1183,1502,1504,1621],{"className":1503},[1186,1187],[1189,1505,1509],{"xmlns":1191,"width":1506,"height":1507,"viewBox":1508},"218.488","190.068","-75 -75 163.866 142.551",[809,1510,1511,1514,1521,1524,1531,1534,1541,1544,1551,1554,1561,1564,1571,1574,1589],{"stroke":1197,"style":1198},[1204,1512],{"fill":1206,"d":1513},"M-45.486-62.112c0-5.5-4.459-9.958-9.959-9.958s-9.958 4.458-9.958 9.958 4.458 9.959 9.958 9.959 9.959-4.459 9.959-9.959Zm-9.959 0",[809,1515,1517],{"transform":1516},"translate(-2.45 -32.206)",[1204,1518],{"d":1519,"fill":1197,"stroke":1197,"className":1520,"style":1216},"M-53.823-27.867Q-54.219-27.867-54.505-28.071Q-54.790-28.276-54.937-28.610Q-55.085-28.944-55.085-29.335Q-55.085-29.770-54.911-30.231Q-54.737-30.693-54.425-31.084Q-54.113-31.475-53.703-31.710Q-53.292-31.945-52.852-31.945Q-52.584-31.945-52.367-31.807Q-52.149-31.668-52.017-31.422Q-51.978-31.572-51.870-31.668Q-51.762-31.765-51.622-31.765Q-51.499-31.765-51.415-31.692Q-51.332-31.620-51.332-31.497Q-51.332-31.444-51.341-31.413L-51.960-28.922Q-52.017-28.724-52.017-28.526Q-52.017-28.131-51.754-28.131Q-51.468-28.131-51.334-28.454Q-51.200-28.777-51.081-29.282Q-51.072-29.313-51.048-29.337Q-51.024-29.361-50.989-29.361L-50.883-29.361Q-50.835-29.361-50.813-29.328Q-50.791-29.295-50.791-29.247Q-50.905-28.816-50.996-28.563Q-51.086-28.311-51.279-28.089Q-51.472-27.867-51.771-27.867Q-52.079-27.867-52.327-28.038Q-52.575-28.210-52.646-28.500Q-52.901-28.214-53.197-28.041Q-53.494-27.867-53.823-27.867M-53.806-28.131Q-53.476-28.131-53.166-28.372Q-52.857-28.614-52.646-28.930Q-52.637-28.939-52.637-28.957L-52.140-30.921Q-52.197-31.238-52.389-31.462Q-52.580-31.686-52.870-31.686Q-53.239-31.686-53.538-31.367Q-53.837-31.049-54.004-30.640Q-54.140-30.293-54.265-29.783Q-54.390-29.273-54.390-28.948Q-54.390-28.623-54.252-28.377Q-54.113-28.131-53.806-28.131",[1215],[1204,1522],{"fill":1206,"d":1523},"M-11.343-27.968c0-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",[809,1525,1527],{"transform":1526},"translate(32.161 3.125)",[1204,1528],{"d":1529,"fill":1197,"stroke":1197,"className":1530,"style":1216},"M-53.823-27.867Q-54.399-27.867-54.720-28.298Q-55.041-28.728-55.041-29.308Q-55.041-29.713-54.957-29.941L-54.078-33.439Q-54.043-33.589-54.043-33.663Q-54.043-33.800-54.610-33.800Q-54.707-33.800-54.707-33.918Q-54.707-33.975-54.676-34.046Q-54.645-34.116-54.579-34.116L-53.358-34.213Q-53.305-34.213-53.272-34.184Q-53.239-34.156-53.239-34.107L-53.239-34.072L-53.898-31.462Q-53.375-31.945-52.852-31.945Q-52.466-31.945-52.175-31.741Q-51.885-31.536-51.738-31.202Q-51.591-30.868-51.591-30.477Q-51.591-29.893-51.894-29.284Q-52.197-28.676-52.718-28.271Q-53.239-27.867-53.823-27.867M-53.806-28.131Q-53.437-28.131-53.133-28.454Q-52.830-28.777-52.672-29.172Q-52.527-29.528-52.406-30.036Q-52.285-30.543-52.285-30.864Q-52.285-31.189-52.430-31.437Q-52.575-31.686-52.870-31.686Q-53.472-31.686-54.043-30.886L-54.285-29.893Q-54.430-29.269-54.430-29.005Q-54.430-28.662-54.278-28.396Q-54.127-28.131-53.806-28.131",[1215],[1204,1532],{"fill":1206,"d":1533},"M-45.486 6.175c0-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",[809,1535,1537],{"transform":1536},"translate(-2.002 36.08)",[1204,1538],{"d":1539,"fill":1197,"stroke":1197,"className":1540,"style":1216},"M-54.355-29.075Q-54.355-28.680-54.142-28.405Q-53.929-28.131-53.547-28.131Q-53.002-28.131-52.496-28.366Q-51.991-28.601-51.674-29.023Q-51.653-29.058-51.591-29.058Q-51.534-29.058-51.488-29.007Q-51.442-28.957-51.442-28.904Q-51.442-28.869-51.468-28.843Q-51.815-28.368-52.378-28.117Q-52.940-27.867-53.564-27.867Q-53.995-27.867-54.344-28.069Q-54.694-28.271-54.885-28.627Q-55.076-28.983-55.076-29.409Q-55.076-29.871-54.874-30.328Q-54.672-30.785-54.316-31.154Q-53.960-31.523-53.516-31.734Q-53.072-31.945-52.602-31.945Q-52.334-31.945-52.085-31.864Q-51.837-31.782-51.670-31.604Q-51.503-31.426-51.503-31.163Q-51.503-30.926-51.653-30.748Q-51.802-30.570-52.035-30.570Q-52.175-30.570-52.281-30.664Q-52.386-30.759-52.386-30.904Q-52.386-31.106-52.239-31.260Q-52.092-31.413-51.890-31.413Q-51.995-31.554-52.200-31.620Q-52.404-31.686-52.611-31.686Q-53.147-31.686-53.544-31.257Q-53.942-30.829-54.149-30.209Q-54.355-29.590-54.355-29.075",[1215],[1204,1542],{"fill":1206,"d":1543},"m-48.262-54.928 19.777 19.777m0 14.366L-48.262-1.008m-7.183-2.976v-47.97M51.253-62.112c0-5.5-4.459-9.958-9.959-9.958s-9.958 4.458-9.958 9.958 4.458 9.959 9.958 9.959 9.959-4.459 9.959-9.959Zm-9.959 0",[809,1545,1547],{"transform":1546},"translate(94.343 -31.018)",[1204,1548],{"d":1549,"fill":1197,"stroke":1197,"className":1550,"style":1216},"M-53.823-27.867Q-54.219-27.867-54.505-28.071Q-54.790-28.276-54.937-28.610Q-55.085-28.944-55.085-29.335Q-55.085-29.770-54.911-30.231Q-54.737-30.693-54.425-31.084Q-54.113-31.475-53.703-31.710Q-53.292-31.945-52.852-31.945Q-52.584-31.945-52.367-31.807Q-52.149-31.668-52.017-31.422L-51.512-33.439Q-51.477-33.589-51.477-33.663Q-51.477-33.800-52.044-33.800Q-52.140-33.800-52.140-33.918Q-52.140-33.975-52.110-34.046Q-52.079-34.116-52.017-34.116L-50.791-34.213Q-50.738-34.213-50.708-34.184Q-50.677-34.156-50.677-34.107L-50.677-34.072L-51.960-28.922Q-51.960-28.864-51.989-28.733Q-52.017-28.601-52.017-28.526Q-52.017-28.131-51.754-28.131Q-51.468-28.131-51.334-28.454Q-51.200-28.777-51.081-29.282Q-51.072-29.313-51.048-29.337Q-51.024-29.361-50.989-29.361L-50.883-29.361Q-50.835-29.361-50.813-29.328Q-50.791-29.295-50.791-29.247Q-50.905-28.816-50.996-28.563Q-51.086-28.311-51.279-28.089Q-51.472-27.867-51.771-27.867Q-52.079-27.867-52.327-28.038Q-52.575-28.210-52.646-28.500Q-52.901-28.214-53.197-28.041Q-53.494-27.867-53.823-27.867M-53.806-28.131Q-53.476-28.131-53.166-28.372Q-52.857-28.614-52.646-28.930Q-52.637-28.939-52.637-28.966L-52.140-30.921Q-52.197-31.238-52.389-31.462Q-52.580-31.686-52.870-31.686Q-53.239-31.686-53.538-31.367Q-53.837-31.049-54.004-30.640Q-54.140-30.293-54.265-29.783Q-54.390-29.273-54.390-28.948Q-54.390-28.623-54.252-28.377Q-54.113-28.131-53.806-28.131",[1215],[1204,1552],{"fill":1206,"d":1553},"M85.396-27.968c0-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",[809,1555,1557],{"transform":1556},"translate(128.733 1.937)",[1204,1558],{"d":1559,"fill":1197,"stroke":1197,"className":1560,"style":1216},"M-54.329-29.146Q-54.329-28.733-54.133-28.432Q-53.938-28.131-53.547-28.131Q-53.002-28.131-52.496-28.366Q-51.991-28.601-51.674-29.023Q-51.653-29.058-51.591-29.058Q-51.534-29.058-51.488-29.007Q-51.442-28.957-51.442-28.904Q-51.442-28.869-51.468-28.843Q-51.815-28.368-52.378-28.117Q-52.940-27.867-53.564-27.867Q-54.237-27.867-54.634-28.348Q-55.032-28.829-55.032-29.515Q-55.032-30.161-54.698-30.726Q-54.364-31.290-53.804-31.618Q-53.243-31.945-52.602-31.945Q-52.197-31.945-51.890-31.743Q-51.582-31.541-51.582-31.163Q-51.582-30.763-51.848-30.523Q-52.114-30.284-52.531-30.172Q-52.949-30.060-53.325-30.036Q-53.700-30.011-54.166-30.011L-54.201-30.011Q-54.329-29.449-54.329-29.146M-54.131-30.271Q-53.270-30.271-52.611-30.427Q-51.951-30.583-51.951-31.154Q-51.951-31.405-52.151-31.545Q-52.351-31.686-52.611-31.686Q-53.182-31.686-53.573-31.279Q-53.964-30.873-54.131-30.271",[1215],[1204,1562],{"fill":1206,"d":1563},"M51.253 6.175c0-5.5-4.459-9.959-9.959-9.959S31.336.675 31.336 6.175s4.458 9.958 9.958 9.958 9.959-4.458 9.959-9.958Zm-9.959 0",[809,1565,1567],{"transform":1566},"translate(94.005 36.393)",[1204,1568],{"d":1569,"fill":1197,"stroke":1197,"className":1570,"style":1216},"M-54.509-26.491Q-54.364-26.386-54.131-26.386Q-53.850-26.386-53.661-26.887Q-53.573-27.133-53.160-29.335L-52.747-31.532L-53.538-31.532Q-53.634-31.532-53.634-31.651Q-53.634-31.708-53.604-31.778Q-53.573-31.848-53.511-31.848L-52.690-31.848L-52.584-32.442Q-52.531-32.705-52.492-32.888Q-52.452-33.070-52.382-33.283Q-52.312-33.496-52.250-33.619Q-52.092-33.923-51.822-34.118Q-51.551-34.314-51.244-34.314Q-50.905-34.314-50.651-34.149Q-50.396-33.984-50.396-33.672Q-50.396-33.444-50.547-33.274Q-50.699-33.105-50.919-33.105Q-51.068-33.105-51.174-33.200Q-51.279-33.294-51.279-33.439Q-51.279-33.619-51.154-33.764Q-51.028-33.909-50.844-33.945Q-50.989-34.050-51.244-34.050Q-51.446-34.050-51.622-33.782Q-51.683-33.615-51.899-32.433L-52.008-31.848L-51.064-31.848Q-51.011-31.848-50.982-31.815Q-50.954-31.782-50.954-31.739Q-50.954-31.668-50.987-31.600Q-51.020-31.532-51.081-31.532L-52.061-31.532L-52.474-29.326Q-52.553-28.856-52.665-28.342Q-52.778-27.827-52.962-27.324Q-53.147-26.821-53.443-26.472Q-53.740-26.122-54.140-26.122Q-54.346-26.122-54.531-26.195Q-54.716-26.267-54.836-26.412Q-54.957-26.557-54.957-26.764Q-54.957-26.992-54.806-27.162Q-54.654-27.331-54.430-27.331Q-54.285-27.331-54.182-27.239Q-54.078-27.146-54.078-26.997Q-54.078-26.817-54.201-26.669Q-54.324-26.522-54.509-26.491",[1215],[1204,1572],{"fill":1206,"stroke":1201,"d":1573,"style":1202},"M48.477-54.929 68.255-35.15m0 14.366L48.477-1.008m-7.183-2.976v-47.97",[809,1575,1576,1583],{"stroke":1206,"fontFamily":1275,"fontSize":1276},[809,1577,1579],{"transform":1578},"translate(3.117 61.473)",[1204,1580],{"d":1581,"fill":1197,"stroke":1197,"className":1582,"style":1284},"M-55.207-29.722Q-55.207-30.202-54.974-30.618Q-54.742-31.034-54.332-31.284Q-53.922-31.534-53.445-31.534Q-52.715-31.534-52.316-31.093Q-51.918-30.652-51.918-29.921Q-51.918-29.816-52.011-29.792L-54.461-29.792L-54.461-29.722Q-54.461-29.312-54.340-28.956Q-54.218-28.601-53.947-28.384Q-53.675-28.167-53.246-28.167Q-52.883-28.167-52.586-28.396Q-52.289-28.624-52.187-28.976Q-52.179-29.023-52.093-29.038L-52.011-29.038Q-51.918-29.011-51.918-28.929Q-51.918-28.921-51.925-28.890Q-51.988-28.663-52.127-28.480Q-52.265-28.296-52.457-28.163Q-52.648-28.030-52.867-27.960Q-53.086-27.890-53.324-27.890Q-53.695-27.890-54.033-28.027Q-54.371-28.163-54.638-28.415Q-54.906-28.667-55.056-29.007Q-55.207-29.347-55.207-29.722M-54.453-30.030L-52.492-30.030Q-52.492-30.335-52.593-30.626Q-52.695-30.917-52.912-31.099Q-53.129-31.280-53.445-31.280Q-53.746-31.280-53.976-31.093Q-54.207-30.905-54.330-30.614Q-54.453-30.323-54.453-30.030M-49.629-27.999L-50.851-30.855Q-50.933-31.030-51.078-31.075Q-51.222-31.120-51.492-31.120L-51.492-31.417L-49.781-31.417L-49.781-31.120Q-50.203-31.120-50.203-30.937Q-50.203-30.902-50.187-30.855L-49.242-28.663L-48.402-30.640Q-48.363-30.718-48.363-30.808Q-48.363-30.948-48.468-31.034Q-48.574-31.120-48.715-31.120L-48.715-31.417L-47.363-31.417L-47.363-31.120Q-47.886-31.120-48.101-30.640L-49.226-27.999Q-49.289-27.890-49.394-27.890L-49.461-27.890Q-49.574-27.890-49.629-27.999",[1215],[809,1584,1585],{"transform":1578},[1204,1586],{"d":1587,"fill":1197,"stroke":1197,"className":1588,"style":1284},"M-47.179-29.722Q-47.179-30.202-46.946-30.618Q-46.714-31.034-46.304-31.284Q-45.894-31.534-45.417-31.534Q-44.687-31.534-44.288-31.093Q-43.890-30.652-43.890-29.921Q-43.890-29.816-43.983-29.792L-46.433-29.792L-46.433-29.722Q-46.433-29.312-46.312-28.956Q-46.190-28.601-45.919-28.384Q-45.647-28.167-45.218-28.167Q-44.855-28.167-44.558-28.396Q-44.261-28.624-44.159-28.976Q-44.151-29.023-44.065-29.038L-43.983-29.038Q-43.890-29.011-43.890-28.929Q-43.890-28.921-43.897-28.890Q-43.960-28.663-44.099-28.480Q-44.237-28.296-44.429-28.163Q-44.620-28.030-44.839-27.960Q-45.058-27.890-45.296-27.890Q-45.667-27.890-46.005-28.027Q-46.343-28.163-46.610-28.415Q-46.878-28.667-47.028-29.007Q-47.179-29.347-47.179-29.722M-46.425-30.030L-44.464-30.030Q-44.464-30.335-44.565-30.626Q-44.667-30.917-44.884-31.099Q-45.101-31.280-45.417-31.280Q-45.718-31.280-45.948-31.093Q-46.179-30.905-46.302-30.614Q-46.425-30.323-46.425-30.030M-41.472-27.968L-43.327-27.968L-43.327-28.265Q-43.054-28.265-42.886-28.312Q-42.718-28.359-42.718-28.527L-42.718-30.663Q-42.718-30.878-42.780-30.974Q-42.843-31.070-42.962-31.091Q-43.081-31.113-43.327-31.113L-43.327-31.409L-42.136-31.495L-42.136-30.761Q-42.022-30.976-41.829-31.144Q-41.636-31.312-41.397-31.404Q-41.159-31.495-40.905-31.495Q-39.737-31.495-39.737-30.417L-39.737-28.527Q-39.737-28.359-39.567-28.312Q-39.397-28.265-39.128-28.265L-39.128-27.968L-40.983-27.968L-40.983-28.265Q-40.710-28.265-40.542-28.312Q-40.374-28.359-40.374-28.527L-40.374-30.402Q-40.374-30.784-40.495-31.013Q-40.616-31.241-40.968-31.241Q-41.280-31.241-41.534-31.079Q-41.788-30.917-41.935-30.648Q-42.081-30.378-42.081-30.081L-42.081-28.527Q-42.081-28.359-41.911-28.312Q-41.741-28.265-41.472-28.265",[1215],[809,1590,1591,1597,1603,1609,1615],{"fill":1201,"stroke":1206,"fontFamily":1275,"fontSize":1276},[809,1592,1594],{"transform":1593},"translate(75.75 61.75)",[1204,1595],{"d":1581,"fill":1201,"stroke":1201,"className":1596,"style":1284},[1215],[809,1598,1599],{"transform":1593},[1204,1600],{"d":1601,"fill":1201,"stroke":1201,"className":1602,"style":1284},"M-47.179-29.722Q-47.179-30.202-46.946-30.618Q-46.714-31.034-46.304-31.284Q-45.894-31.534-45.417-31.534Q-44.687-31.534-44.288-31.093Q-43.890-30.652-43.890-29.921Q-43.890-29.816-43.983-29.792L-46.433-29.792L-46.433-29.722Q-46.433-29.312-46.312-28.956Q-46.190-28.601-45.919-28.384Q-45.647-28.167-45.218-28.167Q-44.855-28.167-44.558-28.396Q-44.261-28.624-44.159-28.976Q-44.151-29.023-44.065-29.038L-43.983-29.038Q-43.890-29.011-43.890-28.929Q-43.890-28.921-43.897-28.890Q-43.960-28.663-44.099-28.480Q-44.237-28.296-44.429-28.163Q-44.620-28.030-44.839-27.960Q-45.058-27.890-45.296-27.890Q-45.667-27.890-46.005-28.027Q-46.343-28.163-46.610-28.415Q-46.878-28.667-47.028-29.007Q-47.179-29.347-47.179-29.722M-46.425-30.030L-44.464-30.030Q-44.464-30.335-44.565-30.626Q-44.667-30.917-44.884-31.099Q-45.101-31.280-45.417-31.280Q-45.718-31.280-45.948-31.093Q-46.179-30.905-46.302-30.614Q-46.425-30.323-46.425-30.030M-41.472-27.968L-43.327-27.968L-43.327-28.265Q-43.054-28.265-42.886-28.312Q-42.718-28.359-42.718-28.527L-42.718-30.663Q-42.718-30.878-42.780-30.974Q-42.843-31.070-42.962-31.091Q-43.081-31.113-43.327-31.113L-43.327-31.409L-42.136-31.495L-42.136-30.761Q-42.022-30.976-41.829-31.144Q-41.636-31.312-41.397-31.404Q-41.159-31.495-40.905-31.495Q-39.737-31.495-39.737-30.417L-39.737-28.527Q-39.737-28.359-39.567-28.312Q-39.397-28.265-39.128-28.265L-39.128-27.968L-40.983-27.968L-40.983-28.265Q-40.710-28.265-40.542-28.312Q-40.374-28.359-40.374-28.527L-40.374-30.402Q-40.374-30.784-40.495-31.013Q-40.616-31.241-40.968-31.241Q-41.280-31.241-41.534-31.079Q-41.788-30.917-41.935-30.648Q-42.081-30.378-42.081-30.081L-42.081-28.527Q-42.081-28.359-41.911-28.312Q-41.741-28.265-41.472-28.265L-41.472-27.968M-38.097-26.562Q-38.097-26.585-38.065-26.632Q-37.772-26.894-37.606-27.261Q-37.440-27.628-37.440-28.015L-37.440-28.073Q-37.569-27.968-37.737-27.968Q-37.929-27.968-38.065-28.101Q-38.202-28.234-38.202-28.433Q-38.202-28.624-38.065-28.757Q-37.929-28.890-37.737-28.890Q-37.437-28.890-37.312-28.620Q-37.187-28.351-37.187-28.015Q-37.187-27.566-37.368-27.152Q-37.550-26.738-37.890-26.441Q-37.913-26.417-37.952-26.417Q-37.999-26.417-38.048-26.462Q-38.097-26.507-38.097-26.562",[1215],[809,1604,1605],{"transform":1593},[1204,1606],{"d":1607,"fill":1201,"stroke":1201,"className":1608,"style":1284},"M-32.570-27.968L-32.851-27.968L-32.851-32.687Q-32.851-32.902-32.913-32.997Q-32.976-33.093-33.093-33.114Q-33.210-33.136-33.456-33.136L-33.456-33.433L-32.234-33.519L-32.234-31.030Q-31.757-31.495-31.058-31.495Q-30.577-31.495-30.169-31.251Q-29.761-31.007-29.525-30.593Q-29.288-30.179-29.288-29.695Q-29.288-29.320-29.437-28.991Q-29.585-28.663-29.855-28.411Q-30.124-28.159-30.468-28.025Q-30.812-27.890-31.171-27.890Q-31.492-27.890-31.790-28.038Q-32.089-28.187-32.296-28.448L-32.570-27.968M-32.210-30.640L-32.210-28.800Q-32.058-28.503-31.798-28.323Q-31.538-28.144-31.226-28.144Q-30.800-28.144-30.533-28.363Q-30.265-28.581-30.150-28.927Q-30.035-29.273-30.035-29.695Q-30.035-30.343-30.283-30.792Q-30.531-31.241-31.128-31.241Q-31.464-31.241-31.753-31.083Q-32.042-30.925-32.210-30.640M-28.081-28.921L-28.081-30.663Q-28.081-30.878-28.144-30.974Q-28.206-31.070-28.326-31.091Q-28.445-31.113-28.691-31.113L-28.691-31.409L-27.445-31.495L-27.445-28.945L-27.445-28.921Q-27.445-28.609-27.390-28.447Q-27.335-28.284-27.185-28.214Q-27.035-28.144-26.714-28.144Q-26.285-28.144-26.011-28.482Q-25.738-28.820-25.738-29.265L-25.738-30.663Q-25.738-30.878-25.800-30.974Q-25.863-31.070-25.982-31.091Q-26.101-31.113-26.347-31.113L-26.347-31.409L-25.101-31.495L-25.101-28.710Q-25.101-28.499-25.038-28.404Q-24.976-28.308-24.857-28.286Q-24.738-28.265-24.492-28.265L-24.492-27.968L-25.714-27.890L-25.714-28.511Q-25.882-28.222-26.163-28.056Q-26.445-27.890-26.765-27.890Q-28.081-27.890-28.081-28.921M-23.421-28.929L-23.421-31.120L-24.124-31.120L-24.124-31.374Q-23.769-31.374-23.527-31.607Q-23.285-31.839-23.173-32.187Q-23.062-32.534-23.062-32.890L-22.781-32.890L-22.781-31.417L-21.605-31.417L-21.605-31.120L-22.781-31.120L-22.781-28.945Q-22.781-28.624-22.661-28.396Q-22.542-28.167-22.261-28.167Q-22.081-28.167-21.964-28.290Q-21.847-28.413-21.794-28.593Q-21.742-28.773-21.742-28.945L-21.742-29.417L-21.460-29.417L-21.460-28.929Q-21.460-28.675-21.566-28.435Q-21.671-28.195-21.868-28.042Q-22.066-27.890-22.324-27.890Q-22.640-27.890-22.892-28.013Q-23.144-28.136-23.283-28.370Q-23.421-28.605-23.421-28.929",[1215],[809,1610,1611],{"transform":1593},[1204,1612],{"d":1613,"fill":1201,"stroke":1201,"className":1614,"style":1284},"M-16.084-27.890Q-16.565-27.890-16.973-28.134Q-17.381-28.378-17.619-28.792Q-17.858-29.206-17.858-29.695Q-17.858-30.187-17.600-30.603Q-17.342-31.019-16.910-31.257Q-16.479-31.495-15.987-31.495Q-15.366-31.495-14.916-31.058L-14.916-32.687Q-14.916-32.902-14.979-32.997Q-15.041-33.093-15.159-33.114Q-15.276-33.136-15.522-33.136L-15.522-33.433L-14.299-33.519L-14.299-28.710Q-14.299-28.499-14.237-28.404Q-14.174-28.308-14.057-28.286Q-13.940-28.265-13.690-28.265L-13.690-27.968L-14.940-27.890L-14.940-28.374Q-15.405-27.890-16.084-27.890M-16.018-28.144Q-15.678-28.144-15.385-28.335Q-15.092-28.527-14.940-28.823L-14.940-30.655Q-15.088-30.929-15.350-31.085Q-15.612-31.241-15.924-31.241Q-16.549-31.241-16.832-30.794Q-17.116-30.347-17.116-29.687Q-17.116-29.042-16.864-28.593Q-16.612-28.144-16.018-28.144M-11.323-27.968L-13.100-27.968L-13.100-28.265Q-12.826-28.265-12.659-28.312Q-12.491-28.359-12.491-28.527L-12.491-30.663Q-12.491-30.878-12.547-30.974Q-12.604-31.070-12.717-31.091Q-12.830-31.113-13.076-31.113L-13.076-31.409L-11.877-31.495L-11.877-28.527Q-11.877-28.359-11.731-28.312Q-11.584-28.265-11.323-28.265L-11.323-27.968M-12.764-32.890Q-12.764-33.081-12.629-33.212Q-12.494-33.343-12.299-33.343Q-12.178-33.343-12.075-33.281Q-11.971-33.218-11.909-33.114Q-11.846-33.011-11.846-32.890Q-11.846-32.695-11.977-32.560Q-12.108-32.425-12.299-32.425Q-12.498-32.425-12.631-32.558Q-12.764-32.691-12.764-32.890M-10.780-27.976L-10.780-29.198Q-10.780-29.226-10.748-29.257Q-10.717-29.288-10.694-29.288L-10.588-29.288Q-10.518-29.288-10.502-29.226Q-10.440-28.905-10.301-28.665Q-10.162-28.425-9.930-28.284Q-9.698-28.144-9.389-28.144Q-9.151-28.144-8.942-28.204Q-8.733-28.265-8.596-28.413Q-8.459-28.562-8.459-28.808Q-8.459-29.062-8.670-29.228Q-8.881-29.394-9.151-29.448L-9.772-29.562Q-10.178-29.640-10.479-29.896Q-10.780-30.152-10.780-30.527Q-10.780-30.894-10.578-31.116Q-10.377-31.339-10.053-31.437Q-9.729-31.534-9.389-31.534Q-8.924-31.534-8.627-31.327L-8.405-31.511Q-8.381-31.534-8.350-31.534L-8.299-31.534Q-8.268-31.534-8.241-31.507Q-8.213-31.480-8.213-31.448L-8.213-30.464Q-8.213-30.433-8.239-30.404Q-8.264-30.374-8.299-30.374L-8.405-30.374Q-8.440-30.374-8.467-30.402Q-8.494-30.429-8.494-30.464Q-8.494-30.863-8.746-31.083Q-8.998-31.304-9.397-31.304Q-9.752-31.304-10.035-31.181Q-10.319-31.058-10.319-30.753Q-10.319-30.534-10.118-30.402Q-9.916-30.269-9.670-30.226L-9.045-30.113Q-8.616-30.023-8.307-29.726Q-7.998-29.429-7.998-29.015Q-7.998-28.445-8.397-28.167Q-8.795-27.890-9.389-27.890Q-9.940-27.890-10.291-28.226L-10.588-27.913Q-10.612-27.890-10.647-27.890L-10.694-27.890Q-10.717-27.890-10.748-27.921Q-10.780-27.952-10.780-27.976M-8.030-26.991Q-8.030-27.097-7.979-27.189Q-7.928-27.280-7.836-27.331Q-7.744-27.382-7.639-27.382Q-7.530-27.382-7.438-27.331Q-7.346-27.280-7.295-27.189Q-7.244-27.097-7.244-26.991Q-7.244-26.777-7.436-26.655Q-7.280-26.593-7.053-26.593Q-6.752-26.593-6.623-26.902Q-6.494-27.210-6.494-27.577L-6.494-30.663Q-6.494-30.968-6.641-31.040Q-6.787-31.113-7.166-31.113L-7.166-31.409L-5.877-31.495L-5.877-27.554Q-5.877-27.234-6.037-26.950Q-6.198-26.667-6.475-26.501Q-6.752-26.335-7.069-26.335Q-7.428-26.335-7.729-26.499Q-8.030-26.663-8.030-26.991M-6.799-32.890Q-6.799-33.073-6.660-33.208Q-6.522-33.343-6.334-33.343Q-6.147-33.343-6.012-33.212Q-5.877-33.081-5.877-32.890Q-5.877-32.691-6.010-32.558Q-6.143-32.425-6.334-32.425Q-6.526-32.425-6.662-32.562Q-6.799-32.698-6.799-32.890M-4.877-29.663Q-4.877-30.167-4.621-30.599Q-4.366-31.030-3.930-31.282Q-3.494-31.534-2.994-31.534Q-2.608-31.534-2.266-31.390Q-1.924-31.245-1.662-30.984Q-1.401-30.722-1.258-30.386Q-1.116-30.050-1.116-29.663Q-1.116-29.171-1.379-28.761Q-1.643-28.351-2.073-28.120Q-2.502-27.890-2.994-27.890Q-3.487-27.890-3.920-28.122Q-4.354-28.355-4.616-28.763Q-4.877-29.171-4.877-29.663M-2.994-28.167Q-2.537-28.167-2.285-28.390Q-2.034-28.613-1.946-28.964Q-1.858-29.316-1.858-29.761Q-1.858-30.191-1.951-30.529Q-2.045-30.866-2.299-31.073Q-2.553-31.280-2.994-31.280Q-3.643-31.280-3.887-30.864Q-4.131-30.448-4.131-29.761Q-4.131-29.316-4.043-28.964Q-3.955-28.613-3.703-28.390Q-3.451-28.167-2.994-28.167M1.228-27.968L-0.549-27.968L-0.549-28.265Q-0.276-28.265-0.108-28.312Q0.060-28.359 0.060-28.527L0.060-30.663Q0.060-30.878 0.004-30.974Q-0.053-31.070-0.166-31.091Q-0.280-31.113-0.526-31.113L-0.526-31.409L0.674-31.495L0.674-28.527Q0.674-28.359 0.820-28.312Q0.966-28.265 1.228-28.265L1.228-27.968M-0.213-32.890Q-0.213-33.081-0.078-33.212Q0.056-33.343 0.252-33.343Q0.373-33.343 0.476-33.281Q0.580-33.218 0.642-33.114Q0.705-33.011 0.705-32.890Q0.705-32.695 0.574-32.560Q0.443-32.425 0.252-32.425Q0.052-32.425-0.080-32.558Q-0.213-32.691-0.213-32.890M3.658-27.968L1.802-27.968L1.802-28.265Q2.076-28.265 2.244-28.312Q2.412-28.359 2.412-28.527L2.412-30.663Q2.412-30.878 2.349-30.974Q2.287-31.070 2.168-31.091Q2.049-31.113 1.802-31.113L1.802-31.409L2.994-31.495L2.994-30.761Q3.107-30.976 3.300-31.144Q3.494-31.312 3.732-31.404Q3.970-31.495 4.224-31.495Q5.392-31.495 5.392-30.417L5.392-28.527Q5.392-28.359 5.562-28.312Q5.732-28.265 6.002-28.265L6.002-27.968L4.146-27.968L4.146-28.265Q4.420-28.265 4.588-28.312Q4.756-28.359 4.756-28.527L4.756-30.402Q4.756-30.784 4.634-31.013Q4.513-31.241 4.162-31.241Q3.849-31.241 3.595-31.079Q3.341-30.917 3.195-30.648Q3.049-30.378 3.049-30.081L3.049-28.527Q3.049-28.359 3.218-28.312Q3.388-28.265 3.658-28.265",[1215],[809,1616,1617],{"transform":1593},[1204,1618],{"d":1619,"fill":1201,"stroke":1201,"className":1620,"style":1284},"M6.855-28.929L6.855-31.120L6.152-31.120L6.152-31.374Q6.508-31.374 6.750-31.607Q6.992-31.839 7.103-32.187Q7.215-32.534 7.215-32.890L7.496-32.890L7.496-31.417L8.672-31.417L8.672-31.120L7.496-31.120L7.496-28.945Q7.496-28.624 7.615-28.396Q7.734-28.167 8.015-28.167Q8.195-28.167 8.312-28.290Q8.430-28.413 8.482-28.593Q8.535-28.773 8.535-28.945L8.535-29.417L8.816-29.417L8.816-28.929Q8.816-28.675 8.711-28.435Q8.605-28.195 8.408-28.042Q8.211-27.890 7.953-27.890Q7.637-27.890 7.385-28.013Q7.133-28.136 6.994-28.370Q6.855-28.605 6.855-28.929",[1215],[1306,1622,1624],{"className":1623},[1309],"balanced but disconnected: two separate even loops admit no single Eulerian tour",[1183,1626,1628,1803],{"className":1627},[1186,1187],[1189,1629,1633],{"xmlns":1191,"width":1630,"height":1631,"viewBox":1632},"301.416","205.272","-75 -75 226.062 153.954",[809,1634,1635,1648,1651,1658,1661,1668,1680,1698,1712,1725,1738,1741,1744,1751,1754,1757,1764,1767,1770,1777,1780,1783,1790,1793,1796],{"stroke":1197,"style":1198},[809,1636,1638,1641],{"stroke":1201,"style":1637},"stroke-width:1.2",[1204,1639],{"fill":1206,"d":1640},"M-15.811-5.406c0-6.286-5.096-11.381-11.381-11.381s-11.381 5.095-11.381 11.38c0 6.287 5.095 11.382 11.38 11.382S-15.81.88-15.81-5.406Zm-11.381 0",[809,1642,1644],{"transform":1643},"translate(-2.45 1.937)",[1204,1645],{"d":1646,"fill":1201,"stroke":1201,"className":1647,"style":1216},"M-25.570-5.305Q-25.966-5.305-26.252-5.509Q-26.537-5.714-26.684-6.048Q-26.832-6.382-26.832-6.773Q-26.832-7.208-26.658-7.669Q-26.484-8.131-26.172-8.522Q-25.860-8.913-25.450-9.148Q-25.039-9.383-24.599-9.383Q-24.331-9.383-24.114-9.245Q-23.896-9.106-23.764-8.860Q-23.725-9.010-23.617-9.106Q-23.509-9.203-23.369-9.203Q-23.246-9.203-23.162-9.130Q-23.079-9.058-23.079-8.935Q-23.079-8.882-23.088-8.851L-23.707-6.360Q-23.764-6.162-23.764-5.964Q-23.764-5.569-23.501-5.569Q-23.215-5.569-23.081-5.892Q-22.947-6.215-22.828-6.720Q-22.819-6.751-22.795-6.775Q-22.771-6.799-22.736-6.799L-22.630-6.799Q-22.582-6.799-22.560-6.766Q-22.538-6.733-22.538-6.685Q-22.652-6.254-22.743-6.001Q-22.833-5.749-23.026-5.527Q-23.219-5.305-23.518-5.305Q-23.826-5.305-24.074-5.476Q-24.322-5.648-24.393-5.938Q-24.648-5.652-24.944-5.479Q-25.241-5.305-25.570-5.305M-25.553-5.569Q-25.223-5.569-24.913-5.810Q-24.604-6.052-24.393-6.368Q-24.384-6.377-24.384-6.395L-23.887-8.359Q-23.944-8.676-24.136-8.900Q-24.327-9.124-24.617-9.124Q-24.986-9.124-25.285-8.805Q-25.584-8.487-25.751-8.078Q-25.887-7.731-26.012-7.221Q-26.137-6.711-26.137-6.386Q-26.137-6.061-25.999-5.815Q-25.860-5.569-25.553-5.569",[1215],[1204,1649],{"fill":1206,"d":1650},"M52.475-36.704c0-6.286-5.095-11.381-11.38-11.381-6.287 0-11.382 5.095-11.382 11.38s5.095 11.382 11.381 11.382 11.381-5.096 11.381-11.381Zm-11.38 0",[809,1652,1654],{"transform":1653},"translate(66.304 -28.173)",[1204,1655],{"d":1656,"fill":1197,"stroke":1197,"className":1657,"style":1216},"M-25.570-5.305Q-26.146-5.305-26.467-5.736Q-26.788-6.166-26.788-6.746Q-26.788-7.151-26.704-7.379L-25.825-10.877Q-25.790-11.027-25.790-11.101Q-25.790-11.238-26.357-11.238Q-26.454-11.238-26.454-11.356Q-26.454-11.413-26.423-11.484Q-26.392-11.554-26.326-11.554L-25.105-11.651Q-25.052-11.651-25.019-11.622Q-24.986-11.593-24.986-11.545L-24.986-11.510L-25.645-8.900Q-25.122-9.383-24.599-9.383Q-24.213-9.383-23.922-9.179Q-23.632-8.974-23.485-8.640Q-23.338-8.306-23.338-7.915Q-23.338-7.331-23.641-6.722Q-23.944-6.114-24.465-5.709Q-24.986-5.305-25.570-5.305M-25.553-5.569Q-25.184-5.569-24.880-5.892Q-24.577-6.215-24.419-6.610Q-24.274-6.966-24.153-7.474Q-24.032-7.981-24.032-8.302Q-24.032-8.627-24.177-8.875Q-24.322-9.124-24.617-9.124Q-25.219-9.124-25.790-8.324L-26.032-7.331Q-26.177-6.707-26.177-6.443Q-26.177-6.100-26.025-5.834Q-25.874-5.569-25.553-5.569",[1215],[1204,1659],{"fill":1206,"d":1660},"M120.762-5.406c0-6.286-5.095-11.381-11.381-11.381S98-11.692 98-5.407C98 .88 103.095 5.976 109.38 5.976S120.762.88 120.762-5.406Zm-11.381 0",[809,1662,1664],{"transform":1663},"translate(134.571 1.937)",[1204,1665],{"d":1666,"fill":1197,"stroke":1197,"className":1667,"style":1216},"M-26.102-6.513Q-26.102-6.118-25.889-5.843Q-25.676-5.569-25.294-5.569Q-24.749-5.569-24.243-5.804Q-23.738-6.039-23.421-6.461Q-23.400-6.496-23.338-6.496Q-23.281-6.496-23.235-6.445Q-23.189-6.395-23.189-6.342Q-23.189-6.307-23.215-6.281Q-23.562-5.806-24.125-5.555Q-24.687-5.305-25.311-5.305Q-25.742-5.305-26.091-5.507Q-26.441-5.709-26.632-6.065Q-26.823-6.421-26.823-6.847Q-26.823-7.309-26.621-7.766Q-26.419-8.223-26.063-8.592Q-25.707-8.961-25.263-9.172Q-24.819-9.383-24.349-9.383Q-24.081-9.383-23.832-9.302Q-23.584-9.220-23.417-9.042Q-23.250-8.864-23.250-8.601Q-23.250-8.364-23.400-8.186Q-23.549-8.008-23.782-8.008Q-23.922-8.008-24.028-8.102Q-24.133-8.197-24.133-8.342Q-24.133-8.544-23.986-8.698Q-23.839-8.851-23.637-8.851Q-23.742-8.992-23.947-9.058Q-24.151-9.124-24.358-9.124Q-24.894-9.124-25.291-8.695Q-25.689-8.267-25.896-7.647Q-26.102-7.028-26.102-6.513",[1215],[809,1669,1670,1673],{"stroke":1201,"style":1637},[1204,1671],{"fill":1206,"d":1672},"M52.475 40.118c0-6.285-5.095-11.38-11.38-11.38-6.287 0-11.382 5.095-11.382 11.38S34.808 51.5 41.094 51.5s11.381-5.095 11.381-11.38Zm-11.38 0",[809,1674,1676],{"transform":1675},"translate(65.89 48.65)",[1204,1677],{"d":1678,"fill":1201,"stroke":1201,"className":1679,"style":1216},"M-25.570-5.305Q-25.966-5.305-26.252-5.509Q-26.537-5.714-26.684-6.048Q-26.832-6.382-26.832-6.773Q-26.832-7.208-26.658-7.669Q-26.484-8.131-26.172-8.522Q-25.860-8.913-25.450-9.148Q-25.039-9.383-24.599-9.383Q-24.331-9.383-24.114-9.245Q-23.896-9.106-23.764-8.860L-23.259-10.877Q-23.224-11.027-23.224-11.101Q-23.224-11.238-23.791-11.238Q-23.887-11.238-23.887-11.356Q-23.887-11.413-23.857-11.484Q-23.826-11.554-23.764-11.554L-22.538-11.651Q-22.485-11.651-22.455-11.622Q-22.424-11.593-22.424-11.545L-22.424-11.510L-23.707-6.360Q-23.707-6.302-23.736-6.171Q-23.764-6.039-23.764-5.964Q-23.764-5.569-23.501-5.569Q-23.215-5.569-23.081-5.892Q-22.947-6.215-22.828-6.720Q-22.819-6.751-22.795-6.775Q-22.771-6.799-22.736-6.799L-22.630-6.799Q-22.582-6.799-22.560-6.766Q-22.538-6.733-22.538-6.685Q-22.652-6.254-22.743-6.001Q-22.833-5.749-23.026-5.527Q-23.219-5.305-23.518-5.305Q-23.826-5.305-24.074-5.476Q-24.322-5.648-24.393-5.938Q-24.648-5.652-24.944-5.479Q-25.241-5.305-25.570-5.305M-25.553-5.569Q-25.223-5.569-24.913-5.810Q-24.604-6.052-24.393-6.368Q-24.384-6.377-24.384-6.404L-23.887-8.359Q-23.944-8.676-24.136-8.900Q-24.327-9.124-24.617-9.124Q-24.986-9.124-25.285-8.805Q-25.584-8.487-25.751-8.078Q-25.887-7.731-26.012-7.221Q-26.137-6.711-26.137-6.386Q-26.137-6.061-25.999-5.815Q-25.860-5.569-25.553-5.569",[1215],[809,1681,1684,1692],{"stroke":1206,"fontFamily":1682,"fontSize":1683},"cmr7","7",[809,1685,1687],{"transform":1686},"translate(-35.739 1.75)",[1204,1688],{"d":1689,"fill":1197,"stroke":1197,"className":1690,"style":1691},"M-26.878-6.917Q-26.878-7.255-26.737-7.546Q-26.597-7.836-26.353-8.050Q-26.109-8.263-25.804-8.378Q-25.500-8.492-25.175-8.492Q-24.905-8.492-24.642-8.393Q-24.379-8.294-24.188-8.116L-24.188-9.514Q-24.188-9.784-24.295-9.846Q-24.403-9.907-24.714-9.907L-24.714-10.188L-23.637-10.263L-23.637-6.079Q-23.637-5.891-23.583-5.808Q-23.528-5.724-23.427-5.705Q-23.326-5.686-23.111-5.686L-23.111-5.406L-24.218-5.338L-24.218-5.755Q-24.635-5.338-25.261-5.338Q-25.692-5.338-26.064-5.550Q-26.437-5.761-26.657-6.122Q-26.878-6.483-26.878-6.917M-25.203-5.560Q-24.994-5.560-24.808-5.632Q-24.622-5.703-24.468-5.840Q-24.314-5.977-24.218-6.155L-24.218-7.764Q-24.304-7.911-24.449-8.031Q-24.594-8.151-24.764-8.210Q-24.933-8.270-25.114-8.270Q-25.674-8.270-25.943-7.881Q-26.211-7.491-26.211-6.910Q-26.211-6.339-25.977-5.949Q-25.743-5.560-25.203-5.560M-22.503-6.941Q-22.503-7.262-22.378-7.551Q-22.253-7.840-22.027-8.063Q-21.802-8.287-21.506-8.407Q-21.211-8.527-20.893-8.527Q-20.565-8.527-20.303-8.427Q-20.042-8.328-19.866-8.146Q-19.690-7.963-19.596-7.705Q-19.502-7.447-19.502-7.115Q-19.502-7.023-19.584-7.002L-21.839-7.002L-21.839-6.941Q-21.839-6.353-21.556-5.970Q-21.272-5.587-20.705-5.587Q-20.383-5.587-20.115-5.780Q-19.847-5.973-19.758-6.288Q-19.751-6.329-19.676-6.343L-19.584-6.343Q-19.502-6.319-19.502-6.247Q-19.502-6.240-19.508-6.213Q-19.621-5.816-19.992-5.577Q-20.363-5.338-20.787-5.338Q-21.224-5.338-21.624-5.546Q-22.024-5.755-22.263-6.122Q-22.503-6.489-22.503-6.941M-21.833-7.211L-20.018-7.211Q-20.018-7.488-20.115-7.740Q-20.213-7.993-20.411-8.149Q-20.609-8.304-20.893-8.304Q-21.170-8.304-21.383-8.146Q-21.597-7.987-21.715-7.732Q-21.833-7.477-21.833-7.211M-18.955-4.873Q-18.955-5.119-18.758-5.303Q-18.562-5.488-18.305-5.567Q-18.442-5.679-18.514-5.840Q-18.586-6.001-18.586-6.182Q-18.586-6.503-18.374-6.749Q-18.709-7.047-18.709-7.457Q-18.709-7.918-18.319-8.205Q-17.929-8.492-17.451-8.492Q-16.979-8.492-16.644-8.246Q-16.470-8.400-16.260-8.482Q-16.049-8.564-15.820-8.564Q-15.656-8.564-15.535-8.457Q-15.414-8.349-15.414-8.185Q-15.414-8.089-15.485-8.017Q-15.557-7.946-15.650-7.946Q-15.749-7.946-15.819-8.019Q-15.889-8.093-15.889-8.192Q-15.889-8.246-15.875-8.277L-15.868-8.291Q-15.861-8.311-15.853-8.322Q-15.844-8.332-15.841-8.339Q-16.196-8.339-16.484-8.116Q-16.196-7.823-16.196-7.457Q-16.196-7.142-16.381-6.910Q-16.566-6.677-16.854-6.549Q-17.143-6.421-17.451-6.421Q-17.652-6.421-17.844-6.471Q-18.035-6.520-18.213-6.630Q-18.305-6.503-18.305-6.360Q-18.305-6.178-18.177-6.043Q-18.049-5.908-17.864-5.908L-17.232-5.908Q-16.784-5.908-16.415-5.837Q-16.046-5.765-15.786-5.536Q-15.526-5.307-15.526-4.873Q-15.526-4.552-15.822-4.350Q-16.118-4.148-16.521-4.059Q-16.924-3.970-17.239-3.970Q-17.557-3.970-17.960-4.059Q-18.363-4.148-18.659-4.350Q-18.955-4.552-18.955-4.873M-18.500-4.873Q-18.500-4.644-18.281-4.495Q-18.063-4.346-17.770-4.278Q-17.478-4.210-17.239-4.210Q-17.075-4.210-16.866-4.246Q-16.658-4.281-16.451-4.362Q-16.244-4.442-16.113-4.570Q-15.981-4.698-15.981-4.873Q-15.981-5.225-16.362-5.319Q-16.743-5.413-17.246-5.413L-17.864-5.413Q-18.104-5.413-18.302-5.262Q-18.500-5.112-18.500-4.873M-17.451-6.660Q-16.784-6.660-16.784-7.457Q-16.784-8.257-17.451-8.257Q-18.121-8.257-18.121-7.457Q-18.121-6.660-17.451-6.660",[1215],"stroke-width:0.210",[809,1693,1694],{"transform":1686},[1204,1695],{"d":1696,"fill":1197,"stroke":1197,"className":1697,"style":1691},"M-12.964-5.953Q-12.844-5.796-12.653-5.697Q-12.461-5.597-12.246-5.558Q-12.031-5.519-11.808-5.519Q-11.511-5.519-11.316-5.674Q-11.121-5.830-11.031-6.084Q-10.940-6.339-10.940-6.623Q-10.940-6.917-11.032-7.168Q-11.125-7.419-11.323-7.575Q-11.521-7.730-11.815-7.730L-12.331-7.730Q-12.359-7.730-12.384-7.756Q-12.410-7.781-12.410-7.805L-12.410-7.877Q-12.410-7.908-12.384-7.930Q-12.359-7.952-12.331-7.952L-11.890-7.983Q-11.528-7.983-11.308-8.340Q-11.087-8.698-11.087-9.087Q-11.087-9.415-11.282-9.619Q-11.477-9.822-11.808-9.822Q-12.095-9.822-12.348-9.738Q-12.601-9.655-12.765-9.467Q-12.618-9.467-12.518-9.352Q-12.417-9.238-12.417-9.087Q-12.417-8.937-12.523-8.827Q-12.629-8.718-12.786-8.718Q-12.947-8.718-13.056-8.827Q-13.165-8.937-13.165-9.087Q-13.165-9.412-12.957-9.631Q-12.748-9.849-12.432-9.952Q-12.116-10.054-11.808-10.054Q-11.490-10.054-11.162-9.950Q-10.834-9.846-10.607-9.624Q-10.380-9.402-10.380-9.087Q-10.380-8.653-10.667-8.328Q-10.954-8.004-11.388-7.857Q-11.077-7.792-10.797-7.626Q-10.516-7.460-10.339-7.202Q-10.161-6.944-10.161-6.623Q-10.161-6.213-10.405-5.903Q-10.650-5.594-11.031-5.430Q-11.412-5.266-11.808-5.266Q-12.177-5.266-12.535-5.379Q-12.892-5.491-13.136-5.741Q-13.381-5.990-13.381-6.360Q-13.381-6.531-13.264-6.643Q-13.148-6.756-12.977-6.756Q-12.868-6.756-12.777-6.705Q-12.687-6.654-12.632-6.561Q-12.577-6.469-12.577-6.360Q-12.577-6.192-12.690-6.073Q-12.803-5.953-12.964-5.953",[1215],[809,1699,1700,1706],{"stroke":1206,"fontFamily":1682,"fontSize":1683},[809,1701,1703],{"transform":1702},"translate(59.577 -53.733)",[1204,1704],{"d":1689,"fill":1197,"stroke":1197,"className":1705,"style":1691},[1215],[809,1707,1708],{"transform":1702},[1204,1709],{"d":1710,"fill":1197,"stroke":1197,"className":1711,"style":1691},"M-10.434-5.406L-13.319-5.406L-13.319-5.608Q-13.319-5.638-13.292-5.666L-12.044-6.883Q-11.972-6.958-11.930-7Q-11.887-7.043-11.808-7.122Q-11.395-7.535-11.164-7.893Q-10.933-8.250-10.933-8.674Q-10.933-8.906-11.012-9.109Q-11.091-9.313-11.232-9.463Q-11.374-9.614-11.569-9.694Q-11.764-9.774-11.996-9.774Q-12.307-9.774-12.565-9.615Q-12.823-9.456-12.953-9.179L-12.933-9.179Q-12.765-9.179-12.658-9.068Q-12.550-8.957-12.550-8.793Q-12.550-8.636-12.659-8.523Q-12.769-8.410-12.933-8.410Q-13.093-8.410-13.206-8.523Q-13.319-8.636-13.319-8.793Q-13.319-9.169-13.111-9.456Q-12.902-9.743-12.567-9.899Q-12.232-10.054-11.877-10.054Q-11.453-10.054-11.073-9.896Q-10.694-9.737-10.460-9.420Q-10.226-9.104-10.226-8.674Q-10.226-8.363-10.366-8.094Q-10.506-7.826-10.711-7.621Q-10.916-7.416-11.279-7.134Q-11.641-6.852-11.750-6.756L-12.605-6.028L-11.962-6.028Q-11.699-6.028-11.410-6.030Q-11.121-6.031-10.903-6.040Q-10.684-6.049-10.667-6.066Q-10.605-6.131-10.568-6.298Q-10.530-6.466-10.492-6.708L-10.226-6.708",[1215],[809,1713,1714,1720],{"stroke":1206,"fontFamily":1682,"fontSize":1683},[809,1715,1717],{"transform":1716},"translate(154.894 1.75)",[1204,1718],{"d":1689,"fill":1197,"stroke":1197,"className":1719,"style":1691},[1215],[809,1721,1722],{"transform":1716},[1204,1723],{"d":1710,"fill":1197,"stroke":1197,"className":1724,"style":1691},[1215],[809,1726,1727,1733],{"stroke":1206,"fontFamily":1682,"fontSize":1683},[809,1728,1730],{"transform":1729},"translate(59.577 71.46)",[1204,1731],{"d":1689,"fill":1197,"stroke":1197,"className":1732,"style":1691},[1215],[809,1734,1735],{"transform":1729},[1204,1736],{"d":1696,"fill":1197,"stroke":1197,"className":1737,"style":1691},[1215],[1204,1739],{"fill":1206,"d":1740},"m-16.301-10.398 45.05-20.648",[1204,1742],{"stroke":1206,"d":1743},"M30.567-31.88 26.99-32l1.758.954-.424 1.954",[809,1745,1747],{"transform":1746},"translate(24.01 -21.344)",[1204,1748],{"d":1749,"fill":1201,"stroke":1201,"className":1750,"style":1284},"M-23.598-5.406L-26.391-5.406L-26.391-5.703Q-25.329-5.703-25.329-5.965L-25.329-10.133Q-25.758-9.918-26.438-9.918L-26.438-10.215Q-25.419-10.215-24.903-10.726L-24.758-10.726Q-24.684-10.707-24.665-10.629L-24.665-5.965Q-24.665-5.703-23.598-5.703",[1215],[1204,1752],{"fill":1206,"d":1753},"m51.621-31.88 45.414 20.816",[1204,1755],{"stroke":1206,"d":1756},"m98.853-10.231-2.242-2.788.424 1.955-1.757.954",[809,1758,1760],{"transform":1759},"translate(108.494 -21.26)",[1204,1761],{"d":1762,"fill":1201,"stroke":1201,"className":1763,"style":1284},"M-23.606-5.406L-26.766-5.406L-26.766-5.613Q-26.766-5.640-26.743-5.672L-25.391-7.070Q-25.012-7.457-24.764-7.746Q-24.516-8.035-24.342-8.392Q-24.169-8.750-24.169-9.140Q-24.169-9.488-24.301-9.781Q-24.434-10.074-24.688-10.252Q-24.942-10.429-25.297-10.429Q-25.657-10.429-25.948-10.234Q-26.239-10.039-26.383-9.711L-26.329-9.711Q-26.145-9.711-26.020-9.590Q-25.895-9.468-25.895-9.277Q-25.895-9.097-26.020-8.968Q-26.145-8.840-26.329-8.840Q-26.508-8.840-26.637-8.968Q-26.766-9.097-26.766-9.277Q-26.766-9.679-26.546-10.015Q-26.325-10.351-25.960-10.539Q-25.594-10.726-25.192-10.726Q-24.712-10.726-24.296-10.539Q-23.880-10.351-23.628-9.990Q-23.376-9.629-23.376-9.140Q-23.376-8.781-23.530-8.478Q-23.684-8.176-23.936-7.916Q-24.188-7.656-24.538-7.371Q-24.887-7.086-25.055-6.933L-25.985-6.093L-25.270-6.093Q-23.895-6.093-23.856-6.133Q-23.786-6.211-23.743-6.396Q-23.700-6.582-23.657-6.871L-23.376-6.871",[1215],[1204,1765],{"fill":1206,"d":1766},"M99.745 1.018 52.727 32.364",[1204,1768],{"stroke":1206,"d":1769},"m51.063 33.473 3.55-.444-1.886-.666.11-1.996",[809,1771,1773],{"transform":1772},"translate(112.052 25.23)",[1204,1774],{"d":1775,"fill":1201,"stroke":1201,"className":1776,"style":1284},"M-26.399-6.039Q-26.208-5.765-25.852-5.638Q-25.497-5.511-25.114-5.511Q-24.778-5.511-24.569-5.697Q-24.360-5.883-24.264-6.176Q-24.169-6.468-24.169-6.781Q-24.169-7.105-24.266-7.400Q-24.364-7.695-24.577-7.879Q-24.790-8.062-25.122-8.062L-25.688-8.062Q-25.719-8.062-25.749-8.092Q-25.778-8.121-25.778-8.148L-25.778-8.230Q-25.778-8.265-25.749-8.291Q-25.719-8.316-25.688-8.316L-25.208-8.351Q-24.922-8.351-24.725-8.556Q-24.528-8.761-24.432-9.056Q-24.337-9.351-24.337-9.629Q-24.337-10.008-24.536-10.246Q-24.735-10.484-25.114-10.484Q-25.434-10.484-25.723-10.377Q-26.012-10.269-26.176-10.047Q-25.997-10.047-25.874-9.920Q-25.751-9.793-25.751-9.621Q-25.751-9.449-25.876-9.324Q-26.001-9.199-26.176-9.199Q-26.348-9.199-26.473-9.324Q-26.598-9.449-26.598-9.621Q-26.598-9.988-26.374-10.236Q-26.149-10.484-25.809-10.605Q-25.469-10.726-25.114-10.726Q-24.766-10.726-24.403-10.605Q-24.040-10.484-23.792-10.234Q-23.544-9.984-23.544-9.629Q-23.544-9.144-23.862-8.761Q-24.180-8.379-24.657-8.207Q-24.106-8.097-23.706-7.711Q-23.305-7.324-23.305-6.789Q-23.305-6.332-23.569-5.976Q-23.833-5.621-24.255-5.429Q-24.676-5.238-25.114-5.238Q-25.524-5.238-25.917-5.373Q-26.309-5.508-26.575-5.793Q-26.840-6.078-26.840-6.496Q-26.840-6.691-26.708-6.820Q-26.575-6.949-26.383-6.949Q-26.258-6.949-26.155-6.890Q-26.051-6.832-25.989-6.726Q-25.926-6.621-25.926-6.496Q-25.926-6.301-26.061-6.170Q-26.196-6.039-26.399-6.039",[1215],[1204,1778],{"fill":1206,"d":1779},"M31.126 33.473-15.56 2.349",[1204,1781],{"stroke":1206,"d":1782},"m-17.224 1.24 1.775 3.106-.11-1.997 1.885-.666",[809,1784,1786],{"transform":1785},"translate(32.018 36.921)",[1204,1787],{"d":1788,"fill":1201,"stroke":1201,"className":1789,"style":1284},"M-24.712-6.718L-26.954-6.718L-26.954-7.015L-24.383-10.672Q-24.344-10.726-24.282-10.726L-24.137-10.726Q-24.087-10.726-24.055-10.695Q-24.024-10.664-24.024-10.613L-24.024-7.015L-23.192-7.015L-23.192-6.718L-24.024-6.718L-24.024-5.965Q-24.024-5.703-23.200-5.703L-23.200-5.406L-25.536-5.406L-25.536-5.703Q-24.712-5.703-24.712-5.965L-24.712-6.718M-24.657-9.820L-26.626-7.015L-24.657-7.015",[1215],[1204,1791],{"fill":1206,"d":1792},"m-17.224 1.24 46.686 31.124",[1204,1794],{"stroke":1206,"d":1795},"m31.126 33.473-1.775-3.106.11 1.996-1.885.666",[809,1797,1799],{"transform":1798},"translate(20.437 25.34)",[1204,1800],{"d":1801,"fill":1201,"stroke":1201,"className":1802,"style":1284},"M-26.352-6.285L-26.415-6.285Q-26.274-5.933-25.950-5.722Q-25.626-5.511-25.239-5.511Q-24.645-5.511-24.395-5.945Q-24.145-6.379-24.145-7.015Q-24.145-7.609-24.315-8.056Q-24.485-8.504-24.985-8.504Q-25.282-8.504-25.487-8.424Q-25.692-8.343-25.794-8.252Q-25.895-8.160-26.010-8.027Q-26.126-7.894-26.176-7.879L-26.247-7.879Q-26.333-7.902-26.352-7.980L-26.352-10.629Q-26.321-10.726-26.247-10.726Q-26.231-10.726-26.223-10.724Q-26.215-10.722-26.208-10.718Q-25.622-10.468-25.024-10.468Q-24.442-10.468-23.825-10.726L-23.801-10.726Q-23.758-10.726-23.731-10.701Q-23.704-10.676-23.704-10.636L-23.704-10.558Q-23.704-10.527-23.727-10.504Q-24.024-10.152-24.446-9.955Q-24.868-9.758-25.329-9.758Q-25.676-9.758-26.055-9.863L-26.055-8.367Q-25.837-8.562-25.561-8.660Q-25.286-8.758-24.985-8.758Q-24.528-8.758-24.159-8.510Q-23.790-8.261-23.583-7.857Q-23.376-7.453-23.376-7.008Q-23.376-6.519-23.631-6.111Q-23.887-5.703-24.319-5.470Q-24.751-5.238-25.239-5.238Q-25.633-5.238-25.989-5.429Q-26.344-5.621-26.555-5.955Q-26.766-6.289-26.766-6.703Q-26.766-6.883-26.649-6.996Q-26.532-7.109-26.352-7.109Q-26.235-7.109-26.143-7.056Q-26.051-7.004-25.999-6.912Q-25.946-6.820-25.946-6.703Q-25.946-6.519-26.059-6.402Q-26.172-6.285-26.352-6.285",[1215],[1306,1804,1806,1807,1830],{"className":1805},[1309],"Eulerian path ",[454,1808,1810],{"className":1809},[457],[454,1811,1813],{"className":1812,"ariaHidden":462},[461],[454,1814,1816,1820,1823,1827],{"className":1815},[466],[454,1817],{"className":1818,"style":1819},[470],"height:0.3669em;",[454,1821],{"className":1822,"style":1010},[1009],[454,1824,1826],{"className":1825},[1014],"↔",[454,1828],{"className":1829,"style":1010},[1009]," 0 or 2 odd-degree vertices",[381,1832,1833,1834,1849,1850,1866,1867,1883,1884,1886,1887,1849,1902,1917,1918,1972,1973,2111,2112,2127],{},"Here ",[454,1835,1837],{"className":1836},[457],[454,1838,1840],{"className":1839,"ariaHidden":462},[461],[454,1841,1843,1846],{"className":1842},[466],[454,1844],{"className":1845,"style":583},[470],[454,1847,390],{"className":1848},[475,476]," and ",[454,1851,1853],{"className":1852},[457],[454,1854,1856],{"className":1855,"ariaHidden":462},[461],[454,1857,1859,1862],{"className":1858},[466],[454,1860],{"className":1861,"style":514},[470],[454,1863,1865],{"className":1864},[475,476],"d"," each have odd degree ",[454,1868,1870],{"className":1869},[457],[454,1871,1873],{"className":1872,"ariaHidden":462},[461],[454,1874,1876,1879],{"className":1875},[466],[454,1877],{"className":1878,"style":702},[470],[454,1880,1882],{"className":1881},[475],"3","; the other two are even, so an Eulerian\n",[395,1885,1204],{}," exists and must run between ",[454,1888,1890],{"className":1889},[457],[454,1891,1893],{"className":1892,"ariaHidden":462},[461],[454,1894,1896,1899],{"className":1895},[466],[454,1897],{"className":1898,"style":583},[470],[454,1900,390],{"className":1901},[475,476],[454,1903,1905],{"className":1904},[457],[454,1906,1908],{"className":1907,"ariaHidden":462},[461],[454,1909,1911,1914],{"className":1910},[466],[454,1912],{"className":1913,"style":514},[470],[454,1915,1865],{"className":1916},[475,476],". The numbering ",[454,1919,1921],{"className":1920},[457],[454,1922,1924],{"className":1923,"ariaHidden":462},[461],[454,1925,1927,1931,1934,1937,1940,1943,1946,1949,1952,1955,1958,1962,1965,1968],{"className":1926},[466],[454,1928],{"className":1929,"style":1930},[470],"height:0.8389em;vertical-align:-0.1944em;",[454,1932,554],{"className":1933},[475],[454,1935,1491],{"className":1936},[1490],[454,1938],{"className":1939,"style":1495},[1009],[454,1941,723],{"className":1942},[475],[454,1944,1491],{"className":1945},[1490],[454,1947],{"className":1948,"style":1495},[1009],[454,1950,1882],{"className":1951},[475],[454,1953,1491],{"className":1954},[1490],[454,1956],{"className":1957,"style":1495},[1009],[454,1959,1961],{"className":1960},[475],"4",[454,1963,1491],{"className":1964},[1490],[454,1966],{"className":1967,"style":1495},[1009],[454,1969,1971],{"className":1970},[475],"5"," is one\nvalid traversal ",[454,1974,1976],{"className":1975},[457],[454,1977,1979,2005,2029,2054,2078,2102],{"className":1978,"ariaHidden":462},[461],[454,1980,1982,1985,1988,1992,1995,1999,2002],{"className":1981},[466],[454,1983],{"className":1984,"style":583},[470],[454,1986,390],{"className":1987},[475,476],[454,1989],{"className":1990,"style":1991},[1009],"margin-right:-0.1667em;",[454,1993],{"className":1994,"style":1010},[1009],[454,1996,1998],{"className":1997},[1014],"→",[454,2000],{"className":2001,"style":1991},[1009],[454,2003],{"className":2004,"style":1010},[1009],[454,2006,2008,2011,2014,2017,2020,2023,2026],{"className":2007},[466],[454,2009],{"className":2010,"style":514},[470],[454,2012,1499],{"className":2013},[475,476],[454,2015],{"className":2016,"style":1991},[1009],[454,2018],{"className":2019,"style":1010},[1009],[454,2021,1998],{"className":2022},[1014],[454,2024],{"className":2025,"style":1991},[1009],[454,2027],{"className":2028,"style":1010},[1009],[454,2030,2032,2035,2039,2042,2045,2048,2051],{"className":2031},[466],[454,2033],{"className":2034,"style":583},[470],[454,2036,2038],{"className":2037},[475,476],"c",[454,2040],{"className":2041,"style":1991},[1009],[454,2043],{"className":2044,"style":1010},[1009],[454,2046,1998],{"className":2047},[1014],[454,2049],{"className":2050,"style":1991},[1009],[454,2052],{"className":2053,"style":1010},[1009],[454,2055,2057,2060,2063,2066,2069,2072,2075],{"className":2056},[466],[454,2058],{"className":2059,"style":514},[470],[454,2061,1865],{"className":2062},[475,476],[454,2064],{"className":2065,"style":1991},[1009],[454,2067],{"className":2068,"style":1010},[1009],[454,2070,1998],{"className":2071},[1014],[454,2073],{"className":2074,"style":1991},[1009],[454,2076],{"className":2077,"style":1010},[1009],[454,2079,2081,2084,2087,2090,2093,2096,2099],{"className":2080},[466],[454,2082],{"className":2083,"style":583},[470],[454,2085,390],{"className":2086},[475,476],[454,2088],{"className":2089,"style":1991},[1009],[454,2091],{"className":2092,"style":1010},[1009],[454,2094,1998],{"className":2095},[1014],[454,2097],{"className":2098,"style":1991},[1009],[454,2100],{"className":2101,"style":1010},[1009],[454,2103,2105,2108],{"className":2104},[466],[454,2106],{"className":2107,"style":514},[470],[454,2109,1865],{"className":2110},[475,476],", which crosses all\nfive edges once and stops at ",[454,2113,2115],{"className":2114},[457],[454,2116,2118],{"className":2117,"ariaHidden":462},[461],[454,2119,2121,2124],{"className":2120},[466],[454,2122],{"className":2123,"style":514},[470],[454,2125,1865],{"className":2126},[475,476],".",[560,2129,2131],{"id":2130},"hierholzers-algorithm","Hierholzer's algorithm",[381,2133,2134,2135,2138,2139,2141,2142,2144],{},"The natural greedy idea is ",[385,2136,2137],{},"almost"," right: start somewhere, keep walking along\nedges you have not used, and never look back. Because every vertex is balanced (or\nyou begin at an odd endpoint), you can always leave a vertex you entered, so the\nwalk only ever gets stuck back at its starting vertex, closing a loop. But that\nfirst loop may not have swallowed ",[385,2140,678],{}," edge. ",[395,2143,2131],{}," fixes\nthis with one elegant move: whenever a vertex on the current tour still has unused\nedges hanging off it, splice a fresh closed sub-tour in at that vertex, and repeat\nuntil nothing is left over.",[405,2146,2148],{"type":2147},"note",[381,2149,2150,2153,2154,2170,2171,2174,2175,2190,2191,2206,2207,2210,2211,2226],{},[395,2151,2152],{},"Intuition."," A closed walk through a balanced vertex always uses its edges in\npairs, so an unused edge at a visited vertex ",[454,2155,2157],{"className":2156},[457],[454,2158,2160],{"className":2159,"ariaHidden":462},[461],[454,2161,2163,2166],{"className":2162},[466],[454,2164],{"className":2165,"style":583},[470],[454,2167,2169],{"className":2168},[475,476],"u"," implies an ",[385,2172,2173],{},"even"," number of\nunused edges at ",[454,2176,2178],{"className":2177},[457],[454,2179,2181],{"className":2180,"ariaHidden":462},[461],[454,2182,2184,2187],{"className":2183},[466],[454,2185],{"className":2186,"style":583},[470],[454,2188,2169],{"className":2189},[475,476]," — enough to walk out and circle back to ",[454,2192,2194],{"className":2193},[457],[454,2195,2197],{"className":2196,"ariaHidden":462},[461],[454,2198,2200,2203],{"className":2199},[466],[454,2201],{"className":2202,"style":583},[470],[454,2204,2169],{"className":2205},[475,476],". That returning\nloop is another closed sub-tour, and it can be ",[395,2208,2209],{},"spliced"," into the route\nexactly at ",[454,2212,2214],{"className":2213},[457],[454,2215,2217],{"className":2216,"ariaHidden":462},[461],[454,2218,2220,2223],{"className":2219},[466],[454,2221],{"className":2222,"style":583},[470],[454,2224,2169],{"className":2225},[475,476],". Splicing never breaks closure, and every splice consumes at\nleast one fresh edge, so the process halts having consumed them all.",[1183,2228,2230,2353],{"className":2229},[1186,1187],[1189,2231,2235],{"xmlns":1191,"width":2232,"height":2233,"viewBox":2234},"211.434","169.499","-75 -75 158.575 127.124",[809,2236,2237,2240,2246,2249,2256,2259,2266,2269,2272,2275,2278,2281,2284,2296,2308,2316,2324,2332],{"stroke":1197,"style":1198},[1204,2238],{"fill":1206,"d":2239},"M-45.486 10.243c0-5.5-4.459-9.958-9.959-9.958s-9.958 4.458-9.958 9.958 4.458 9.958 9.958 9.958 9.959-4.458 9.959-9.958Zm-9.959 0",[809,2241,2242],{"transform":1210},[1204,2243],{"d":2244,"fill":1197,"stroke":1197,"className":2245,"style":1216},"M-54.610 9.694Q-54.390 10.080-53.634 10.080Q-53.336 10.080-53.041 9.979Q-52.747 9.878-52.553 9.665Q-52.360 9.452-52.360 9.144Q-52.360 8.916-52.538 8.769Q-52.716 8.621-52.962 8.569L-53.472 8.472Q-53.687 8.432-53.863 8.309Q-54.039 8.186-54.144 8Q-54.250 7.813-54.250 7.597Q-54.250 7.198-54.026 6.892Q-53.801 6.587-53.443 6.426Q-53.085 6.266-52.681 6.266Q-52.417 6.266-52.169 6.345Q-51.921 6.424-51.751 6.604Q-51.582 6.785-51.582 7.048Q-51.582 7.255-51.703 7.413Q-51.824 7.571-52.035 7.571Q-52.158 7.571-52.244 7.490Q-52.329 7.409-52.329 7.290Q-52.329 7.127-52.206 6.993Q-52.083 6.859-51.925 6.859Q-52.013 6.679-52.230 6.602Q-52.448 6.525-52.698 6.525Q-52.940 6.525-53.166 6.613Q-53.393 6.701-53.538 6.870Q-53.683 7.039-53.683 7.290Q-53.683 7.466-53.551 7.584Q-53.419 7.703-53.221 7.751L-52.716 7.848Q-52.329 7.927-52.061 8.197Q-51.793 8.468-51.793 8.850Q-51.793 9.180-51.982 9.500Q-52.171 9.821-52.448 10.019Q-52.949 10.344-53.643 10.344Q-53.955 10.344-54.256 10.258Q-54.557 10.173-54.762 9.975Q-54.966 9.777-54.966 9.470Q-54.966 9.219-54.823 9.035Q-54.680 8.850-54.439 8.850Q-54.285 8.850-54.186 8.942Q-54.087 9.035-54.087 9.180Q-54.087 9.390-54.239 9.542Q-54.390 9.694-54.610 9.694",[1215],[1204,2247],{"fill":1206,"d":2248},"M11.419-18.21c0-5.5-4.458-9.958-9.958-9.958s-9.959 4.458-9.959 9.958S-4.039-8.25 1.461-8.25s9.958-4.459 9.958-9.959Zm-9.958 0",[809,2250,2252],{"transform":2251},"translate(54.244 -26.515)",[1204,2253],{"d":2254,"fill":1197,"stroke":1197,"className":2255,"style":1216},"M-54.447 9.245Q-54.447 8.960-54.371 8.641Q-54.294 8.323-54.179 8.022Q-54.065 7.721-53.907 7.316Q-53.788 7.031-53.788 6.798Q-53.788 6.679-53.834 6.602Q-53.881 6.525-53.986 6.525Q-54.338 6.525-54.573 6.886Q-54.808 7.246-54.913 7.677Q-54.931 7.760-55.006 7.760L-55.111 7.760Q-55.159 7.760-55.181 7.721Q-55.203 7.681-55.203 7.641Q-55.115 7.299-54.955 6.993Q-54.795 6.688-54.544 6.477Q-54.294 6.266-53.968 6.266Q-53.630 6.266-53.399 6.475Q-53.169 6.683-53.169 7.022Q-53.169 7.202-53.230 7.356Q-53.261 7.444-53.413 7.839Q-53.564 8.235-53.634 8.465Q-53.705 8.696-53.751 8.920Q-53.797 9.144-53.797 9.368Q-53.797 9.667-53.667 9.874Q-53.538 10.080-53.257 10.080Q-52.663 10.080-52.233 9.368Q-52.233 9.342-52.215 9.254L-51.573 6.679Q-51.538 6.538-51.424 6.451Q-51.310 6.363-51.169 6.363Q-51.055 6.363-50.974 6.440Q-50.892 6.516-50.892 6.635Q-50.892 6.688-50.901 6.714L-51.538 9.289Q-51.591 9.492-51.591 9.685Q-51.591 10.080-51.332 10.080Q-51.046 10.080-50.908 9.746Q-50.769 9.412-50.655 8.929Q-50.646 8.898-50.622 8.874Q-50.598 8.850-50.567 8.850L-50.457 8.850Q-50.413 8.850-50.391 8.883Q-50.369 8.916-50.369 8.964Q-50.484 9.395-50.574 9.648Q-50.664 9.900-50.857 10.122Q-51.050 10.344-51.349 10.344Q-51.635 10.344-51.870 10.195Q-52.105 10.045-52.206 9.777Q-52.417 10.036-52.685 10.190Q-52.953 10.344-53.265 10.344Q-53.630 10.344-53.894 10.217Q-54.157 10.089-54.302 9.843Q-54.447 9.597-54.447 9.245",[1215],[1204,2257],{"fill":1206,"d":2258},"M11.419 38.696c0-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",[809,2260,2262],{"transform":2261},"translate(54.678 29.515)",[1204,2263],{"d":2264,"fill":1197,"stroke":1197,"className":2265,"style":1216},"M-54.043 11.882Q-54.043 11.812-54.010 11.744Q-53.977 11.676-53.916 11.676Q-53.555 11.676-53.402 11.645Q-53.318 11.627-53.274 11.588Q-53.230 11.548-53.208 11.500Q-53.186 11.451-53.160 11.342L-52.791 9.856Q-53.314 10.344-53.823 10.344Q-54.219 10.344-54.505 10.140Q-54.790 9.935-54.937 9.601Q-55.085 9.267-55.085 8.876Q-55.085 8.441-54.911 7.980Q-54.737 7.518-54.425 7.127Q-54.113 6.736-53.703 6.501Q-53.292 6.266-52.852 6.266Q-52.575 6.266-52.342 6.429Q-52.110 6.591-51.991 6.850Q-51.899 6.705-51.677 6.486Q-51.455 6.266-51.349 6.266Q-51.305 6.266-51.275 6.297Q-51.244 6.327-51.244 6.371L-51.244 6.411L-52.492 11.403Q-52.501 11.456-52.509 11.498Q-52.518 11.539-52.518 11.566Q-52.518 11.676-51.943 11.676Q-51.899 11.676-51.872 11.706Q-51.846 11.737-51.846 11.790Q-51.846 11.988-52.008 11.988L-53.942 11.988Q-53.977 11.988-54.010 11.950Q-54.043 11.913-54.043 11.882M-53.806 10.080Q-53.472 10.080-53.166 9.843Q-52.861 9.606-52.646 9.281L-52.140 7.290Q-52.197 6.973-52.389 6.749Q-52.580 6.525-52.870 6.525Q-53.239 6.525-53.538 6.844Q-53.837 7.162-54.004 7.571Q-54.140 7.918-54.265 8.428Q-54.390 8.938-54.390 9.263Q-54.390 9.588-54.252 9.834Q-54.113 10.080-53.806 10.080",[1215],[1204,2267],{"fill":1206,"d":2268},"m-46.36 5.7 36.947-18.473",[1204,2270],{"stroke":1206,"d":2271},"M-7.625-13.667h-3.577l1.789.894-.358 1.968",[1204,2273],{"fill":1206,"d":2274},"M1.46-8.051v34.588",[1204,2276],{"stroke":1206,"d":2277},"m1.46 28.537 1.6-3.2-1.6 1.2-1.6-1.2",[1204,2279],{"fill":1206,"d":2280},"M-7.625 34.153-44.57 15.68",[1204,2282],{"stroke":1206,"d":2283},"m-46.36 14.786 2.147 2.861-.358-1.967 1.789-.894",[809,2285,2286,2289],{"stroke":1201,"style":1637},[1204,2287],{"fill":1206,"d":2288},"M79.705-43.817c0-5.5-4.458-9.958-9.958-9.958s-9.958 4.458-9.958 9.958 4.458 9.958 9.958 9.958 9.958-4.458 9.958-9.958Zm-9.958 0",[809,2290,2292],{"transform":2291},"translate(122.57 -52.123)",[1204,2293],{"d":2294,"fill":1201,"stroke":1201,"className":2295,"style":1216},"M-54.716 9.953Q-54.540 10.080-54.267 10.080Q-53.977 10.080-53.764 9.826Q-53.551 9.571-53.472 9.254L-53.068 7.641Q-52.980 7.264-52.980 7.075Q-52.980 6.850-53.107 6.688Q-53.235 6.525-53.454 6.525Q-53.872 6.525-54.204 6.875Q-54.535 7.224-54.654 7.677Q-54.672 7.760-54.742 7.760L-54.852 7.760Q-54.940 7.760-54.940 7.641Q-54.808 7.101-54.386 6.683Q-53.964 6.266-53.437 6.266Q-53.103 6.266-52.828 6.437Q-52.553 6.609-52.439 6.903Q-52.281 6.631-52.035 6.448Q-51.789 6.266-51.503 6.266Q-51.165 6.266-50.892 6.433Q-50.620 6.600-50.620 6.921Q-50.620 7.149-50.763 7.318Q-50.905 7.488-51.143 7.488Q-51.283 7.488-51.389 7.395Q-51.494 7.303-51.494 7.158Q-51.494 6.973-51.371 6.831Q-51.248 6.688-51.064 6.653Q-51.244 6.525-51.521 6.525Q-51.811 6.525-52.022 6.782Q-52.233 7.039-52.312 7.356L-52.716 8.964Q-52.808 9.325-52.808 9.522Q-52.808 9.755-52.679 9.918Q-52.549 10.080-52.320 10.080Q-52.035 10.080-51.787 9.911Q-51.538 9.742-51.365 9.470Q-51.191 9.197-51.125 8.929Q-51.116 8.898-51.092 8.874Q-51.068 8.850-51.033 8.850L-50.927 8.850Q-50.888 8.850-50.862 8.887Q-50.835 8.925-50.835 8.964Q-50.923 9.311-51.143 9.630Q-51.362 9.949-51.679 10.146Q-51.995 10.344-52.338 10.344Q-52.676 10.344-52.951 10.175Q-53.226 10.006-53.349 9.702Q-53.498 9.971-53.747 10.157Q-53.995 10.344-54.276 10.344Q-54.619 10.344-54.893 10.177Q-55.168 10.010-55.168 9.685Q-55.168 9.461-55.019 9.289Q-54.869 9.118-54.636 9.118Q-54.491 9.118-54.388 9.210Q-54.285 9.303-54.285 9.452Q-54.285 9.628-54.408 9.775Q-54.531 9.922-54.716 9.953",[1215],[809,2297,2298,2301],{"stroke":1201,"style":1637},[1204,2299],{"fill":1206,"d":2300},"M79.705 7.398c0-5.5-4.458-9.959-9.958-9.959s-9.958 4.459-9.958 9.959 4.458 9.958 9.958 9.958 9.958-4.458 9.958-9.958Zm-9.958 0",[809,2302,2304],{"transform":2303},"translate(122.753 -1.783)",[1204,2305],{"d":2306,"fill":1201,"stroke":1201,"className":2307,"style":1216},"M-54.588 11.539Q-54.500 11.693-54.327 11.759Q-54.153 11.825-53.951 11.825Q-53.626 11.825-53.362 11.649Q-53.098 11.473-52.916 11.203Q-52.734 10.933-52.602 10.603Q-52.470 10.274-52.395 9.975Q-52.795 10.344-53.265 10.344Q-53.630 10.344-53.894 10.217Q-54.157 10.089-54.302 9.843Q-54.447 9.597-54.447 9.245Q-54.447 8.960-54.371 8.641Q-54.294 8.323-54.179 8.022Q-54.065 7.721-53.907 7.316Q-53.788 7.031-53.788 6.798Q-53.788 6.679-53.834 6.602Q-53.881 6.525-53.986 6.525Q-54.338 6.525-54.573 6.886Q-54.808 7.246-54.913 7.677Q-54.931 7.760-55.006 7.760L-55.111 7.760Q-55.159 7.760-55.181 7.721Q-55.203 7.681-55.203 7.641Q-55.115 7.299-54.955 6.993Q-54.795 6.688-54.544 6.477Q-54.294 6.266-53.968 6.266Q-53.630 6.266-53.399 6.472Q-53.169 6.679-53.169 7.022Q-53.169 7.202-53.230 7.356Q-53.261 7.444-53.413 7.839Q-53.564 8.235-53.634 8.465Q-53.705 8.696-53.751 8.920Q-53.797 9.144-53.797 9.368Q-53.797 9.667-53.667 9.874Q-53.538 10.080-53.257 10.080Q-52.681 10.080-52.250 9.386L-51.573 6.679Q-51.538 6.538-51.424 6.451Q-51.310 6.363-51.169 6.363Q-51.055 6.363-50.974 6.440Q-50.892 6.516-50.892 6.635Q-50.892 6.688-50.901 6.714L-51.780 10.261Q-51.907 10.748-52.233 11.166Q-52.558 11.583-53.015 11.836Q-53.472 12.089-53.960 12.089Q-54.210 12.089-54.441 11.999Q-54.672 11.909-54.814 11.728Q-54.957 11.548-54.957 11.298Q-54.957 11.047-54.810 10.869Q-54.663 10.691-54.430 10.691Q-54.285 10.691-54.182 10.784Q-54.078 10.876-54.078 11.025Q-54.078 11.227-54.230 11.383Q-54.382 11.539-54.588 11.539",[1215],[809,2309,2310,2313],{"stroke":1201,"style":1637},[1204,2311],{"fill":1206,"d":2312},"m10.972-21.776 45.893-17.21",[1204,2314],{"stroke":1206,"d":2315},"m59.861-40.11-5.692-.6 2.696 1.724-.899 3.07",[809,2317,2318,2321],{"stroke":1201,"style":1637},[1204,2319],{"fill":1206,"d":2320},"M69.747-33.259V-6.36",[1204,2322],{"stroke":1206,"d":2323},"m69.747-3.16 2.56-5.12-2.56 1.92-2.56-1.92",[809,2325,2326,2329],{"stroke":1201,"style":1637},[1204,2327],{"fill":1206,"d":2328},"M59.861 3.69 13.968-13.52",[1204,2330],{"stroke":1206,"d":2331},"m10.972-14.643 3.895 4.194-.9-3.07 2.697-1.723",[809,2333,2334,2341,2347],{"fill":1201,"stroke":1206,"fontSize":1276},[809,2335,2337],{"transform":2336},"translate(37.657 -70.555)",[1204,2338],{"d":2339,"fill":1201,"stroke":1201,"className":2340,"style":1284},"M-55.164 10.235L-55.164 9.013Q-55.164 8.985-55.133 8.954Q-55.101 8.923-55.078 8.923L-54.972 8.923Q-54.902 8.923-54.886 8.985Q-54.824 9.306-54.685 9.546Q-54.547 9.786-54.314 9.927Q-54.082 10.067-53.773 10.067Q-53.535 10.067-53.326 10.007Q-53.117 9.946-52.980 9.798Q-52.843 9.649-52.843 9.403Q-52.843 9.149-53.054 8.983Q-53.265 8.817-53.535 8.763L-54.156 8.649Q-54.562 8.571-54.863 8.315Q-55.164 8.059-55.164 7.684Q-55.164 7.317-54.963 7.095Q-54.761 6.872-54.437 6.774Q-54.113 6.677-53.773 6.677Q-53.308 6.677-53.011 6.884L-52.789 6.700Q-52.765 6.677-52.734 6.677L-52.683 6.677Q-52.652 6.677-52.625 6.704Q-52.597 6.731-52.597 6.763L-52.597 7.747Q-52.597 7.778-52.623 7.807Q-52.648 7.837-52.683 7.837L-52.789 7.837Q-52.824 7.837-52.851 7.809Q-52.879 7.782-52.879 7.747Q-52.879 7.348-53.131 7.128Q-53.383 6.907-53.781 6.907Q-54.136 6.907-54.420 7.030Q-54.703 7.153-54.703 7.458Q-54.703 7.677-54.502 7.809Q-54.300 7.942-54.054 7.985L-53.429 8.098Q-53 8.188-52.691 8.485Q-52.383 8.782-52.383 9.196Q-52.383 9.766-52.781 10.044Q-53.179 10.321-53.773 10.321Q-54.324 10.321-54.675 9.985L-54.972 10.298Q-54.996 10.321-55.031 10.321L-55.078 10.321Q-55.101 10.321-55.133 10.290Q-55.164 10.259-55.164 10.235M-49.972 11.794L-51.828 11.794L-51.828 11.501Q-51.558 11.501-51.390 11.456Q-51.222 11.411-51.222 11.235L-51.222 7.411Q-51.222 7.204-51.379 7.151Q-51.535 7.098-51.828 7.098L-51.828 6.802L-50.605 6.716L-50.605 7.181Q-50.375 6.958-50.060 6.837Q-49.746 6.716-49.406 6.716Q-48.933 6.716-48.529 6.962Q-48.125 7.208-47.892 7.624Q-47.660 8.040-47.660 8.516Q-47.660 8.891-47.808 9.220Q-47.957 9.548-48.226 9.800Q-48.496 10.052-48.840 10.186Q-49.183 10.321-49.543 10.321Q-49.832 10.321-50.103 10.200Q-50.375 10.079-50.582 9.868L-50.582 11.235Q-50.582 11.411-50.414 11.456Q-50.246 11.501-49.972 11.501L-49.972 11.794M-50.582 7.579L-50.582 9.419Q-50.429 9.708-50.168 9.888Q-49.906 10.067-49.597 10.067Q-49.312 10.067-49.090 9.929Q-48.867 9.790-48.715 9.559Q-48.562 9.329-48.484 9.057Q-48.406 8.786-48.406 8.516Q-48.406 8.184-48.531 7.827Q-48.656 7.470-48.904 7.233Q-49.152 6.997-49.500 6.997Q-49.824 6.997-50.119 7.153Q-50.414 7.309-50.582 7.579M-45.222 10.243L-47.054 10.243L-47.054 9.946Q-46.781 9.946-46.613 9.899Q-46.445 9.852-46.445 9.684L-46.445 5.524Q-46.445 5.309-46.508 5.214Q-46.570 5.118-46.689 5.097Q-46.808 5.075-47.054 5.075L-47.054 4.778L-45.832 4.692L-45.832 9.684Q-45.832 9.852-45.664 9.899Q-45.496 9.946-45.222 9.946L-45.222 10.243M-42.918 10.243L-44.695 10.243L-44.695 9.946Q-44.422 9.946-44.254 9.899Q-44.086 9.852-44.086 9.684L-44.086 7.548Q-44.086 7.333-44.142 7.237Q-44.199 7.141-44.312 7.120Q-44.425 7.098-44.672 7.098L-44.672 6.802L-43.472 6.716L-43.472 9.684Q-43.472 9.852-43.326 9.899Q-43.179 9.946-42.918 9.946L-42.918 10.243M-44.359 5.321Q-44.359 5.130-44.224 4.999Q-44.090 4.868-43.894 4.868Q-43.773 4.868-43.670 4.931Q-43.566 4.993-43.504 5.097Q-43.441 5.200-43.441 5.321Q-43.441 5.516-43.572 5.651Q-43.703 5.786-43.894 5.786Q-44.093 5.786-44.226 5.653Q-44.359 5.520-44.359 5.321M-42.375 8.516Q-42.375 8.020-42.125 7.595Q-41.875 7.169-41.455 6.923Q-41.035 6.677-40.535 6.677Q-39.996 6.677-39.605 6.802Q-39.215 6.927-39.215 7.341Q-39.215 7.446-39.265 7.538Q-39.316 7.630-39.408 7.681Q-39.500 7.731-39.609 7.731Q-39.715 7.731-39.806 7.681Q-39.898 7.630-39.949 7.538Q-40 7.446-40 7.341Q-40 7.118-39.832 7.013Q-40.054 6.954-40.527 6.954Q-40.824 6.954-41.039 7.093Q-41.254 7.231-41.384 7.462Q-41.515 7.692-41.574 7.962Q-41.633 8.231-41.633 8.516Q-41.633 8.911-41.500 9.261Q-41.367 9.610-41.095 9.827Q-40.824 10.044-40.425 10.044Q-40.050 10.044-39.775 9.827Q-39.500 9.610-39.398 9.251Q-39.383 9.188-39.320 9.188L-39.215 9.188Q-39.179 9.188-39.154 9.216Q-39.129 9.243-39.129 9.282L-39.129 9.306Q-39.261 9.786-39.646 10.054Q-40.031 10.321-40.535 10.321Q-40.898 10.321-41.232 10.184Q-41.566 10.048-41.826 9.798Q-42.086 9.548-42.230 9.212Q-42.375 8.876-42.375 8.516M-38.640 8.489Q-38.640 8.009-38.408 7.593Q-38.175 7.177-37.765 6.927Q-37.355 6.677-36.879 6.677Q-36.148 6.677-35.750 7.118Q-35.351 7.559-35.351 8.290Q-35.351 8.395-35.445 8.419L-37.894 8.419L-37.894 8.489Q-37.894 8.899-37.773 9.255Q-37.652 9.610-37.381 9.827Q-37.109 10.044-36.679 10.044Q-36.316 10.044-36.019 9.815Q-35.722 9.587-35.621 9.235Q-35.613 9.188-35.527 9.173L-35.445 9.173Q-35.351 9.200-35.351 9.282Q-35.351 9.290-35.359 9.321Q-35.422 9.548-35.560 9.731Q-35.699 9.915-35.890 10.048Q-36.082 10.181-36.300 10.251Q-36.519 10.321-36.758 10.321Q-37.129 10.321-37.466 10.184Q-37.804 10.048-38.072 9.796Q-38.340 9.544-38.490 9.204Q-38.640 8.864-38.640 8.489M-37.886 8.181L-35.925 8.181Q-35.925 7.876-36.027 7.585Q-36.129 7.294-36.345 7.112Q-36.562 6.931-36.879 6.931Q-37.179 6.931-37.410 7.118Q-37.640 7.306-37.763 7.597Q-37.886 7.888-37.886 8.181",[1215],[809,2342,2343],{"transform":2336},[1204,2344],{"d":2345,"fill":1201,"stroke":1201,"className":2346,"style":1284},"M-31.922 9.411Q-31.922 8.927-31.520 8.632Q-31.117 8.337-30.567 8.218Q-30.016 8.098-29.524 8.098L-29.524 7.809Q-29.524 7.583-29.639 7.376Q-29.754 7.169-29.951 7.050Q-30.149 6.931-30.379 6.931Q-30.805 6.931-31.090 7.036Q-31.020 7.063-30.973 7.118Q-30.926 7.173-30.901 7.243Q-30.875 7.313-30.875 7.388Q-30.875 7.493-30.926 7.585Q-30.977 7.677-31.069 7.727Q-31.160 7.778-31.266 7.778Q-31.371 7.778-31.463 7.727Q-31.555 7.677-31.606 7.585Q-31.656 7.493-31.656 7.388Q-31.656 6.970-31.268 6.823Q-30.879 6.677-30.379 6.677Q-30.047 6.677-29.694 6.807Q-29.340 6.938-29.112 7.192Q-28.883 7.446-28.883 7.794L-28.883 9.595Q-28.883 9.727-28.811 9.837Q-28.738 9.946-28.610 9.946Q-28.485 9.946-28.416 9.841Q-28.348 9.735-28.348 9.595L-28.348 9.083L-28.067 9.083L-28.067 9.595Q-28.067 9.798-28.184 9.956Q-28.301 10.114-28.483 10.198Q-28.664 10.282-28.867 10.282Q-29.098 10.282-29.250 10.110Q-29.403 9.938-29.434 9.708Q-29.594 9.989-29.903 10.155Q-30.211 10.321-30.563 10.321Q-31.074 10.321-31.498 10.098Q-31.922 9.876-31.922 9.411M-31.235 9.411Q-31.235 9.696-31.008 9.882Q-30.781 10.067-30.488 10.067Q-30.242 10.067-30.018 9.950Q-29.793 9.833-29.658 9.630Q-29.524 9.427-29.524 9.173L-29.524 8.341Q-29.789 8.341-30.074 8.395Q-30.360 8.450-30.631 8.579Q-30.903 8.708-31.069 8.915Q-31.235 9.122-31.235 9.411M-27.149 9.282L-27.149 7.091L-27.852 7.091L-27.852 6.837Q-27.496 6.837-27.254 6.604Q-27.012 6.372-26.901 6.024Q-26.789 5.677-26.789 5.321L-26.508 5.321L-26.508 6.794L-25.332 6.794L-25.332 7.091L-26.508 7.091L-26.508 9.266Q-26.508 9.587-26.389 9.815Q-26.270 10.044-25.988 10.044Q-25.809 10.044-25.692 9.921Q-25.574 9.798-25.522 9.618Q-25.469 9.438-25.469 9.266L-25.469 8.794L-25.188 8.794L-25.188 9.282Q-25.188 9.536-25.293 9.776Q-25.399 10.016-25.596 10.169Q-25.793 10.321-26.051 10.321Q-26.367 10.321-26.619 10.198Q-26.871 10.075-27.010 9.841Q-27.149 9.606-27.149 9.282",[1215],[809,2348,2349],{"transform":2336},[1204,2350],{"d":2351,"fill":1201,"stroke":1201,"className":2352,"style":1284},"M-20.939 9.321Q-20.939 9.071-20.865 8.784Q-20.791 8.497-20.654 8.145Q-20.517 7.794-20.455 7.626Q-20.365 7.403-20.365 7.220Q-20.365 6.970-20.533 6.970Q-20.849 6.970-21.058 7.276Q-21.267 7.583-21.373 7.970Q-21.385 8.044-21.455 8.044L-21.556 8.044Q-21.592 8.044-21.619 8.009Q-21.646 7.973-21.646 7.946L-21.646 7.915Q-21.521 7.454-21.224 7.085Q-20.928 6.716-20.517 6.716Q-20.322 6.716-20.148 6.800Q-19.974 6.884-19.873 7.036Q-19.771 7.188-19.771 7.395Q-19.771 7.548-19.830 7.684Q-19.920 7.915-20.021 8.181Q-20.123 8.446-20.180 8.628Q-20.236 8.809-20.281 9.024Q-20.326 9.239-20.326 9.434Q-20.326 9.708-20.203 9.888Q-20.080 10.067-19.822 10.067Q-19.553 10.067-19.244 9.839Q-18.935 9.610-18.885 9.356L-18.318 7.083Q-18.279 6.958-18.176 6.876Q-18.072 6.794-17.947 6.794Q-17.838 6.794-17.758 6.868Q-17.678 6.942-17.678 7.052Q-17.678 7.075-17.693 7.138L-18.260 9.411Q-18.264 9.450-18.277 9.511Q-18.291 9.571-18.297 9.622Q-18.303 9.673-18.303 9.708Q-18.303 10.067-18.053 10.067Q-17.912 10.067-17.810 9.960Q-17.709 9.852-17.644 9.698Q-17.580 9.544-17.531 9.354Q-17.482 9.165-17.463 9.067Q-17.428 8.997-17.373 8.997L-17.267 8.997Q-17.228 8.997-17.205 9.026Q-17.181 9.056-17.181 9.091Q-17.181 9.106-17.189 9.122Q-17.260 9.419-17.357 9.677Q-17.455 9.934-17.631 10.128Q-17.806 10.321-18.068 10.321Q-18.334 10.321-18.556 10.188Q-18.779 10.056-18.869 9.817Q-19.056 10.044-19.312 10.182Q-19.568 10.321-19.838 10.321Q-20.162 10.321-20.412 10.212Q-20.662 10.102-20.801 9.878Q-20.939 9.653-20.939 9.321",[1215],[1306,2354,2356],{"className":2355},[1309],"merge closed sub-tours into one Eulerian circuit",[381,2358,2359,2360,2450,2451,2538,2539,2554,2555,2570,2571,2127],{},"The blue loop ",[454,2361,2363],{"className":2362},[457],[454,2364,2366,2390,2415,2441],{"className":2365,"ariaHidden":462},[461],[454,2367,2369,2372,2375,2378,2381,2384,2387],{"className":2368},[466],[454,2370],{"className":2371,"style":583},[470],[454,2373,2169],{"className":2374},[475,476],[454,2376],{"className":2377,"style":1991},[1009],[454,2379],{"className":2380,"style":1010},[1009],[454,2382,1998],{"className":2383},[1014],[454,2385],{"className":2386,"style":1991},[1009],[454,2388],{"className":2389,"style":1010},[1009],[454,2391,2393,2396,2400,2403,2406,2409,2412],{"className":2392},[466],[454,2394],{"className":2395,"style":583},[470],[454,2397,2399],{"className":2398},[475,476],"x",[454,2401],{"className":2402,"style":1991},[1009],[454,2404],{"className":2405,"style":1010},[1009],[454,2407,1998],{"className":2408},[1014],[454,2410],{"className":2411,"style":1991},[1009],[454,2413],{"className":2414,"style":1010},[1009],[454,2416,2418,2422,2426,2429,2432,2435,2438],{"className":2417},[466],[454,2419],{"className":2420,"style":2421},[470],"height:0.625em;vertical-align:-0.1944em;",[454,2423,2425],{"className":2424,"style":587},[475,476],"y",[454,2427],{"className":2428,"style":1991},[1009],[454,2430],{"className":2431,"style":1010},[1009],[454,2433,1998],{"className":2434},[1014],[454,2436],{"className":2437,"style":1991},[1009],[454,2439],{"className":2440,"style":1010},[1009],[454,2442,2444,2447],{"className":2443},[466],[454,2445],{"className":2446,"style":583},[470],[454,2448,2169],{"className":2449},[475,476]," is a closed sub-tour discovered when the\nmain walk ",[454,2452,2454],{"className":2453},[457],[454,2455,2457,2481,2505,2529],{"className":2456,"ariaHidden":462},[461],[454,2458,2460,2463,2466,2469,2472,2475,2478],{"className":2459},[466],[454,2461],{"className":2462,"style":583},[470],[454,2464,1326],{"className":2465},[475,476],[454,2467],{"className":2468,"style":1991},[1009],[454,2470],{"className":2471,"style":1010},[1009],[454,2473,1998],{"className":2474},[1014],[454,2476],{"className":2477,"style":1991},[1009],[454,2479],{"className":2480,"style":1010},[1009],[454,2482,2484,2487,2490,2493,2496,2499,2502],{"className":2483},[466],[454,2485],{"className":2486,"style":583},[470],[454,2488,2169],{"className":2489},[475,476],[454,2491],{"className":2492,"style":1991},[1009],[454,2494],{"className":2495,"style":1010},[1009],[454,2497,1998],{"className":2498},[1014],[454,2500],{"className":2501,"style":1991},[1009],[454,2503],{"className":2504,"style":1010},[1009],[454,2506,2508,2511,2514,2517,2520,2523,2526],{"className":2507},[466],[454,2509],{"className":2510,"style":2421},[470],[454,2512,400],{"className":2513,"style":587},[475,476],[454,2515],{"className":2516,"style":1991},[1009],[454,2518],{"className":2519,"style":1010},[1009],[454,2521,1998],{"className":2522},[1014],[454,2524],{"className":2525,"style":1991},[1009],[454,2527],{"className":2528,"style":1010},[1009],[454,2530,2532,2535],{"className":2531},[466],[454,2533],{"className":2534,"style":583},[470],[454,2536,1326],{"className":2537},[475,476]," reached ",[454,2540,2542],{"className":2541},[457],[454,2543,2545],{"className":2544,"ariaHidden":462},[461],[454,2546,2548,2551],{"className":2547},[466],[454,2549],{"className":2550,"style":583},[470],[454,2552,2169],{"className":2553},[475,476]," and found unused edges. Inserting\nit at ",[454,2556,2558],{"className":2557},[457],[454,2559,2561],{"className":2560,"ariaHidden":462},[461],[454,2562,2564,2567],{"className":2563},[466],[454,2565],{"className":2566,"style":583},[470],[454,2568,2169],{"className":2569},[475,476]," yields the single circuit\n",[454,2572,2574],{"className":2573},[457],[454,2575,2577,2601,2625,2649,2673,2697,2721],{"className":2576,"ariaHidden":462},[461],[454,2578,2580,2583,2586,2589,2592,2595,2598],{"className":2579},[466],[454,2581],{"className":2582,"style":583},[470],[454,2584,1326],{"className":2585},[475,476],[454,2587],{"className":2588,"style":1991},[1009],[454,2590],{"className":2591,"style":1010},[1009],[454,2593,1998],{"className":2594},[1014],[454,2596],{"className":2597,"style":1991},[1009],[454,2599],{"className":2600,"style":1010},[1009],[454,2602,2604,2607,2610,2613,2616,2619,2622],{"className":2603},[466],[454,2605],{"className":2606,"style":583},[470],[454,2608,2169],{"className":2609},[475,476],[454,2611],{"className":2612,"style":1991},[1009],[454,2614],{"className":2615,"style":1010},[1009],[454,2617,1998],{"className":2618},[1014],[454,2620],{"className":2621,"style":1991},[1009],[454,2623],{"className":2624,"style":1010},[1009],[454,2626,2628,2631,2634,2637,2640,2643,2646],{"className":2627},[466],[454,2629],{"className":2630,"style":583},[470],[454,2632,2399],{"className":2633},[475,476],[454,2635],{"className":2636,"style":1991},[1009],[454,2638],{"className":2639,"style":1010},[1009],[454,2641,1998],{"className":2642},[1014],[454,2644],{"className":2645,"style":1991},[1009],[454,2647],{"className":2648,"style":1010},[1009],[454,2650,2652,2655,2658,2661,2664,2667,2670],{"className":2651},[466],[454,2653],{"className":2654,"style":2421},[470],[454,2656,2425],{"className":2657,"style":587},[475,476],[454,2659],{"className":2660,"style":1991},[1009],[454,2662],{"className":2663,"style":1010},[1009],[454,2665,1998],{"className":2666},[1014],[454,2668],{"className":2669,"style":1991},[1009],[454,2671],{"className":2672,"style":1010},[1009],[454,2674,2676,2679,2682,2685,2688,2691,2694],{"className":2675},[466],[454,2677],{"className":2678,"style":583},[470],[454,2680,2169],{"className":2681},[475,476],[454,2683],{"className":2684,"style":1991},[1009],[454,2686],{"className":2687,"style":1010},[1009],[454,2689,1998],{"className":2690},[1014],[454,2692],{"className":2693,"style":1991},[1009],[454,2695],{"className":2696,"style":1010},[1009],[454,2698,2700,2703,2706,2709,2712,2715,2718],{"className":2699},[466],[454,2701],{"className":2702,"style":2421},[470],[454,2704,400],{"className":2705,"style":587},[475,476],[454,2707],{"className":2708,"style":1991},[1009],[454,2710],{"className":2711,"style":1010},[1009],[454,2713,1998],{"className":2714},[1014],[454,2716],{"className":2717,"style":1991},[1009],[454,2719],{"className":2720,"style":1010},[1009],[454,2722,2724,2727],{"className":2723},[466],[454,2725],{"className":2726,"style":583},[470],[454,2728,1326],{"className":2729},[475,476],[381,2731,2732,2733,2736,2737,2740,2741,2744],{},"The clean implementation does the splicing ",[385,2734,2735],{},"implicitly"," with a stack and one\n",[395,2738,2739],{},"edge pointer per vertex"," (so each vertex resumes scanning where it left off,\nnever re-examining a used edge). We push our way forward along unused edges; when\na vertex runs dry, we pop it onto the output. The route is therefore ",[395,2742,2743],{},"emitted in\nreverse"," on backtracking, and a spliced sub-tour is naturally inserted at its\nshared vertex.",[2746,2747,2751],"pre",{"className":2748,"code":2749,"language":2750,"meta":376,"style":376},"language-algorithm shiki shiki-themes Vesper Light - Orange Boost (Quick Open Adjusted) vesper","caption: $\\textsc{Hierholzer}(G, s)$ — build an Eulerian tour from start $s$ in $O(E)$\nfor each vertex $v$ do\n  $ptr[v] \\gets 0$            \u002F\u002F next-unused-edge index\n$stack \\gets [\\,s\\,]$;\\ \\ \\ $route \\gets [\\,]$\nwhile $stack$ is nonempty do\n  $u \\gets stack.\\text{top}()$\n  if $ptr[u] \u003C |adj[u]|$ then          \u002F\u002F u has an unused edge\n    $w \\gets adj[u][\\,ptr[u]\\,]$\n    $ptr[u] \\gets ptr[u] + 1$          \u002F\u002F consume edge u→w\n    $stack.\\text{push}(w)$             \u002F\u002F walk forward\n  else                                 \u002F\u002F u exhausted: back out\n    $route.\\text{append}(stack.\\text{pop}())$\n$\\textbf{return } reverse(route)$       \u002F\u002F emitted in reverse on backtrack\n","algorithm",[2752,2753,2754,2760,2765,2770,2775,2780,2785,2790,2795,2800,2805,2810,2815],"code",{"__ignoreMap":376},[454,2755,2757],{"class":2756,"line":6},"line",[454,2758,2759],{},"caption: $\\textsc{Hierholzer}(G, s)$ — build an Eulerian tour from start $s$ in $O(E)$\n",[454,2761,2762],{"class":2756,"line":18},[454,2763,2764],{},"for each vertex $v$ do\n",[454,2766,2767],{"class":2756,"line":24},[454,2768,2769],{},"  $ptr[v] \\gets 0$            \u002F\u002F next-unused-edge index\n",[454,2771,2772],{"class":2756,"line":73},[454,2773,2774],{},"$stack \\gets [\\,s\\,]$;\\ \\ \\ $route \\gets [\\,]$\n",[454,2776,2777],{"class":2756,"line":102},[454,2778,2779],{},"while $stack$ is nonempty do\n",[454,2781,2782],{"class":2756,"line":108},[454,2783,2784],{},"  $u \\gets stack.\\text{top}()$\n",[454,2786,2787],{"class":2756,"line":116},[454,2788,2789],{},"  if $ptr[u] \u003C |adj[u]|$ then          \u002F\u002F u has an unused edge\n",[454,2791,2792],{"class":2756,"line":196},[454,2793,2794],{},"    $w \\gets adj[u][\\,ptr[u]\\,]$\n",[454,2796,2797],{"class":2756,"line":202},[454,2798,2799],{},"    $ptr[u] \\gets ptr[u] + 1$          \u002F\u002F consume edge u→w\n",[454,2801,2802],{"class":2756,"line":283},[454,2803,2804],{},"    $stack.\\text{push}(w)$             \u002F\u002F walk forward\n",[454,2806,2807],{"class":2756,"line":333},[454,2808,2809],{},"  else                                 \u002F\u002F u exhausted: back out\n",[454,2811,2812],{"class":2756,"line":354},[454,2813,2814],{},"    $route.\\text{append}(stack.\\text{pop}())$\n",[454,2816,2818],{"class":2756,"line":2817},13,[454,2819,2820],{},"$\\textbf{return } reverse(route)$       \u002F\u002F emitted in reverse on backtrack\n",[381,2822,2823,2826,2827,2851,2852,2877,2878,2947,2948,2951,2952,2967,2968,2983,2984,2999,3000,3030,3031,3046,3047,3062,3063],{},[395,2824,2825],{},"Why it consumes every edge."," Each iteration either advances an edge pointer\n(consuming exactly one edge) or pops one vertex; both can happen at most ",[454,2828,2830],{"className":2829},[457],[454,2831,2833],{"className":2832,"ariaHidden":462},[461],[454,2834,2836,2839,2842,2845,2848],{"className":2835},[466],[454,2837],{"className":2838,"style":471},[470],[454,2840,478],{"className":2841,"style":477},[475,476],[454,2843,483],{"className":2844},[482],[454,2846,488],{"className":2847,"style":487},[475,476],[454,2849,493],{"className":2850},[492],"\nand ",[454,2853,2855],{"className":2854},[457],[454,2856,2858],{"className":2857,"ariaHidden":462},[461],[454,2859,2861,2864,2867,2870,2874],{"className":2860},[466],[454,2862],{"className":2863,"style":471},[470],[454,2865,478],{"className":2866,"style":477},[475,476],[454,2868,483],{"className":2869},[482],[454,2871,2873],{"className":2872,"style":1066},[475,476],"V",[454,2875,493],{"className":2876},[492]," times respectively, so the loop runs in ",[454,2879,2881],{"className":2880},[457],[454,2882,2884,2908,2929],{"className":2883,"ariaHidden":462},[461],[454,2885,2887,2890,2893,2896,2899,2902,2905],{"className":2886},[466],[454,2888],{"className":2889,"style":471},[470],[454,2891,478],{"className":2892,"style":477},[475,476],[454,2894,483],{"className":2895},[482],[454,2897,2873],{"className":2898,"style":1066},[475,476],[454,2900],{"className":2901,"style":1066},[1009],[454,2903,1106],{"className":2904},[1070],[454,2906],{"className":2907,"style":1066},[1009],[454,2909,2911,2914,2917,2920,2923,2926],{"className":2910},[466],[454,2912],{"className":2913,"style":471},[470],[454,2915,488],{"className":2916,"style":487},[475,476],[454,2918,493],{"className":2919},[492],[454,2921],{"className":2922,"style":1010},[1009],[454,2924,1015],{"className":2925},[1014],[454,2927],{"className":2928,"style":1010},[1009],[454,2930,2932,2935,2938,2941,2944],{"className":2931},[466],[454,2933],{"className":2934,"style":471},[470],[454,2936,478],{"className":2937,"style":477},[475,476],[454,2939,483],{"className":2940},[482],[454,2942,488],{"className":2943,"style":487},[475,476],[454,2945,493],{"className":2946},[492]," on a\nconnected graph. The pointer trick means each edge is ",[385,2949,2950],{},"examined once",", never\nrescanned. When a vertex ",[454,2953,2955],{"className":2954},[457],[454,2956,2958],{"className":2957,"ariaHidden":462},[461],[454,2959,2961,2964],{"className":2960},[466],[454,2962],{"className":2963,"style":583},[470],[454,2965,2169],{"className":2966},[475,476]," is finally popped, the algorithm has, by the parity\nargument, already drained every edge incident to ",[454,2969,2971],{"className":2970},[457],[454,2972,2974],{"className":2973,"ariaHidden":462},[461],[454,2975,2977,2980],{"className":2976},[466],[454,2978],{"className":2979,"style":583},[470],[454,2981,2169],{"className":2982},[475,476]," along the way; any edge it\nhad skipped would have been picked up by a later pointer advance before ",[454,2985,2987],{"className":2986},[457],[454,2988,2990],{"className":2989,"ariaHidden":462},[461],[454,2991,2993,2996],{"className":2992},[466],[454,2994],{"className":2995,"style":583},[470],[454,2997,2169],{"className":2998},[475,476]," could\nexhaust. Reading ",[454,3001,3003],{"className":3002},[457],[454,3004,3006],{"className":3005,"ariaHidden":462},[461],[454,3007,3009,3012,3016,3020,3023,3026],{"className":3008},[466],[454,3010],{"className":3011,"style":1405},[470],[454,3013,3015],{"className":3014,"style":477},[475,476],"r",[454,3017,3019],{"className":3018},[475,476],"o",[454,3021,2169],{"className":3022},[475,476],[454,3024,1409],{"className":3025},[475,476],[454,3027,3029],{"className":3028},[475,476],"e"," in reverse threads every discovered sub-tour through its\nsplice vertex, producing one walk that uses all ",[454,3032,3034],{"className":3033},[457],[454,3035,3037],{"className":3036,"ariaHidden":462},[461],[454,3038,3040,3043],{"className":3039},[466],[454,3041],{"className":3042,"style":651},[470],[454,3044,488],{"className":3045,"style":487},[475,476]," edges exactly once. If the\nexistence conditions hold, the output is a valid Eulerian tour; for an open\nEulerian path, start ",[454,3048,3050],{"className":3049},[457],[454,3051,3053],{"className":3052,"ariaHidden":462},[461],[454,3054,3056,3059],{"className":3055},[466],[454,3057],{"className":3058,"style":583},[470],[454,3060,1326],{"className":3061},[475,476]," at the unique out-excess vertex (directed) or an\nodd-degree vertex (undirected).",[546,3064,3065],{},[390,3066,1882],{"href":3067,"ariaDescribedBy":3068,"dataFootnoteRef":376,"id":3069},"#user-content-fn-clrs-euler",[552],"user-content-fnref-clrs-euler",[560,3071,3073],{"id":3072},"applications","Applications",[381,3075,3076,3077,3080,3081,3084,3085,3088,3089,3092,3093,3110,3111,3114,3115,3118,3119,3164,3165,3180,3181,3183],{},"The pattern ",[400,3078,3079],{},"use every edge once"," is more common than it first appears.\n",[395,3082,3083],{},"Reconstruct Itinerary"," asks for a flight schedule that uses every ticket\nexactly once: an Eulerian path on the directed multigraph of airports, where the\nproblem's lexicographically-smallest requirement is met by keeping each vertex's\noutgoing destinations in ",[385,3086,3087],{},"sorted order"," and letting Hierholzer consume them in\nthat order. ",[395,3090,3091],{},"De Bruijn sequences"," are the gem: to find a shortest cyclic string\ncontaining every length-",[454,3094,3096],{"className":3095},[457],[454,3097,3099],{"className":3098,"ariaHidden":462},[461],[454,3100,3102,3105],{"className":3101},[466],[454,3103],{"className":3104,"style":514},[470],[454,3106,3109],{"className":3107,"style":3108},[475,476],"margin-right:0.0315em;","k"," string over an alphabet exactly once (the\n",[395,3112,3113],{},"Cracking the Safe"," problem), build the ",[395,3116,3117],{},"de Bruijn graph"," whose vertices are\n",[454,3120,3122],{"className":3121},[457],[454,3123,3125,3152],{"className":3124,"ariaHidden":462},[461],[454,3126,3128,3131,3134,3137,3140,3143,3146,3149],{"className":3127},[466],[454,3129],{"className":3130,"style":471},[470],[454,3132,483],{"className":3133},[482],[454,3135,3109],{"className":3136,"style":3108},[475,476],[454,3138],{"className":3139,"style":1991},[1009],[454,3141],{"className":3142,"style":1066},[1009],[454,3144,1071],{"className":3145},[1070],[454,3147],{"className":3148,"style":1991},[1009],[454,3150],{"className":3151,"style":1066},[1009],[454,3153,3155,3158,3161],{"className":3154},[466],[454,3156],{"className":3157,"style":471},[470],[454,3159,554],{"className":3160},[475],[454,3162,493],{"className":3163},[492],"-grams and whose edges are ",[454,3166,3168],{"className":3167},[457],[454,3169,3171],{"className":3170,"ariaHidden":462},[461],[454,3172,3174,3177],{"className":3173},[466],[454,3175],{"className":3176,"style":514},[470],[454,3178,3109],{"className":3179,"style":3108},[475,476],"-grams; that graph is balanced by\nconstruction, so an ",[395,3182,424],{}," spells out the optimal sequence.",[381,3185,3186,3187,3220,3221,3236,3237,1849,3252,3267,3268,3236,3283,3329,3330,3345,3346,3373,3374,3443,3444,3460,3461,3476,3477,3492],{},"The smallest case makes it vivid. For binary strings of length ",[454,3188,3190],{"className":3189},[457],[454,3191,3193,3211],{"className":3192,"ariaHidden":462},[461],[454,3194,3196,3199,3202,3205,3208],{"className":3195},[466],[454,3197],{"className":3198,"style":514},[470],[454,3200,3109],{"className":3201,"style":3108},[475,476],[454,3203],{"className":3204,"style":1010},[1009],[454,3206,1015],{"className":3207},[1014],[454,3209],{"className":3210,"style":1010},[1009],[454,3212,3214,3217],{"className":3213},[466],[454,3215],{"className":3216,"style":702},[470],[454,3218,723],{"className":3219},[475],", the de\nBruijn graph has two vertices, the ",[454,3222,3224],{"className":3223},[457],[454,3225,3227],{"className":3226,"ariaHidden":462},[461],[454,3228,3230,3233],{"className":3229},[466],[454,3231],{"className":3232,"style":702},[470],[454,3234,554],{"className":3235},[475],"-grams ",[454,3238,3240],{"className":3239},[457],[454,3241,3243],{"className":3242,"ariaHidden":462},[461],[454,3244,3246,3249],{"className":3245},[466],[454,3247],{"className":3248,"style":702},[470],[454,3250,706],{"className":3251},[475],[454,3253,3255],{"className":3254},[457],[454,3256,3258],{"className":3257,"ariaHidden":462},[461],[454,3259,3261,3264],{"className":3260},[466],[454,3262],{"className":3263,"style":702},[470],[454,3265,554],{"className":3266},[475],", and four edges, the\n",[454,3269,3271],{"className":3270},[457],[454,3272,3274],{"className":3273,"ariaHidden":462},[461],[454,3275,3277,3280],{"className":3276},[466],[454,3278],{"className":3279,"style":702},[470],[454,3281,723],{"className":3282},[475],[454,3284,3286],{"className":3285},[457],[454,3287,3289],{"className":3288,"ariaHidden":462},[461],[454,3290,3292,3295,3299,3302,3305,3309,3312,3315,3319,3322,3325],{"className":3291},[466],[454,3293],{"className":3294,"style":1930},[470],[454,3296,3298],{"className":3297},[475],"00",[454,3300,1491],{"className":3301},[1490],[454,3303],{"className":3304,"style":1495},[1009],[454,3306,3308],{"className":3307},[475],"01",[454,3310,1491],{"className":3311},[1490],[454,3313],{"className":3314,"style":1495},[1009],[454,3316,3318],{"className":3317},[475],"10",[454,3320,1491],{"className":3321},[1490],[454,3323],{"className":3324,"style":1495},[1009],[454,3326,3328],{"className":3327},[475],"11",". Every vertex is balanced (in-degree ",[454,3331,3333],{"className":3332},[457],[454,3334,3336],{"className":3335,"ariaHidden":462},[461],[454,3337,3339,3342],{"className":3338},[466],[454,3340],{"className":3341,"style":1819},[470],[454,3343,1015],{"className":3344},[1014]," out-degree\n",[454,3347,3349],{"className":3348},[457],[454,3350,3352,3364],{"className":3351,"ariaHidden":462},[461],[454,3353,3355,3358,3361],{"className":3354},[466],[454,3356],{"className":3357,"style":1819},[470],[454,3359,1015],{"className":3360},[1014],[454,3362],{"className":3363,"style":1010},[1009],[454,3365,3367,3370],{"className":3366},[466],[454,3368],{"className":3369,"style":702},[470],[454,3371,723],{"className":3372},[475],"), so an Eulerian circuit exists; following ",[454,3375,3377],{"className":3376},[457],[454,3378,3380,3398,3416,3434],{"className":3379,"ariaHidden":462},[461],[454,3381,3383,3386,3389,3392,3395],{"className":3382},[466],[454,3384],{"className":3385,"style":702},[470],[454,3387,3298],{"className":3388},[475],[454,3390],{"className":3391,"style":1010},[1009],[454,3393,1998],{"className":3394},[1014],[454,3396],{"className":3397,"style":1010},[1009],[454,3399,3401,3404,3407,3410,3413],{"className":3400},[466],[454,3402],{"className":3403,"style":702},[470],[454,3405,3308],{"className":3406},[475],[454,3408],{"className":3409,"style":1010},[1009],[454,3411,1998],{"className":3412},[1014],[454,3414],{"className":3415,"style":1010},[1009],[454,3417,3419,3422,3425,3428,3431],{"className":3418},[466],[454,3420],{"className":3421,"style":702},[470],[454,3423,3328],{"className":3424},[475],[454,3426],{"className":3427,"style":1010},[1009],[454,3429,1998],{"className":3430},[1014],[454,3432],{"className":3433,"style":1010},[1009],[454,3435,3437,3440],{"className":3436},[466],[454,3438],{"className":3439,"style":702},[470],[454,3441,3318],{"className":3442},[475]," and\nreading the new symbol off each edge spells the de Bruijn sequence ",[454,3445,3447],{"className":3446},[457],[454,3448,3450],{"className":3449,"ariaHidden":462},[461],[454,3451,3453,3456],{"className":3452},[466],[454,3454],{"className":3455,"style":702},[470],[454,3457,3459],{"className":3458},[475],"0011",", a\nlength-",[454,3462,3464],{"className":3463},[457],[454,3465,3467],{"className":3466,"ariaHidden":462},[461],[454,3468,3470,3473],{"className":3469},[466],[454,3471],{"className":3472,"style":702},[470],[454,3474,1961],{"className":3475},[475]," cyclic string in which all four ",[454,3478,3480],{"className":3479},[457],[454,3481,3483],{"className":3482,"ariaHidden":462},[461],[454,3484,3486,3489],{"className":3485},[466],[454,3487],{"className":3488,"style":702},[470],[454,3490,723],{"className":3491},[475],"-bit patterns appear exactly once:",[1183,3494,3496,3677],{"className":3495},[1186,1187],[1189,3497,3501],{"xmlns":1191,"width":3498,"height":3499,"viewBox":3500},"253.613","108.039","-75 -75 190.210 81.029",[809,3502,3503,3506,3513,3516,3523,3546,3566,3586,3606],{"stroke":1197,"style":1198},[1204,3504],{"fill":1206,"d":3505},"M-9.552-52.054c0-7.072-5.733-12.804-12.804-12.804S-35.16-59.126-35.16-52.054c0 7.071 5.732 12.804 12.804 12.804 7.071 0 12.804-5.733 12.804-12.804Zm-12.804 0",[809,3507,3509],{"transform":3508},"translate(-2.312 2.9)",[1204,3510],{"d":3511,"fill":1197,"stroke":1197,"className":3512,"style":1216},"M-20.044-51.856Q-21.169-51.856-21.583-52.753Q-21.996-53.649-21.996-54.924Q-21.996-55.697-21.846-56.396Q-21.697-57.095-21.262-57.571Q-20.827-58.048-20.044-58.048Q-19.267-58.048-18.832-57.569Q-18.397-57.090-18.247-56.394Q-18.098-55.697-18.098-54.924Q-18.098-53.645-18.511-52.751Q-18.924-51.856-20.044-51.856M-20.044-52.116Q-19.526-52.116-19.275-52.627Q-19.025-53.139-18.968-53.750Q-18.911-54.361-18.911-55.069Q-18.911-55.754-18.968-56.314Q-19.025-56.875-19.278-57.332Q-19.530-57.789-20.044-57.789Q-20.449-57.789-20.686-57.512Q-20.923-57.235-21.031-56.794Q-21.139-56.352-21.163-55.959Q-21.187-55.565-21.187-55.069Q-21.187-54.563-21.163-54.135Q-21.139-53.706-21.031-53.223Q-20.923-52.740-20.684-52.428Q-20.444-52.116-20.044-52.116",[1215],[1204,3514],{"fill":1206,"d":3515},"M81.496-52.054c0-7.072-5.732-12.804-12.803-12.804s-12.804 5.732-12.804 12.804c0 7.071 5.732 12.804 12.804 12.804 7.07 0 12.803-5.733 12.803-12.804Zm-12.803 0",[809,3517,3519],{"transform":3518},"translate(88.736 2.9)",[1204,3520],{"d":3521,"fill":1197,"stroke":1197,"className":3522,"style":1216},"M-18.449-52.054L-21.481-52.054L-21.481-52.370Q-20.330-52.370-20.330-52.665L-20.330-57.389Q-20.818-57.156-21.539-57.156L-21.539-57.472Q-20.409-57.472-19.847-58.048L-19.702-58.048Q-19.667-58.048-19.634-58.015Q-19.601-57.982-19.601-57.947L-19.601-52.665Q-19.601-52.370-18.449-52.370",[1215],[809,3524,3526,3529,3533],{"style":3525},"stroke-width:1",[1204,3527],{"fill":1206,"d":3528},"M-34.576-56.501c-26.074-9.49-26.074 18.384-4.37 10.485",[1204,3530],{"d":3531,"style":3532},"m-35.914-47.12-4.77-.062 1.973 1.08-.817 2.095Z","stroke-width:.99998",[809,3534,3536,3539],{"fill":3535},"var(--tk-bg)",[1204,3537],{"stroke":1206,"d":3538},"M-65.603-48.299h10.972v-7.51h-10.972Z",[809,3540,3542],{"transform":3541},"translate(-41.747 2.256)",[1204,3543],{"d":3544,"fill":1197,"stroke":1197,"className":3545,"style":1691},"M-20.367-51.914Q-21.002-51.914-21.366-52.259Q-21.731-52.604-21.866-53.129Q-22.001-53.654-22.001-54.279Q-22.001-55.304-21.645-56.003Q-21.290-56.702-20.367-56.702Q-19.440-56.702-19.088-56.003Q-18.736-55.304-18.736-54.279Q-18.736-53.654-18.871-53.129Q-19.006-52.604-19.369-52.259Q-19.731-51.914-20.367-51.914M-20.367-52.139Q-19.929-52.139-19.716-52.514Q-19.502-52.888-19.452-53.355Q-19.403-53.821-19.403-54.399Q-19.403-54.952-19.452-55.380Q-19.502-55.807-19.714-56.142Q-19.926-56.477-20.367-56.477Q-20.709-56.477-20.912-56.270Q-21.115-56.063-21.202-55.751Q-21.290-55.438-21.312-55.122Q-21.334-54.805-21.334-54.399Q-21.334-53.982-21.312-53.640Q-21.290-53.298-21.201-52.950Q-21.112-52.601-20.907-52.370Q-20.702-52.139-20.367-52.139M-16.385-51.914Q-17.021-51.914-17.385-52.259Q-17.749-52.604-17.884-53.129Q-18.019-53.654-18.019-54.279Q-18.019-55.304-17.663-56.003Q-17.308-56.702-16.385-56.702Q-15.459-56.702-15.106-56.003Q-14.754-55.304-14.754-54.279Q-14.754-53.654-14.889-53.129Q-15.024-52.604-15.387-52.259Q-15.749-51.914-16.385-51.914M-16.385-52.139Q-15.947-52.139-15.734-52.514Q-15.520-52.888-15.471-53.355Q-15.421-53.821-15.421-54.399Q-15.421-54.952-15.471-55.380Q-15.520-55.807-15.732-56.142Q-15.944-56.477-16.385-56.477Q-16.727-56.477-16.930-56.270Q-17.133-56.063-17.221-55.751Q-17.308-55.438-17.330-55.122Q-17.352-54.805-17.352-54.399Q-17.352-53.982-17.330-53.640Q-17.308-53.298-17.219-52.950Q-17.130-52.601-16.925-52.370Q-16.720-52.139-16.385-52.139",[1215],[809,3547,3548,3551,3554],{"style":3525},[1204,3549],{"fill":1206,"d":3550},"M80.912-47.607c26.074 9.49 26.074-18.384 4.37-10.485",[1204,3552],{"d":3553,"style":3532},"m82.25-56.988 4.77.061-1.972-1.08.817-2.095Z",[809,3555,3556,3559],{"fill":3535},[1204,3557],{"stroke":1206,"d":3558},"M100.967-48.299h10.973v-7.51h-10.973Z",[809,3560,3562],{"transform":3561},"translate(124.824 2.256)",[1204,3563],{"d":3564,"fill":1197,"stroke":1197,"className":3565,"style":1691},"M-19.030-52.054L-21.560-52.054L-21.560-52.334Q-20.592-52.334-20.592-52.543L-20.592-56.162Q-20.985-55.974-21.607-55.974L-21.607-56.255Q-21.190-56.255-20.826-56.356Q-20.462-56.456-20.206-56.702L-20.080-56.702Q-20.015-56.685-19.998-56.617L-19.998-52.543Q-19.998-52.334-19.030-52.334L-19.030-52.054M-15.048-52.054L-17.578-52.054L-17.578-52.334Q-16.610-52.334-16.610-52.543L-16.610-56.162Q-17.003-55.974-17.626-55.974L-17.626-56.255Q-17.209-56.255-16.845-56.356Q-16.481-56.456-16.224-56.702L-16.098-56.702Q-16.033-56.685-16.016-56.617L-16.016-52.543Q-16.016-52.334-15.048-52.334",[1215],[809,3567,3568,3571,3574],{"style":3525},[1204,3569],{"fill":1206,"d":3570},"M-10.3-56.925c24.203-9.778 42.734-9.778 62.624-1.742",[1204,3572],{"d":3573,"style":3532},"m55.316-57.459-3.504-3.237.743 2.122-2.009 1.01Z",[809,3575,3576,3579],{"fill":3535},[1204,3577],{"stroke":1206,"d":3578},"M17.682-64.759h10.972v-7.511H17.682Z",[809,3580,3582],{"transform":3581},"translate(41.538 -14.205)",[1204,3583],{"d":3584,"fill":1197,"stroke":1197,"className":3585,"style":1691},"M-20.367-51.914Q-21.002-51.914-21.366-52.259Q-21.731-52.604-21.866-53.129Q-22.001-53.654-22.001-54.279Q-22.001-55.304-21.645-56.003Q-21.290-56.702-20.367-56.702Q-19.440-56.702-19.088-56.003Q-18.736-55.304-18.736-54.279Q-18.736-53.654-18.871-53.129Q-19.006-52.604-19.369-52.259Q-19.731-51.914-20.367-51.914M-20.367-52.139Q-19.929-52.139-19.716-52.514Q-19.502-52.888-19.452-53.355Q-19.403-53.821-19.403-54.399Q-19.403-54.952-19.452-55.380Q-19.502-55.807-19.714-56.142Q-19.926-56.477-20.367-56.477Q-20.709-56.477-20.912-56.270Q-21.115-56.063-21.202-55.751Q-21.290-55.438-21.312-55.122Q-21.334-54.805-21.334-54.399Q-21.334-53.982-21.312-53.640Q-21.290-53.298-21.201-52.950Q-21.112-52.601-20.907-52.370Q-20.702-52.139-20.367-52.139M-15.048-52.054L-17.578-52.054L-17.578-52.334Q-16.610-52.334-16.610-52.543L-16.610-56.162Q-17.003-55.974-17.626-55.974L-17.626-56.255Q-17.209-56.255-16.845-56.356Q-16.481-56.456-16.224-56.702L-16.098-56.702Q-16.033-56.685-16.016-56.617L-16.016-52.543Q-16.016-52.334-15.048-52.334",[1215],[809,3587,3588,3591,3594],{"style":3525},[1204,3589],{"fill":1206,"d":3590},"M56.636-47.183c-24.202 9.778-42.733 9.778-62.623 1.742",[1204,3592],{"d":3593,"style":3532},"m-8.98-46.65 3.504 3.238-.743-2.123 2.009-1.01Z",[809,3595,3596,3599],{"fill":3535},[1204,3597],{"stroke":1206,"d":3598},"M17.682-31.838h10.972v-7.512H17.682Z",[809,3600,3602],{"transform":3601},"translate(41.538 18.716)",[1204,3603],{"d":3604,"fill":1197,"stroke":1197,"className":3605,"style":1691},"M-19.030-52.054L-21.560-52.054L-21.560-52.334Q-20.592-52.334-20.592-52.543L-20.592-56.162Q-20.985-55.974-21.607-55.974L-21.607-56.255Q-21.190-56.255-20.826-56.356Q-20.462-56.456-20.206-56.702L-20.080-56.702Q-20.015-56.685-19.998-56.617L-19.998-52.543Q-19.998-52.334-19.030-52.334L-19.030-52.054M-16.385-51.914Q-17.021-51.914-17.385-52.259Q-17.749-52.604-17.884-53.129Q-18.019-53.654-18.019-54.279Q-18.019-55.304-17.663-56.003Q-17.308-56.702-16.385-56.702Q-15.459-56.702-15.106-56.003Q-14.754-55.304-14.754-54.279Q-14.754-53.654-14.889-53.129Q-15.024-52.604-15.387-52.259Q-15.749-51.914-16.385-51.914M-16.385-52.139Q-15.947-52.139-15.734-52.514Q-15.520-52.888-15.471-53.355Q-15.421-53.821-15.421-54.399Q-15.421-54.952-15.471-55.380Q-15.520-55.807-15.732-56.142Q-15.944-56.477-16.385-56.477Q-16.727-56.477-16.930-56.270Q-17.133-56.063-17.221-55.751Q-17.308-55.438-17.330-55.122Q-17.352-54.805-17.352-54.399Q-17.352-53.982-17.330-53.640Q-17.308-53.298-17.219-52.950Q-17.130-52.601-16.925-52.370Q-16.720-52.139-16.385-52.139",[1215],[809,3607,3608],{"fill":1201,"stroke":1201},[809,3609,3610,3617,3623,3629,3635,3641,3647,3653,3659,3665,3671],{"fill":1201,"stroke":1206,"fontSize":1683},[809,3611,3613],{"transform":3612},"translate(-21.9 50.12)",[1204,3614],{"d":3615,"fill":1201,"stroke":1201,"className":3616,"style":1691},"M-22.042-53.565Q-22.042-53.893-21.907-54.194Q-21.772-54.494-21.536-54.715Q-21.300-54.935-20.996-55.055Q-20.691-55.175-20.367-55.175Q-19.861-55.175-19.512-55.072Q-19.164-54.970-19.164-54.594Q-19.164-54.447-19.261-54.346Q-19.358-54.245-19.505-54.245Q-19.659-54.245-19.758-54.344Q-19.857-54.443-19.857-54.594Q-19.857-54.782-19.717-54.874Q-19.919-54.925-20.360-54.925Q-20.715-54.925-20.944-54.729Q-21.173-54.532-21.274-54.223Q-21.375-53.913-21.375-53.565Q-21.375-53.216-21.249-52.910Q-21.122-52.604-20.867-52.420Q-20.613-52.235-20.257-52.235Q-20.035-52.235-19.851-52.319Q-19.666-52.403-19.531-52.558Q-19.396-52.714-19.338-52.922Q-19.324-52.977-19.270-52.977L-19.157-52.977Q-19.126-52.977-19.104-52.953Q-19.082-52.929-19.082-52.895L-19.082-52.874Q-19.167-52.587-19.355-52.389Q-19.543-52.191-19.808-52.088Q-20.073-51.986-20.367-51.986Q-20.797-51.986-21.185-52.192Q-21.573-52.399-21.807-52.762Q-22.042-53.124-22.042-53.565M-16.877-52.054L-18.429-52.054L-18.429-52.334Q-18.203-52.334-18.054-52.368Q-17.906-52.403-17.906-52.543L-17.906-54.392Q-17.906-54.580-17.954-54.664Q-18.002-54.747-18.099-54.766Q-18.196-54.785-18.408-54.785L-18.408-55.065L-17.352-55.140L-17.352-52.543Q-17.352-52.403-17.221-52.368Q-17.089-52.334-16.877-52.334L-16.877-52.054M-18.148-56.361Q-18.148-56.532-18.025-56.651Q-17.902-56.771-17.731-56.771Q-17.564-56.771-17.441-56.651Q-17.318-56.532-17.318-56.361Q-17.318-56.186-17.441-56.063Q-17.564-55.940-17.731-55.940Q-17.902-55.940-18.025-56.063Q-18.148-56.186-18.148-56.361M-14.481-52.054L-16.217-52.054L-16.217-52.334Q-15.988-52.334-15.840-52.368Q-15.691-52.403-15.691-52.543L-15.691-54.392Q-15.691-54.662-15.799-54.723Q-15.906-54.785-16.217-54.785L-16.217-55.065L-15.189-55.140L-15.189-54.433Q-15.059-54.741-14.816-54.940Q-14.573-55.140-14.255-55.140Q-14.037-55.140-13.866-55.016Q-13.695-54.891-13.695-54.679Q-13.695-54.542-13.794-54.443Q-13.893-54.344-14.026-54.344Q-14.163-54.344-14.262-54.443Q-14.361-54.542-14.361-54.679Q-14.361-54.819-14.262-54.918Q-14.553-54.918-14.753-54.722Q-14.953-54.525-15.045-54.231Q-15.137-53.937-15.137-53.657L-15.137-52.543Q-15.137-52.334-14.481-52.334L-14.481-52.054M-13.110-53.565Q-13.110-53.893-12.975-54.194Q-12.840-54.494-12.605-54.715Q-12.369-54.935-12.064-55.055Q-11.760-55.175-11.436-55.175Q-10.930-55.175-10.581-55.072Q-10.232-54.970-10.232-54.594Q-10.232-54.447-10.330-54.346Q-10.427-54.245-10.574-54.245Q-10.728-54.245-10.827-54.344Q-10.926-54.443-10.926-54.594Q-10.926-54.782-10.786-54.874Q-10.988-54.925-11.429-54.925Q-11.784-54.925-12.013-54.729Q-12.242-54.532-12.343-54.223Q-12.444-53.913-12.444-53.565Q-12.444-53.216-12.317-52.910Q-12.191-52.604-11.936-52.420Q-11.682-52.235-11.326-52.235Q-11.104-52.235-10.919-52.319Q-10.735-52.403-10.600-52.558Q-10.465-52.714-10.407-52.922Q-10.393-52.977-10.338-52.977L-10.226-52.977Q-10.195-52.977-10.173-52.953Q-10.150-52.929-10.150-52.895L-10.150-52.874Q-10.236-52.587-10.424-52.389Q-10.612-52.191-10.877-52.088Q-11.142-51.986-11.436-51.986Q-11.866-51.986-12.254-52.192Q-12.642-52.399-12.876-52.762Q-13.110-53.124-13.110-53.565M-8.988-52.888L-8.988-54.392Q-8.988-54.662-9.096-54.723Q-9.204-54.785-9.515-54.785L-9.515-55.065L-8.407-55.140L-8.407-52.908L-8.407-52.888Q-8.407-52.608-8.356-52.464Q-8.305-52.321-8.163-52.264Q-8.021-52.208-7.734-52.208Q-7.481-52.208-7.276-52.348Q-7.071-52.488-6.955-52.714Q-6.838-52.939-6.838-53.189L-6.838-54.392Q-6.838-54.662-6.946-54.723Q-7.054-54.785-7.365-54.785L-7.365-55.065L-6.257-55.140L-6.257-52.727Q-6.257-52.536-6.204-52.454Q-6.151-52.372-6.051-52.353Q-5.950-52.334-5.734-52.334L-5.734-52.054L-6.811-51.986L-6.811-52.550Q-6.920-52.368-7.066-52.245Q-7.211-52.122-7.397-52.054Q-7.584-51.986-7.785-51.986Q-8.988-51.986-8.988-52.888M-3.530-52.054L-5.082-52.054L-5.082-52.334Q-4.856-52.334-4.707-52.368Q-4.559-52.403-4.559-52.543L-4.559-54.392Q-4.559-54.580-4.606-54.664Q-4.654-54.747-4.752-54.766Q-4.849-54.785-5.061-54.785L-5.061-55.065L-4.005-55.140L-4.005-52.543Q-4.005-52.403-3.873-52.368Q-3.742-52.334-3.530-52.334L-3.530-52.054M-4.801-56.361Q-4.801-56.532-4.678-56.651Q-4.555-56.771-4.384-56.771Q-4.217-56.771-4.094-56.651Q-3.971-56.532-3.971-56.361Q-3.971-56.186-4.094-56.063Q-4.217-55.940-4.384-55.940Q-4.555-55.940-4.678-56.063Q-4.801-56.186-4.801-56.361M-2.357-52.895L-2.357-54.792L-2.997-54.792L-2.997-55.014Q-2.679-55.014-2.462-55.224Q-2.245-55.434-2.144-55.744Q-2.043-56.053-2.043-56.361L-1.776-56.361L-1.776-55.072L-0.700-55.072L-0.700-54.792L-1.776-54.792L-1.776-52.908Q-1.776-52.632-1.672-52.433Q-1.568-52.235-1.308-52.235Q-1.151-52.235-1.045-52.339Q-0.939-52.444-0.889-52.597Q-0.840-52.751-0.840-52.908L-0.840-53.322L-0.573-53.322L-0.573-52.895Q-0.573-52.669-0.672-52.459Q-0.772-52.249-0.956-52.117Q-1.141-51.986-1.370-51.986Q-1.807-51.986-2.082-52.223Q-2.357-52.461-2.357-52.895",[1215],[809,3618,3619],{"transform":3612},[1204,3620],{"d":3621,"fill":1201,"stroke":1201,"className":3622,"style":1691},"M4.633-51.914Q3.998-51.914 3.634-52.259Q3.269-52.604 3.134-53.129Q2.999-53.654 2.999-54.279Q2.999-55.304 3.355-56.003Q3.710-56.702 4.633-56.702Q5.560-56.702 5.912-56.003Q6.264-55.304 6.264-54.279Q6.264-53.654 6.129-53.129Q5.994-52.604 5.631-52.259Q5.269-51.914 4.633-51.914M4.633-52.139Q5.071-52.139 5.284-52.514Q5.498-52.888 5.548-53.355Q5.597-53.821 5.597-54.399Q5.597-54.952 5.548-55.380Q5.498-55.807 5.286-56.142Q5.074-56.477 4.633-56.477Q4.291-56.477 4.088-56.270Q3.885-56.063 3.798-55.751Q3.710-55.438 3.688-55.122Q3.666-54.805 3.666-54.399Q3.666-53.982 3.688-53.640Q3.710-53.298 3.799-52.950Q3.888-52.601 4.093-52.370Q4.298-52.139 4.633-52.139M8.615-51.914Q7.979-51.914 7.615-52.259Q7.251-52.604 7.116-53.129Q6.981-53.654 6.981-54.279Q6.981-55.304 7.337-56.003Q7.692-56.702 8.615-56.702Q9.541-56.702 9.894-56.003Q10.246-55.304 10.246-54.279Q10.246-53.654 10.111-53.129Q9.976-52.604 9.613-52.259Q9.251-51.914 8.615-51.914M8.615-52.139Q9.053-52.139 9.266-52.514Q9.480-52.888 9.529-53.355Q9.579-53.821 9.579-54.399Q9.579-54.952 9.529-55.380Q9.480-55.807 9.268-56.142Q9.056-56.477 8.615-56.477Q8.273-56.477 8.070-56.270Q7.867-56.063 7.779-55.751Q7.692-55.438 7.670-55.122Q7.648-54.805 7.648-54.399Q7.648-53.982 7.670-53.640Q7.692-53.298 7.781-52.950Q7.870-52.601 8.075-52.370Q8.280-52.139 8.615-52.139",[1215],[809,3624,3625],{"transform":3612},[1204,3626],{"d":3627,"fill":1201,"stroke":1201,"className":3628,"style":1691},"M19.325-53.630L13.600-53.630Q13.535-53.630 13.487-53.683Q13.439-53.736 13.439-53.804Q13.439-53.869 13.487-53.920Q13.535-53.971 13.600-53.971L19.325-53.971Q19.075-54.156 18.867-54.404Q18.658-54.652 18.518-54.940Q18.378-55.229 18.316-55.540Q18.316-55.633 18.409-55.646L18.576-55.646Q18.651-55.636 18.662-55.561Q18.744-55.161 18.967-54.817Q19.191-54.474 19.523-54.236Q19.854-53.999 20.254-53.896Q20.312-53.876 20.312-53.804Q20.312-53.773 20.297-53.744Q20.282-53.715 20.254-53.712Q19.858-53.609 19.523-53.367Q19.188-53.124 18.964-52.779Q18.740-52.433 18.662-52.040Q18.651-51.965 18.576-51.955L18.409-51.955Q18.316-51.969 18.316-52.061Q18.412-52.529 18.673-52.936Q18.935-53.343 19.325-53.630",[1215],[809,3630,3631],{"transform":3612},[1204,3632],{"d":3633,"fill":1201,"stroke":1201,"className":3634,"style":1691},"M25.130-51.914Q24.495-51.914 24.131-52.259Q23.766-52.604 23.631-53.129Q23.496-53.654 23.496-54.279Q23.496-55.304 23.852-56.003Q24.207-56.702 25.130-56.702Q26.057-56.702 26.409-56.003Q26.761-55.304 26.761-54.279Q26.761-53.654 26.626-53.129Q26.491-52.604 26.128-52.259Q25.766-51.914 25.130-51.914M25.130-52.139Q25.568-52.139 25.781-52.514Q25.995-52.888 26.045-53.355Q26.094-53.821 26.094-54.399Q26.094-54.952 26.045-55.380Q25.995-55.807 25.783-56.142Q25.571-56.477 25.130-56.477Q24.788-56.477 24.585-56.270Q24.382-56.063 24.295-55.751Q24.207-55.438 24.185-55.122Q24.163-54.805 24.163-54.399Q24.163-53.982 24.185-53.640Q24.207-53.298 24.296-52.950Q24.385-52.601 24.590-52.370Q24.795-52.139 25.130-52.139M30.449-52.054L27.919-52.054L27.919-52.334Q28.887-52.334 28.887-52.543L28.887-56.162Q28.494-55.974 27.871-55.974L27.871-56.255Q28.288-56.255 28.652-56.356Q29.016-56.456 29.273-56.702L29.399-56.702Q29.464-56.685 29.481-56.617L29.481-52.543Q29.481-52.334 30.449-52.334",[1215],[809,3636,3637],{"transform":3612},[1204,3638],{"d":3639,"fill":1201,"stroke":1201,"className":3640,"style":1691},"M39.822-53.630L34.097-53.630Q34.032-53.630 33.984-53.683Q33.936-53.736 33.936-53.804Q33.936-53.869 33.984-53.920Q34.032-53.971 34.097-53.971L39.822-53.971Q39.572-54.156 39.364-54.404Q39.155-54.652 39.015-54.940Q38.875-55.229 38.813-55.540Q38.813-55.633 38.906-55.646L39.073-55.646Q39.148-55.636 39.159-55.561Q39.241-55.161 39.464-54.817Q39.688-54.474 40.020-54.236Q40.351-53.999 40.751-53.896Q40.809-53.876 40.809-53.804Q40.809-53.773 40.794-53.744Q40.779-53.715 40.751-53.712Q40.355-53.609 40.020-53.367Q39.685-53.124 39.461-52.779Q39.237-52.433 39.159-52.040Q39.148-51.965 39.073-51.955L38.906-51.955Q38.813-51.969 38.813-52.061Q38.909-52.529 39.170-52.936Q39.432-53.343 39.822-53.630",[1215],[809,3642,3643],{"transform":3612},[1204,3644],{"d":3645,"fill":1201,"stroke":1201,"className":3646,"style":1691},"M46.964-52.054L44.434-52.054L44.434-52.334Q45.402-52.334 45.402-52.543L45.402-56.162Q45.009-55.974 44.387-55.974L44.387-56.255Q44.804-56.255 45.168-56.356Q45.532-56.456 45.788-56.702L45.914-56.702Q45.979-56.685 45.996-56.617L45.996-52.543Q45.996-52.334 46.964-52.334L46.964-52.054M50.946-52.054L48.416-52.054L48.416-52.334Q49.384-52.334 49.384-52.543L49.384-56.162Q48.991-55.974 48.368-55.974L48.368-56.255Q48.785-56.255 49.149-56.356Q49.513-56.456 49.770-56.702L49.896-56.702Q49.961-56.685 49.978-56.617L49.978-52.543Q49.978-52.334 50.946-52.334",[1215],[809,3648,3649],{"transform":3612},[1204,3650],{"d":3651,"fill":1201,"stroke":1201,"className":3652,"style":1691},"M60.319-53.630L54.594-53.630Q54.529-53.630 54.481-53.683Q54.433-53.736 54.433-53.804Q54.433-53.869 54.481-53.920Q54.529-53.971 54.594-53.971L60.319-53.971Q60.069-54.156 59.861-54.404Q59.652-54.652 59.512-54.940Q59.372-55.229 59.310-55.540Q59.310-55.633 59.403-55.646L59.570-55.646Q59.645-55.636 59.656-55.561Q59.738-55.161 59.961-54.817Q60.185-54.474 60.517-54.236Q60.848-53.999 61.248-53.896Q61.306-53.876 61.306-53.804Q61.306-53.773 61.291-53.744Q61.276-53.715 61.248-53.712Q60.852-53.609 60.517-53.367Q60.182-53.124 59.958-52.779Q59.734-52.433 59.656-52.040Q59.645-51.965 59.570-51.955L59.403-51.955Q59.310-51.969 59.310-52.061Q59.406-52.529 59.667-52.936Q59.929-53.343 60.319-53.630",[1215],[809,3654,3655],{"transform":3612},[1204,3656],{"d":3657,"fill":1201,"stroke":1201,"className":3658,"style":1691},"M67.461-52.054L64.931-52.054L64.931-52.334Q65.899-52.334 65.899-52.543L65.899-56.162Q65.506-55.974 64.884-55.974L64.884-56.255Q65.301-56.255 65.665-56.356Q66.029-56.456 66.285-56.702L66.411-56.702Q66.476-56.685 66.493-56.617L66.493-52.543Q66.493-52.334 67.461-52.334L67.461-52.054M70.106-51.914Q69.470-51.914 69.106-52.259Q68.742-52.604 68.607-53.129Q68.472-53.654 68.472-54.279Q68.472-55.304 68.828-56.003Q69.183-56.702 70.106-56.702Q71.032-56.702 71.385-56.003Q71.737-55.304 71.737-54.279Q71.737-53.654 71.602-53.129Q71.467-52.604 71.104-52.259Q70.742-51.914 70.106-51.914M70.106-52.139Q70.544-52.139 70.757-52.514Q70.971-52.888 71.020-53.355Q71.070-53.821 71.070-54.399Q71.070-54.952 71.020-55.380Q70.971-55.807 70.759-56.142Q70.547-56.477 70.106-56.477Q69.764-56.477 69.561-56.270Q69.358-56.063 69.270-55.751Q69.183-55.438 69.161-55.122Q69.139-54.805 69.139-54.399Q69.139-53.982 69.161-53.640Q69.183-53.298 69.272-52.950Q69.361-52.601 69.566-52.370Q69.771-52.139 70.106-52.139",[1215],[809,3660,3661],{"transform":3612},[1204,3662],{"d":3663,"fill":1201,"stroke":1201,"className":3664,"style":1691},"M75.116-52.061L75.116-53.124Q75.116-53.148 75.144-53.175Q75.171-53.202 75.195-53.202L75.304-53.202Q75.369-53.202 75.383-53.144Q75.479-52.710 75.725-52.459Q75.971-52.208 76.385-52.208Q76.726-52.208 76.979-52.341Q77.232-52.474 77.232-52.782Q77.232-52.939 77.138-53.054Q77.044-53.168 76.906-53.237Q76.767-53.305 76.600-53.343L76.019-53.442Q75.663-53.510 75.390-53.731Q75.116-53.951 75.116-54.293Q75.116-54.542 75.228-54.717Q75.339-54.891 75.525-54.990Q75.711-55.089 75.927-55.132Q76.142-55.175 76.385-55.175Q76.798-55.175 77.078-54.993L77.294-55.168Q77.304-55.171 77.311-55.173Q77.318-55.175 77.328-55.175L77.379-55.175Q77.406-55.175 77.430-55.151Q77.454-55.127 77.454-55.099L77.454-54.252Q77.454-54.231 77.430-54.204Q77.406-54.177 77.379-54.177L77.266-54.177Q77.239-54.177 77.213-54.202Q77.188-54.228 77.188-54.252Q77.188-54.488 77.082-54.652Q76.976-54.816 76.793-54.898Q76.610-54.980 76.378-54.980Q76.050-54.980 75.793-54.877Q75.537-54.775 75.537-54.498Q75.537-54.303 75.720-54.194Q75.903-54.084 76.132-54.043L76.706-53.937Q76.952-53.889 77.166-53.761Q77.379-53.633 77.516-53.430Q77.653-53.226 77.653-52.977Q77.653-52.464 77.287-52.225Q76.921-51.986 76.385-51.986Q75.889-51.986 75.557-52.280L75.291-52.006Q75.270-51.986 75.243-51.986L75.195-51.986Q75.171-51.986 75.144-52.013Q75.116-52.040 75.116-52.061M79.926-50.697L78.295-50.697L78.295-50.977Q78.524-50.977 78.673-51.012Q78.822-51.046 78.822-51.186L78.822-54.532Q78.822-54.703 78.685-54.744Q78.548-54.785 78.295-54.785L78.295-55.065L79.375-55.140L79.375-54.734Q79.597-54.935 79.885-55.038Q80.172-55.140 80.479-55.140Q80.906-55.140 81.271-54.927Q81.635-54.713 81.848-54.349Q82.062-53.985 82.062-53.565Q82.062-53.120 81.823-52.756Q81.583-52.392 81.190-52.189Q80.797-51.986 80.353-51.986Q80.086-51.986 79.838-52.086Q79.591-52.187 79.403-52.368L79.403-51.186Q79.403-51.049 79.551-51.013Q79.700-50.977 79.926-50.977L79.926-50.697M79.403-54.385L79.403-52.775Q79.536-52.522 79.779-52.365Q80.021-52.208 80.298-52.208Q80.626-52.208 80.879-52.409Q81.132-52.611 81.265-52.929Q81.399-53.247 81.399-53.565Q81.399-53.794 81.334-54.023Q81.269-54.252 81.141-54.450Q81.012-54.648 80.818-54.768Q80.623-54.887 80.390-54.887Q80.096-54.887 79.828-54.758Q79.560-54.628 79.403-54.385",[1215],[809,3666,3667],{"transform":3612},[1204,3668],{"d":3669,"fill":1201,"stroke":1201,"className":3670,"style":1691},"M82.875-53.589Q82.875-53.910 83-54.199Q83.125-54.488 83.351-54.711Q83.576-54.935 83.872-55.055Q84.167-55.175 84.485-55.175Q84.813-55.175 85.075-55.075Q85.336-54.976 85.512-54.794Q85.688-54.611 85.782-54.353Q85.876-54.095 85.876-53.763Q85.876-53.671 85.794-53.650L83.539-53.650L83.539-53.589Q83.539-53.001 83.822-52.618Q84.106-52.235 84.673-52.235Q84.995-52.235 85.263-52.428Q85.531-52.621 85.620-52.936Q85.627-52.977 85.702-52.991L85.794-52.991Q85.876-52.967 85.876-52.895Q85.876-52.888 85.870-52.861Q85.757-52.464 85.386-52.225Q85.015-51.986 84.591-51.986Q84.154-51.986 83.754-52.194Q83.354-52.403 83.115-52.770Q82.875-53.137 82.875-53.589M83.545-53.859L85.360-53.859Q85.360-54.136 85.263-54.388Q85.165-54.641 84.967-54.797Q84.769-54.952 84.485-54.952Q84.208-54.952 83.995-54.794Q83.781-54.635 83.663-54.380Q83.545-54.125 83.545-53.859M88.132-52.054L86.529-52.054L86.529-52.334Q86.755-52.334 86.904-52.368Q87.052-52.403 87.052-52.543L87.052-56.162Q87.052-56.432 86.945-56.494Q86.837-56.555 86.529-56.555L86.529-56.836L87.606-56.911L87.606-52.543Q87.606-52.406 87.756-52.370Q87.907-52.334 88.132-52.334L88.132-52.054M90.395-52.054L88.792-52.054L88.792-52.334Q89.018-52.334 89.166-52.368Q89.315-52.403 89.315-52.543L89.315-56.162Q89.315-56.432 89.207-56.494Q89.100-56.555 88.792-56.555L88.792-56.836L89.869-56.911L89.869-52.543Q89.869-52.406 90.019-52.370Q90.169-52.334 90.395-52.334L90.395-52.054M90.990-52.061L90.990-53.124Q90.990-53.148 91.017-53.175Q91.044-53.202 91.068-53.202L91.178-53.202Q91.243-53.202 91.256-53.144Q91.352-52.710 91.598-52.459Q91.844-52.208 92.258-52.208Q92.600-52.208 92.852-52.341Q93.105-52.474 93.105-52.782Q93.105-52.939 93.011-53.054Q92.917-53.168 92.779-53.237Q92.641-53.305 92.473-53.343L91.892-53.442Q91.537-53.510 91.263-53.731Q90.990-53.951 90.990-54.293Q90.990-54.542 91.101-54.717Q91.212-54.891 91.398-54.990Q91.584-55.089 91.800-55.132Q92.015-55.175 92.258-55.175Q92.671-55.175 92.952-54.993L93.167-55.168Q93.177-55.171 93.184-55.173Q93.191-55.175 93.201-55.175L93.252-55.175Q93.280-55.175 93.304-55.151Q93.328-55.127 93.328-55.099L93.328-54.252Q93.328-54.231 93.304-54.204Q93.280-54.177 93.252-54.177L93.140-54.177Q93.112-54.177 93.087-54.202Q93.061-54.228 93.061-54.252Q93.061-54.488 92.955-54.652Q92.849-54.816 92.666-54.898Q92.483-54.980 92.251-54.980Q91.923-54.980 91.666-54.877Q91.410-54.775 91.410-54.498Q91.410-54.303 91.593-54.194Q91.776-54.084 92.005-54.043L92.579-53.937Q92.825-53.889 93.039-53.761Q93.252-53.633 93.389-53.430Q93.526-53.226 93.526-52.977Q93.526-52.464 93.160-52.225Q92.794-51.986 92.258-51.986Q91.762-51.986 91.431-52.280L91.164-52.006Q91.144-51.986 91.116-51.986L91.068-51.986Q91.044-51.986 91.017-52.013Q90.990-52.040 90.990-52.061",[1215],[809,3672,3673],{"transform":3612},[1204,3674],{"d":3675,"fill":1201,"stroke":1201,"className":3676,"style":1691},"M98.537-51.914Q97.902-51.914 97.538-52.259Q97.173-52.604 97.038-53.129Q96.903-53.654 96.903-54.279Q96.903-55.304 97.259-56.003Q97.614-56.702 98.537-56.702Q99.464-56.702 99.816-56.003Q100.168-55.304 100.168-54.279Q100.168-53.654 100.033-53.129Q99.898-52.604 99.535-52.259Q99.173-51.914 98.537-51.914M98.537-52.139Q98.975-52.139 99.188-52.514Q99.402-52.888 99.452-53.355Q99.501-53.821 99.501-54.399Q99.501-54.952 99.452-55.380Q99.402-55.807 99.190-56.142Q98.978-56.477 98.537-56.477Q98.195-56.477 97.992-56.270Q97.789-56.063 97.702-55.751Q97.614-55.438 97.592-55.122Q97.570-54.805 97.570-54.399Q97.570-53.982 97.592-53.640Q97.614-53.298 97.703-52.950Q97.792-52.601 97.997-52.370Q98.202-52.139 98.537-52.139M102.519-51.914Q101.883-51.914 101.519-52.259Q101.155-52.604 101.020-53.129Q100.885-53.654 100.885-54.279Q100.885-55.304 101.241-56.003Q101.596-56.702 102.519-56.702Q103.445-56.702 103.798-56.003Q104.150-55.304 104.150-54.279Q104.150-53.654 104.015-53.129Q103.880-52.604 103.517-52.259Q103.155-51.914 102.519-51.914M102.519-52.139Q102.957-52.139 103.170-52.514Q103.384-52.888 103.433-53.355Q103.483-53.821 103.483-54.399Q103.483-54.952 103.433-55.380Q103.384-55.807 103.172-56.142Q102.960-56.477 102.519-56.477Q102.177-56.477 101.974-56.270Q101.771-56.063 101.683-55.751Q101.596-55.438 101.574-55.122Q101.552-54.805 101.552-54.399Q101.552-53.982 101.574-53.640Q101.596-53.298 101.685-52.950Q101.774-52.601 101.979-52.370Q102.184-52.139 102.519-52.139M107.838-52.054L105.308-52.054L105.308-52.334Q106.276-52.334 106.276-52.543L106.276-56.162Q105.882-55.974 105.260-55.974L105.260-56.255Q105.677-56.255 106.041-56.356Q106.405-56.456 106.662-56.702L106.788-56.702Q106.853-56.685 106.870-56.617L106.870-52.543Q106.870-52.334 107.838-52.334L107.838-52.054M111.819-52.054L109.290-52.054L109.290-52.334Q110.257-52.334 110.257-52.543L110.257-56.162Q109.864-55.974 109.242-55.974L109.242-56.255Q109.659-56.255 110.023-56.356Q110.387-56.456 110.644-56.702L110.770-56.702Q110.835-56.685 110.852-56.617L110.852-52.543Q110.852-52.334 111.819-52.334",[1215],[1306,3678,3680,3681,3714,3715,3739,3740,3755,3756,3798,3799,2127],{"className":3679},[1309],"The ",[454,3682,3684],{"className":3683},[457],[454,3685,3687,3705],{"className":3686,"ariaHidden":462},[461],[454,3688,3690,3693,3696,3699,3702],{"className":3689},[466],[454,3691],{"className":3692,"style":514},[470],[454,3694,3109],{"className":3695,"style":3108},[475,476],[454,3697],{"className":3698,"style":1010},[1009],[454,3700,1015],{"className":3701},[1014],[454,3703],{"className":3704,"style":1010},[1009],[454,3706,3708,3711],{"className":3707},[466],[454,3709],{"className":3710,"style":702},[470],[454,3712,723],{"className":3713},[475]," binary de Bruijn graph (vertices ",[454,3716,3718],{"className":3717},[457],[454,3719,3721],{"className":3720,"ariaHidden":462},[461],[454,3722,3724,3727,3730,3733,3736],{"className":3723},[466],[454,3725],{"className":3726,"style":1930},[470],[454,3728,706],{"className":3729},[475],[454,3731,1491],{"className":3732},[1490],[454,3734],{"className":3735,"style":1495},[1009],[454,3737,554],{"className":3738},[475],"; edges = the four ",[454,3741,3743],{"className":3742},[457],[454,3744,3746],{"className":3745,"ariaHidden":462},[461],[454,3747,3749,3752],{"className":3748},[466],[454,3750],{"className":3751,"style":702},[470],[454,3753,723],{"className":3754},[475],"-grams). Its Eulerian circuit ",[454,3757,3759],{"className":3758},[457],[454,3760,3762],{"className":3761,"ariaHidden":462},[461],[454,3763,3765,3768,3771,3774,3777,3780,3783,3786,3789,3792,3795],{"className":3764},[466],[454,3766],{"className":3767,"style":1930},[470],[454,3769,3298],{"className":3770},[475],[454,3772,1491],{"className":3773},[1490],[454,3775],{"className":3776,"style":1495},[1009],[454,3778,3308],{"className":3779},[475],[454,3781,1491],{"className":3782},[1490],[454,3784],{"className":3785,"style":1495},[1009],[454,3787,3328],{"className":3788},[475],[454,3790,1491],{"className":3791},[1490],[454,3793],{"className":3794,"style":1495},[1009],[454,3796,3318],{"className":3797},[475]," spells the cyclic de Bruijn sequence ",[454,3800,3802],{"className":3801},[457],[454,3803,3805],{"className":3804,"ariaHidden":462},[461],[454,3806,3808,3811],{"className":3807},[466],[454,3809],{"className":3810,"style":702},[470],[454,3812,3459],{"className":3813},[475],[381,3815,3816,3817,3820],{},"The same\nidea drives ",[395,3818,3819],{},"DNA fragment assembly",", where overlapping reads become edges of a\nde Bruijn graph and an Eulerian path stitches the genome back together, a problem\nthat, posed instead as a Hamiltonian path over the reads, would be hopeless.",[560,3822,3824],{"id":3823},"takeaways","Takeaways",[3826,3827,3828,3855,3912,4085,4125],"ul",{},[3829,3830,3831,3832,3834,3835,3838,3839,3841,3842,3845,3846,3848,3849,3851,3852,3854],"li",{},"An ",[395,3833,416],{}," uses every ",[385,3836,3837],{},"edge"," exactly once; an ",[395,3840,424],{}," is\na closed one. This is the ",[385,3843,3844],{},"easy"," cousin of the ",[395,3847,443],{}," tour (every\n",[385,3850,451],{}," once), which is ",[395,3853,500],{}," — edges are easy, vertices are hard.",[3829,3856,3857,3860,3861,3864,3865,3868,3869,3871,3872,3905,3906,3908,3909,3911],{},[395,3858,3859],{},"Undirected existence",": a connected graph has an Eulerian ",[395,3862,3863],{},"circuit"," iff\nevery vertex has ",[395,3866,3867],{},"even degree",", and an Eulerian ",[395,3870,1204],{}," iff exactly ",[395,3873,3874,3889,3890],{},[454,3875,3877],{"className":3876},[457],[454,3878,3880],{"className":3879,"ariaHidden":462},[461],[454,3881,3883,3886],{"className":3882},[466],[454,3884],{"className":3885,"style":702},[470],[454,3887,706],{"className":3888},[475]," or\n",[454,3891,3893],{"className":3892},[457],[454,3894,3896],{"className":3895,"ariaHidden":462},[461],[454,3897,3899,3902],{"className":3898},[466],[454,3900],{"className":3901,"style":702},[470],[454,3903,723],{"className":3904},[475]," vertices have ",[395,3907,727],{}," (the two odds are the endpoints). The\n",[395,3910,569],{},": each through-visit consumes a pair of incident edges.",[3829,3913,3914,3917,3918,675,3920,3959,3960,3962,3963,4023,4024,4084],{},[395,3915,3916],{},"Directed existence",": an Eulerian ",[395,3919,3863],{},[454,3921,3923],{"className":3922},[457],[454,3924,3926,3947],{"className":3925,"ariaHidden":462},[461],[454,3927,3929,3932,3938,3941,3944],{"className":3928},[466],[454,3930],{"className":3931,"style":1056},[470],[454,3933,3935],{"className":3934},[475,518],[454,3936,996],{"className":3937},[475],[454,3939],{"className":3940,"style":1010},[1009],[454,3942,1015],{"className":3943},[1014],[454,3945],{"className":3946,"style":1010},[1009],[454,3948,3950,3953],{"className":3949},[466],[454,3951],{"className":3952,"style":1056},[470],[454,3954,3956],{"className":3955},[475,518],[454,3957,1031],{"className":3958},[475]," everywhere; an Eulerian ",[395,3961,1204],{}," iff one vertex has\n",[454,3964,3966],{"className":3965},[457],[454,3967,3969,3990,4011],{"className":3968,"ariaHidden":462},[461],[454,3970,3972,3975,3981,3984,3987],{"className":3971},[466],[454,3973],{"className":3974,"style":1340},[470],[454,3976,3978],{"className":3977},[475,518],[454,3979,1347],{"className":3980},[475],[454,3982],{"className":3983,"style":1066},[1009],[454,3985,1071],{"className":3986},[1070],[454,3988],{"className":3989,"style":1066},[1009],[454,3991,3993,3996,4002,4005,4008],{"className":3992},[466],[454,3994],{"className":3995,"style":1363},[470],[454,3997,3999],{"className":3998},[475,518],[454,4000,1370],{"className":4001},[475],[454,4003],{"className":4004,"style":1010},[1009],[454,4006,1015],{"className":4007},[1014],[454,4009],{"className":4010,"style":1010},[1009],[454,4012,4014,4017,4020],{"className":4013},[466],[454,4015],{"className":4016,"style":1102},[470],[454,4018,1106],{"className":4019},[475],[454,4021,554],{"className":4022},[475]," (start), one has ",[454,4025,4027],{"className":4026},[457],[454,4028,4030,4051,4072],{"className":4029,"ariaHidden":462},[461],[454,4031,4033,4036,4042,4045,4048],{"className":4032},[466],[454,4034],{"className":4035,"style":1422},[470],[454,4037,4039],{"className":4038},[475,518],[454,4040,1370],{"className":4041},[475],[454,4043],{"className":4044,"style":1066},[1009],[454,4046,1071],{"className":4047},[1070],[454,4049],{"className":4050,"style":1066},[1009],[454,4052,4054,4057,4063,4066,4069],{"className":4053},[466],[454,4055],{"className":4056,"style":1405},[470],[454,4058,4060],{"className":4059},[475,518],[454,4061,1347],{"className":4062},[475],[454,4064],{"className":4065,"style":1010},[1009],[454,4067,1015],{"className":4068},[1014],[454,4070],{"className":4071,"style":1010},[1009],[454,4073,4075,4078,4081],{"className":4074},[466],[454,4076],{"className":4077,"style":1102},[470],[454,4079,1106],{"className":4080},[475],[454,4082,554],{"className":4083},[475]," (end), rest\nbalanced — plus connectivity of the edge set.",[3829,4086,4087,4089,4090,4116,4117,4120,4121,4124],{},[395,4088,2131],{}," builds a tour in ",[395,4091,4092],{},[454,4093,4095],{"className":4094},[457],[454,4096,4098],{"className":4097,"ariaHidden":462},[461],[454,4099,4101,4104,4107,4110,4113],{"className":4100},[466],[454,4102],{"className":4103,"style":471},[470],[454,4105,478],{"className":4106,"style":477},[475,476],[454,4108,483],{"className":4109},[482],[454,4111,488],{"className":4112,"style":487},[475,476],[454,4114,493],{"className":4115},[492]," by walking until it\ncloses a sub-tour, then ",[395,4118,4119],{},"splicing"," in further closed sub-tours at vertices\nwith leftover edges; a stack plus a per-vertex ",[395,4122,4123],{},"edge pointer"," emits the route\nin reverse on backtrack.",[3829,4126,4127,4129,4130,4133],{},[395,4128,3073],{},": itinerary reconstruction (lexicographic via sorted edges),\n",[395,4131,4132],{},"de Bruijn sequences"," (Eulerian circuit on the de Bruijn graph), and DNA\nfragment assembly.",[4135,4136,4139,4144],"section",{"className":4137,"dataFootnotes":376},[4138],"footnotes",[560,4140,4143],{"className":4141,"id":552},[4142],"sr-only","Footnotes",[4145,4146,4147,4161,4173],"ol",{},[3829,4148,4150,4153,4154],{"id":4149},"user-content-fn-erickson-euler",[395,4151,4152],{},"Erickson",", Ch. — Graph Traversal: Eulerian tours via the degree characterization, contrasted with the NP-complete Hamiltonian problem. ",[390,4155,4160],{"href":4156,"ariaLabel":4157,"className":4158,"dataFootnoteBackref":376},"#user-content-fnref-erickson-euler","Back to reference 1",[4159],"data-footnote-backref","↩",[3829,4162,4164,4167,4168],{"id":4163},"user-content-fn-skiena-euler",[395,4165,4166],{},"Skiena",", § — Eulerian Cycles: the even-degree (balanced) existence condition and its parity proof. ",[390,4169,4160],{"href":4170,"ariaLabel":4171,"className":4172,"dataFootnoteBackref":376},"#user-content-fnref-skiena-euler","Back to reference 2",[4159],[3829,4174,4176,4179,4180],{"id":4175},"user-content-fn-clrs-euler",[395,4177,4178],{},"CLRS",", Ch. — Euler Tour (Problem): linear-time construction of an Eulerian tour on a graph satisfying the degree\u002Fbalance conditions. ",[390,4181,4160],{"href":4182,"ariaLabel":4183,"className":4184,"dataFootnoteBackref":376},"#user-content-fnref-clrs-euler","Back to reference 3",[4159],[4186,4187,4188],"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":4190},[4191,4192,4193,4194,4195],{"id":562,"depth":18,"text":563},{"id":2130,"depth":18,"text":2131},{"id":3072,"depth":18,"text":3073},{"id":3823,"depth":18,"text":3824},{"id":552,"depth":18,"text":4143},"The traversals of the previous lessons were about reaching vertices: BFS and\nDFS each touch every vertex\nonce and impose no constraint on how often an edge is\nused. This lesson turns the question inside out. We ask for a walk that crosses\nevery edge exactly once: the problem Euler posed in 1736 for the seven\nbridges of Königsberg, and the historical seed of graph theory itself. Unlike\nmost use everything exactly once problems, this\none has a clean local characterization and a linear-time algorithm.","md",{"moduleNumber":108,"lessonNumber":202,"order":4199},609,true,[4202,4205,4208],{"title":3083,"slug":4203,"difficulty":4204},"reconstruct-itinerary","Hard",{"title":4206,"slug":4207,"difficulty":4204},"Valid Arrangement of Pairs","valid-arrangement-of-pairs",{"title":3113,"slug":4209,"difficulty":4204},"cracking-the-safe","---\ntitle: Eulerian Tours\nmodule: Graphs\nmoduleNumber: 6\nlessonNumber: 9\norder: 609\nsummary: >-\n  An **Eulerian tour** uses every _edge_ of a graph exactly once. We give the\n  exact parity and balance conditions under which one exists (even degree\n  for undirected graphs, in-degree equal to out-degree for directed) and Hierholzer's\n  $O(E)$ algorithm that constructs one by splicing closed sub-tours. We contrast\n  this sharply with the **Hamiltonian** problem (visit every _vertex_ once),\n  which is NP-complete: visiting edges is easy, visiting vertices is hard.\ntopics: [Graphs]\nsources:\n  - book: Skiena\n    ref: \"§ — Eulerian Cycles\"\n  - book: Erickson\n    ref: \"Ch. — Graph Traversal\"\n  - book: CLRS\n    ref: \"Ch. — Euler Tour (Problem)\"\npractice:\n  - title: 'Reconstruct Itinerary'\n    slug: reconstruct-itinerary\n    difficulty: Hard\n  - title: 'Valid Arrangement of Pairs'\n    slug: valid-arrangement-of-pairs\n    difficulty: Hard\n  - title: 'Cracking the Safe'\n    slug: cracking-the-safe\n    difficulty: Hard\n---\n\nThe traversals of the previous lessons were about _reaching_ vertices: BFS and\n[DFS](\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal) each touch every vertex\nonce and impose no constraint on how often an edge is\nused. This lesson turns the question inside out. We ask for a walk that crosses\n**every edge exactly once**: the problem Euler posed in 1736 for the seven\nbridges of Königsberg, and the historical seed of graph theory itself. Unlike\nmost \"use everything exactly once\" problems, this\none has a clean local characterization and a linear-time algorithm.\n\n> **Definition.** An **Eulerian path** is a walk that uses every edge of the\n> graph _exactly once_. An **Eulerian circuit** (or _Eulerian tour_) is an\n> Eulerian path that starts and ends at the same vertex — a _closed_ one.\n\nIt is worth fixing the contrast that gives the lesson its shape. An Eulerian tour\nconstrains **edges**; its near-twin, the **Hamiltonian** tour, constrains\n**vertices**, visiting every _vertex_ exactly once. The two look like mirror images,\nbut they sit on opposite sides of the great divide in algorithms. Deciding\nwhether an Eulerian tour exists, and building one, takes $O(E)$ time, as we will\nsee. Deciding whether a **Hamiltonian** cycle exists is **NP-complete**: no\npolynomial algorithm is known, and finding one would settle $\\textsf{P}$ vs\n$\\textsf{NP}$ (we return to intractability in a later module).[^erickson-euler]\nThe slogan to remember: **visiting every edge is easy; visiting every vertex is\nhard.**\n\n## When does an Eulerian tour exist?\n\nThe existence test is pure local arithmetic on degrees. The intuition is a single\n**parity argument**: think of walking through the tour and watching one fixed\nvertex $v$. Every time the walk _passes through_ $v$ it arrives on one edge and\nleaves on another, consuming a _pair_ of edges incident to $v$. So the edges at\nan interior vertex must come in pairs.\n\n> **Theorem (undirected).** Let $G$ be connected when isolated vertices are\n> ignored. Then $G$ has an **Eulerian circuit** iff _every_ vertex has **even\n> degree**. It has an **Eulerian path** (open) iff **exactly $0$ or $2$**\n> vertices have **odd degree**; when there are two, they are the only possible\n> endpoints.\n\n> **Proof sketch (necessity).** Fix the tour and a vertex $v$. Each passage through\n> $v$ uses two of its incident edges. If the tour is closed, _every_ visit to $v$,\n> including the start, where it leaves and later returns, is a through-passage, so\n> $\\deg(v)$ is even for all $v$. If the tour is open, the same pairing holds at\n> every vertex _except_ the two endpoints, where one unpaired edge (the very first\n> departure, the very last arrival) leaves an odd count. Hence at most two odd\n> vertices, and a hand-shaking count forces the number of odd-degree vertices to be\n> even, so it is $0$ or $2$. Sufficiency is exactly what Hierholzer's algorithm\n> below constructs.[^skiena-euler] $\\qed$\n\nFor **directed** graphs the parity condition sharpens into a _balance_ condition,\nbecause each edge now has a direction: a through-passage at $v$ consumes one\n_incoming_ and one _outgoing_ edge.\n\n> **Theorem (directed).** Let the edges of $G$ form a single connected component\n> (every vertex with an edge is reachable in the underlying undirected sense).\n> Then $G$ has an **Eulerian circuit** iff every vertex has\n> $\\text{in-deg}(v) = \\text{out-deg}(v)$. It has an **Eulerian path** iff exactly\n> one vertex has $\\text{out-deg} - \\text{in-deg} = +1$ (the **start**), exactly\n> one has $\\text{in-deg} - \\text{out-deg} = +1$ (the **end**), and every other\n> vertex is balanced.\n\nThe two extra-edge vertices are forced: a start emits one more edge than it\nabsorbs, an end absorbs one more than it emits, and everyone the walk merely\npasses through breaks even. Connectivity is the second, easily-forgotten half of\nthe test: degrees can balance perfectly while the edges split into two disjoint\nloops, which no single walk can join.\n\n$$\n% caption: directed path: start $s$ has $\\text{out}-\\text{in}=+1$, end $t$ has\n%          $\\text{in}-\\text{out}=+1$, $a,b$ balanced\n\\begin{tikzpicture}[\n  >=stealth,\n  every node\u002F.style={circle, draw, minimum size=8mm, inner sep=1pt, font=\\small}]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node[draw=acc, thick, text=acc] (s) at (0,0)   {$s$};\n  \\node (a) at (2.0,0)  {$a$};\n  \\node (b) at (4.0,0.9) {$b$};\n  \\node[draw=acc, thick, text=acc] (t) at (4.0,-0.9) {$t$};\n  \\draw[->] (s) -- (a);\n  \\draw[->] (a) to[bend left=30] (b);\n  \\draw[->] (b) to[bend left=30] (a);\n  \\draw[->] (a) -- (t);\n  \\node[draw=none, font=\\footnotesize, text=acc] at (0,-1.0) {$+1$ out};\n  \\node[draw=none, font=\\footnotesize, text=acc] at (4.9,-0.9) {$+1$ in};\n\\end{tikzpicture}\n$$\n\n$$\n% caption: balanced but disconnected: two separate even loops admit no single Eulerian\n%          tour\n\\begin{tikzpicture}[\n  every node\u002F.style={circle, draw, minimum size=7mm, inner sep=0pt, font=\\small},\n  >=stealth]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node (a) at (0,1.2) {$a$};\n  \\node (b) at (1.2,0) {$b$};\n  \\node (c) at (0,-1.2) {$c$};\n  \\draw (a)--(b)--(c)--(a);\n  \\node (d) at (3.4,1.2) {$d$};\n  \\node (e) at (4.6,0) {$e$};\n  \\node (f) at (3.4,-1.2) {$f$};\n  \\draw[acc, thick] (d)--(e)--(f)--(d);\n  \\node[draw=none, font=\\footnotesize] at (0.4,-2.1) {even};\n  \\node[draw=none, font=\\footnotesize, text=acc] at (3.8,-2.1) {even, but disjoint};\n\\end{tikzpicture}\n$$\n\n$$\n% caption: Eulerian path $\\iff$ 0 or 2 odd-degree vertices\n\\begin{tikzpicture}[\n  every node\u002F.style={circle, draw, minimum size=8mm, inner sep=1pt, font=\\small},\n  >=stealth]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\tikzset{odd\u002F.style={circle, draw=acc, very thick, text=acc, minimum size=8mm, inner sep=1pt, font=\\small}}\n  \\tikzset{edgelbl\u002F.style={draw=none, fill=none, font=\\footnotesize, text=acc}}\n  \\node[odd] (a) at (0,0) {$a$};\n  \\node (b) at (2.4,1.1) {$b$};\n  \\node (c) at (4.8,0) {$c$};\n  \\node[odd] (d) at (2.4,-1.6) {$d$};\n  % degree labels\n  \\node[draw=none] at (-0.95,0.0) {\\scriptsize$\\deg 3$};\n  \\node[draw=none] at (2.4,1.95) {\\scriptsize$\\deg 2$};\n  \\node[draw=none] at (5.75,0.0) {\\scriptsize$\\deg 2$};\n  \\node[draw=none] at (2.4,-2.45) {\\scriptsize$\\deg 3$};\n  % edges numbered in traversal order a-b-c-d-a-d (path a..d)\n  \\draw[->] (a) -- node[edgelbl, above left]{1} (b);\n  \\draw[->] (b) -- node[edgelbl, above right]{2} (c);\n  \\draw[->] (c) -- node[edgelbl, right]{3} (d);\n  \\draw[->] (d) -- node[edgelbl, below]{4} (a);\n  \\draw[->] (a) -- node[edgelbl, left]{5} (d);\n\\end{tikzpicture}\n$$\n\nHere $a$ and $d$ each have odd degree $3$; the other two are even, so an Eulerian\n**path** exists and must run between $a$ and $d$. The numbering $1,2,3,4,5$ is one\nvalid traversal $a\\!\\to\\!b\\!\\to\\!c\\!\\to\\!d\\!\\to\\!a\\!\\to\\!d$, which crosses all\nfive edges once and stops at $d$.\n\n## Hierholzer's algorithm\n\nThe natural greedy idea is _almost_ right: start somewhere, keep walking along\nedges you have not used, and never look back. Because every vertex is balanced (or\nyou begin at an odd endpoint), you can always leave a vertex you entered, so the\nwalk only ever gets stuck back at its starting vertex, closing a loop. But that\nfirst loop may not have swallowed _every_ edge. **Hierholzer's algorithm** fixes\nthis with one elegant move: whenever a vertex on the current tour still has unused\nedges hanging off it, splice a fresh closed sub-tour in at that vertex, and repeat\nuntil nothing is left over.\n\n> **Intuition.** A closed walk through a balanced vertex always uses its edges in\n> pairs, so an unused edge at a visited vertex $u$ implies an _even_ number of\n> unused edges at $u$ — enough to walk out and circle back to $u$. That returning\n> loop is another closed sub-tour, and it can be **spliced** into the route\n> exactly at $u$. Splicing never breaks closure, and every splice consumes at\n> least one fresh edge, so the process halts having consumed them all.\n\n$$\n% caption: merge closed sub-tours into one Eulerian circuit\n\\begin{tikzpicture}[\n  every node\u002F.style={circle, draw, minimum size=7mm, inner sep=1pt, font=\\small},\n  >=stealth]\n  \\definecolor{acc}{HTML}{2348F2}\n  % main closed walk: s - p - q - s   (splice point u = p)\n  \\node (s) at (0,0) {$s$};\n  \\node (p) at (2.0,1.0) {$u$};\n  \\node (q) at (2.0,-1.0) {$q$};\n  \\draw[->] (s) -- (p);\n  \\draw[->] (p) -- (q);\n  \\draw[->] (q) -- (s);\n  % spliced-in closed sub-tour at u (in acc): u - x - y - u\n  \\node[draw=acc, very thick, text=acc] (x) at (4.4,1.9) {$x$};\n  \\node[draw=acc, very thick, text=acc] (y) at (4.4,0.1) {$y$};\n  \\draw[->, draw=acc, very thick] (p) -- (x);\n  \\draw[->, draw=acc, very thick] (x) -- (y);\n  \\draw[->, draw=acc, very thick] (y) -- (p);\n  \\node[draw=none, rectangle, text=acc, font=\\footnotesize] at (2.0,2.55) {splice at $u$};\n\\end{tikzpicture}\n$$\n\nThe blue loop $u\\!\\to\\!x\\!\\to\\!y\\!\\to\\!u$ is a closed sub-tour discovered when the\nmain walk $s\\!\\to\\!u\\!\\to\\!q\\!\\to\\!s$ reached $u$ and found unused edges. Inserting\nit at $u$ yields the single circuit\n$s\\!\\to\\!u\\!\\to\\!x\\!\\to\\!y\\!\\to\\!u\\!\\to\\!q\\!\\to\\!s$.\n\nThe clean implementation does the splicing _implicitly_ with a stack and one\n**edge pointer per vertex** (so each vertex resumes scanning where it left off,\nnever re-examining a used edge). We push our way forward along unused edges; when\na vertex runs dry, we pop it onto the output. The route is therefore **emitted in\nreverse** on backtracking, and a spliced sub-tour is naturally inserted at its\nshared vertex.\n\n```algorithm\ncaption: $\\textsc{Hierholzer}(G, s)$ — build an Eulerian tour from start $s$ in $O(E)$\nfor each vertex $v$ do\n  $ptr[v] \\gets 0$            \u002F\u002F next-unused-edge index\n$stack \\gets [\\,s\\,]$;\\ \\ \\ $route \\gets [\\,]$\nwhile $stack$ is nonempty do\n  $u \\gets stack.\\text{top}()$\n  if $ptr[u] \u003C |adj[u]|$ then          \u002F\u002F u has an unused edge\n    $w \\gets adj[u][\\,ptr[u]\\,]$\n    $ptr[u] \\gets ptr[u] + 1$          \u002F\u002F consume edge u→w\n    $stack.\\text{push}(w)$             \u002F\u002F walk forward\n  else                                 \u002F\u002F u exhausted: back out\n    $route.\\text{append}(stack.\\text{pop}())$\n$\\textbf{return } reverse(route)$       \u002F\u002F emitted in reverse on backtrack\n```\n\n**Why it consumes every edge.** Each iteration either advances an edge pointer\n(consuming exactly one edge) or pops one vertex; both can happen at most $O(E)$\nand $O(V)$ times respectively, so the loop runs in $O(V + E) = O(E)$ on a\nconnected graph. The pointer trick means each edge is _examined once_, never\nrescanned. When a vertex $u$ is finally popped, the algorithm has, by the parity\nargument, already drained every edge incident to $u$ along the way; any edge it\nhad skipped would have been picked up by a later pointer advance before $u$ could\nexhaust. Reading $route$ in reverse threads every discovered sub-tour through its\nsplice vertex, producing one walk that uses all $E$ edges exactly once. If the\nexistence conditions hold, the output is a valid Eulerian tour; for an open\nEulerian path, start $s$ at the unique out-excess vertex (directed) or an\nodd-degree vertex (undirected).[^clrs-euler]\n\n## Applications\n\nThe pattern \"use every edge once\" is more common than it first appears.\n**Reconstruct Itinerary** asks for a flight schedule that uses every ticket\nexactly once: an Eulerian path on the directed multigraph of airports, where the\nproblem's lexicographically-smallest requirement is met by keeping each vertex's\noutgoing destinations in _sorted order_ and letting Hierholzer consume them in\nthat order. **De Bruijn sequences** are the gem: to find a shortest cyclic string\ncontaining every length-$k$ string over an alphabet exactly once (the\n**Cracking the Safe** problem), build the **de Bruijn graph** whose vertices are\n$(k\\!-\\!1)$-grams and whose edges are $k$-grams; that graph is balanced by\nconstruction, so an **Eulerian circuit** spells out the optimal sequence.\n\nThe smallest case makes it vivid. For binary strings of length $k=2$, the de\nBruijn graph has two vertices, the $1$-grams $0$ and $1$, and four edges, the\n$2$-grams $00, 01, 10, 11$. Every vertex is balanced (in-degree $=$ out-degree\n$=2$), so an Eulerian circuit exists; following $00 \\to 01 \\to 11 \\to 10$ and\nreading the new symbol off each edge spells the de Bruijn sequence $0011$, a\nlength-$4$ cyclic string in which all four $2$-bit patterns appear exactly once:\n\n$$\n% caption: The $k=2$ binary de Bruijn graph (vertices $0,1$; edges = the four $2$-grams).\n%          Its Eulerian circuit $00,01,11,10$ spells the cyclic de Bruijn sequence $0011$.\n\\begin{tikzpicture}[>=Stealth, font=\\small,\n  V\u002F.style={circle, draw, minimum size=9mm, font=\\small},\n  e\u002F.style={->, line width=1pt},\n  lbl\u002F.style={font=\\scriptsize, fill=white, inner sep=1.5pt}]\n  \\definecolor{acc}{HTML}{2348F2}\n  \\node[V] (z) at (0,0) {$0$};\n  \\node[V] (o) at (3.2,0) {$1$};\n  % self-loops\n  \\draw[e] (z) to[out=160, in=200, looseness=8] node[lbl, left]{$00$} (z);\n  \\draw[e] (o) to[out=-20, in=20, looseness=8] node[lbl, right]{$11$} (o);\n  % cross edges\n  \\draw[e] (z) to[bend left=22] node[lbl, above]{$01$} (o);\n  \\draw[e] (o) to[bend left=22] node[lbl, below]{$10$} (z);\n  \\node[font=\\scriptsize, acc] at (1.6,-1.7)\n    {circuit $00 \\to 01 \\to 11 \\to 10$ spells $0011$};\n\\end{tikzpicture}\n$$\n\nThe same\nidea drives **DNA fragment assembly**, where overlapping reads become edges of a\nde Bruijn graph and an Eulerian path stitches the genome back together, a problem\nthat, posed instead as a Hamiltonian path over the reads, would be hopeless.\n\n## Takeaways\n\n- An **Eulerian path** uses every _edge_ exactly once; an **Eulerian circuit** is\n  a closed one. This is the _easy_ cousin of the **Hamiltonian** tour (every\n  _vertex_ once), which is **NP-complete** — edges are easy, vertices are hard.\n- **Undirected existence**: a connected graph has an Eulerian **circuit** iff\n  every vertex has **even degree**, and an Eulerian **path** iff exactly **$0$ or\n  $2$** vertices have **odd degree** (the two odds are the endpoints). The\n  **parity argument**: each through-visit consumes a pair of incident edges.\n- **Directed existence**: an Eulerian **circuit** iff $\\text{in-deg} =\n  \\text{out-deg}$ everywhere; an Eulerian **path** iff one vertex has\n  $\\text{out}-\\text{in}=+1$ (start), one has $\\text{in}-\\text{out}=+1$ (end), rest\n  balanced — plus connectivity of the edge set.\n- **Hierholzer's algorithm** builds a tour in **$O(E)$** by walking until it\n  closes a sub-tour, then **splicing** in further closed sub-tours at vertices\n  with leftover edges; a stack plus a per-vertex **edge pointer** emits the route\n  in reverse on backtrack.\n- **Applications**: itinerary reconstruction (lexicographic via sorted edges),\n  **de Bruijn sequences** (Eulerian circuit on the de Bruijn graph), and DNA\n  fragment assembly.\n\n[^erickson-euler]: **Erickson**, Ch. — Graph Traversal: Eulerian tours via the degree characterization, contrasted with the NP-complete Hamiltonian problem.\n[^skiena-euler]: **Skiena**, § — Eulerian Cycles: the even-degree (balanced) existence condition and its parity proof.\n[^clrs-euler]: **CLRS**, Ch. — Euler Tour (Problem): linear-time construction of an Eulerian tour on a graph satisfying the degree\u002Fbalance conditions.\n",{"text":4212,"minutes":4213,"time":4214,"words":4215},"8 min read",7.715,462900,1543,{"title":200,"description":4196},[4218,4220,4222],{"book":4166,"ref":4219},"§ — Eulerian Cycles",{"book":4152,"ref":4221},"Ch. — Graph Traversal",{"book":4178,"ref":4223},"Ch. — Euler Tour (Problem)","available","01.algorithms\u002F06.graphs\u002F09.eulerian-tours",[153],"Gxz2MajLcPACzKzeZ2JO2yn8y5FRGQYpDXCtYG9AJow",{"\u002Falgorithms\u002Ffoundations\u002Fwhat-is-an-algorithm":4229,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":4230,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":4231,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":4232,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":4233,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":4234,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":4235,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":4236,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":4237,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":4238,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":4239,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":4240,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":4241,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":4242,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":4243,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":4244,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":4245,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":4246,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":4247,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":4248,"\u002Falgorithms\u002Fsequences\u002Ftries":4249,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":4250,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":4251,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":4252,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":4253,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":4254,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":4255,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":4256,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":4257,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":4215,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":4258,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":4259,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":4260,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":4261,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":4262,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":4263,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":4264,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":4265,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":4266,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":4267,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":4268,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":4269,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":4270,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":4271,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":4272,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":4273,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":4274,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":4245,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":4275,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":4276,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":4277,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":4278,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":4260,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":4279,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":4280,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":4241,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":4281,"\u002Falgorithms":4282,"\u002Ftheory-of-computation":4283,"\u002Fcomputer-architecture":4283,"\u002Fphysical-computing":4283,"\u002Fdatabases":4283,"\u002Fdeep-learning":4283},1763,2107,1738,2628,1723,2048,1697,1044,1542,1565,1679,1586,1388,1465,1971,1455,1533,1483,1578,1791,1481,2704,1658,2070,1978,2080,1568,1451,1291,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":4285,"\u002Falgorithms\u002Ffoundations\u002Fasymptotic-analysis":4286,"\u002Falgorithms\u002Ffoundations\u002Frecurrences":4287,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fmergesort":4288,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fquicksort":4289,"\u002Falgorithms\u002Fdivide-and-conquer\u002Fselection":4290,"\u002Falgorithms\u002Fsorting\u002Fheaps-and-heapsort":4291,"\u002Falgorithms\u002Fsorting\u002Fsorting-lower-bounds":4292,"\u002Falgorithms\u002Fsorting\u002Flinear-time-sorting":4293,"\u002Falgorithms\u002Fdata-structures\u002Felementary-structures":4294,"\u002Falgorithms\u002Fdata-structures\u002Fhash-tables":4295,"\u002Falgorithms\u002Fdata-structures\u002Fbinary-search-trees":4296,"\u002Falgorithms\u002Fdata-structures\u002Favl-trees":4297,"\u002Falgorithms\u002Fdata-structures\u002Fbalanced-trees":4298,"\u002Falgorithms\u002Fdata-structures\u002Funion-find":4299,"\u002Falgorithms\u002Fdata-structures\u002Ffenwick-and-segment-trees":4300,"\u002Falgorithms\u002Fsequences\u002Ftwo-pointers-and-windows":4301,"\u002Falgorithms\u002Fsequences\u002Fmonotonic-stacks":4302,"\u002Falgorithms\u002Fsequences\u002Fbinary-search-on-the-answer":4303,"\u002Falgorithms\u002Fsequences\u002Fstring-matching":4304,"\u002Falgorithms\u002Fsequences\u002Ftries":4305,"\u002Falgorithms\u002Fgraphs\u002Frepresentations-and-traversal":4306,"\u002Falgorithms\u002Fgraphs\u002Ftopological-sort-and-scc":4307,"\u002Falgorithms\u002Fgraphs\u002Fminimum-spanning-trees":4308,"\u002Falgorithms\u002Fgraphs\u002Fshortest-paths":4309,"\u002Falgorithms\u002Fgraphs\u002Fnetwork-flow":4310,"\u002Falgorithms\u002Fgraphs\u002Fbridges-and-articulation-points":4311,"\u002Falgorithms\u002Fgraphs\u002Flowest-common-ancestor":4312,"\u002Falgorithms\u002Fgraphs\u002Ftwo-sat":4313,"\u002Falgorithms\u002Fgraphs\u002Feulerian-tours":4314,"\u002Falgorithms\u002Fgreedy\u002Fthe-greedy-method":4315,"\u002Falgorithms\u002Fgreedy\u002Fscheduling-and-intervals":4316,"\u002Falgorithms\u002Fgreedy\u002Fhuffman-codes":4317,"\u002Falgorithms\u002Fgreedy\u002Fmatroids":4318,"\u002Falgorithms\u002Fdynamic-programming\u002Fprinciples":4319,"\u002Falgorithms\u002Fdynamic-programming\u002Fsequence-dp":4320,"\u002Falgorithms\u002Fdynamic-programming\u002Flongest-increasing-subsequence":4321,"\u002Falgorithms\u002Fdynamic-programming\u002Fknapsack":4322,"\u002Falgorithms\u002Fdynamic-programming\u002Fcoin-change-and-unbounded":4323,"\u002Falgorithms\u002Fdynamic-programming\u002Finterval-dp":4324,"\u002Falgorithms\u002Fdynamic-programming\u002Ftree-dp":4325,"\u002Falgorithms\u002Fdynamic-programming\u002Fbitmask-dp":4326,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-optimizations":4327,"\u002Falgorithms\u002Fdynamic-programming\u002Fdp-on-graphs":4328,"\u002Falgorithms\u002Fbacktracking\u002Fbacktracking-fundamentals":4329,"\u002Falgorithms\u002Fbacktracking\u002Fconstraint-search":4330,"\u002Falgorithms\u002Fbacktracking\u002Fbranch-and-bound":4331,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fnumber-theory-basics":4332,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fmodular-exponentiation-and-primality":4333,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fsieve-and-factorization":4334,"\u002Falgorithms\u002Fmathematical-algorithms\u002Fcombinatorics":4335,"\u002Falgorithms\u002Fcomputational-geometry\u002Fgeometric-primitives":4336,"\u002Falgorithms\u002Fcomputational-geometry\u002Fconvex-hull":4337,"\u002Falgorithms\u002Fcomputational-geometry\u002Fsweep-line":4338,"\u002Falgorithms\u002Fintractability\u002Fp-np-reductions":4339,"\u002Falgorithms\u002Fintractability\u002Fnp-completeness":4340,"\u002Falgorithms\u002Fintractability\u002Fcoping-with-hardness":4341,"\u002Falgorithms":4342,"\u002Ftheory-of-computation":4345,"\u002Fcomputer-architecture":4348,"\u002Fphysical-computing":4351,"\u002Fdatabases":4354,"\u002Fdeep-learning":4357},{"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":4343,"title":4344,"module":376,"summary":376},"\u002Falgorithms","Algorithms",{"path":4346,"title":4347,"module":376,"summary":376},"\u002Ftheory-of-computation","Theory of Computation",{"path":4349,"title":4350,"module":376,"summary":376},"\u002Fcomputer-architecture","Computer Architecture",{"path":4352,"title":4353,"module":376,"summary":376},"\u002Fphysical-computing","Physical Computing",{"path":4355,"title":4356,"module":376,"summary":376},"\u002Fdatabases","Databases",{"path":4358,"title":4359,"module":376,"summary":376},"\u002Fdeep-learning","Deep Learning",1781560524949]