adventofcode

git clone https://git.ce9e.org/adventofcode.git

commit
005c5d2e09e5d7f5c1c573e18a20da3fb8227bea
parent
0cd28a12366c21b728a38257c6a46186223680e2
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2023-12-20 12:16
2023-12-20

Diffstat

A 2023/20/graph.py 10 ++++++++++
A 2023/20/graph.svg 1021 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2023/20/input.txt 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2023/20/solution.rs 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2023/20/test1.txt 5 +++++
A 2023/20/test2.txt 5 +++++

6 files changed, 1270 insertions, 0 deletions


diff --git a/2023/20/graph.py b/2023/20/graph.py

@@ -0,0 +1,10 @@
   -1     1 print('digraph {')
   -1     2 with open('input.txt') as fh:
   -1     3     for line in fh:
   -1     4         line = line.rstrip()
   -1     5         a, b = line.split(' -> ', 1)
   -1     6         aa = a.lstrip('&').lstrip('%')
   -1     7         print(f'  {aa} [label="{a}"]')
   -1     8         for c in b.split(', '):
   -1     9             print(f'  {aa} -> {c}');
   -1    10 print('}')

diff --git a/2023/20/graph.svg b/2023/20/graph.svg

@@ -0,0 +1,1021 @@
   -1     1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
   -1     2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
   -1     3  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
   -1     4 <!-- Generated by graphviz version 2.43.0 (0)
   -1     5  -->
   -1     6 <!-- Title: %3 Pages: 1 -->
   -1     7 <svg width="2085pt" height="1124pt"
   -1     8  viewBox="0.00 0.00 2085.35 1124.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
   -1     9 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1120)">
   -1    10 <title>%3</title>
   -1    11 <polygon fill="white" stroke="transparent" points="-4,4 -4,-1120 2081.35,-1120 2081.35,4 -4,4"/>
   -1    12 <!-- jv -->
   -1    13 <g id="node1" class="node">
   -1    14 <title>jv</title>
   -1    15 <ellipse fill="none" stroke="black" cx="287" cy="-1098" rx="27.9" ry="18"/>
   -1    16 <text text-anchor="middle" x="287" y="-1094.3" font-family="Times,serif" font-size="14.00">%jv</text>
   -1    17 </g>
   -1    18 <!-- rn -->
   -1    19 <g id="node2" class="node">
   -1    20 <title>rn</title>
   -1    21 <ellipse fill="none" stroke="black" cx="209" cy="-1026" rx="29.8" ry="18"/>
   -1    22 <text text-anchor="middle" x="209" y="-1022.3" font-family="Times,serif" font-size="14.00">%rn</text>
   -1    23 </g>
   -1    24 <!-- jv&#45;&gt;rn -->
   -1    25 <g id="edge1" class="edge">
   -1    26 <title>jv&#45;&gt;rn</title>
   -1    27 <path fill="none" stroke="black" d="M271.22,-1082.83C260.19,-1072.94 245.27,-1059.55 232.8,-1048.36"/>
   -1    28 <polygon fill="black" stroke="black" points="234.81,-1045.46 225.03,-1041.38 230.13,-1050.67 234.81,-1045.46"/>
   -1    29 </g>
   -1    30 <!-- jn -->
   -1    31 <g id="node3" class="node">
   -1    32 <title>jn</title>
   -1    33 <ellipse fill="none" stroke="black" cx="190" cy="-810" rx="27.9" ry="18"/>
   -1    34 <text text-anchor="middle" x="190" y="-806.3" font-family="Times,serif" font-size="14.00">&amp;jn</text>
   -1    35 </g>
   -1    36 <!-- jv&#45;&gt;jn -->
   -1    37 <g id="edge2" class="edge">
   -1    38 <title>jv&#45;&gt;jn</title>
   -1    39 <path fill="none" stroke="black" d="M287.55,-1079.73C288.1,-1039.39 285.21,-936.88 246,-864 238.93,-850.85 227.38,-839.09 216.61,-830.02"/>
   -1    40 <polygon fill="black" stroke="black" points="218.6,-827.13 208.61,-823.62 214.23,-832.6 218.6,-827.13"/>
   -1    41 </g>
   -1    42 <!-- rn&#45;&gt;jn -->
   -1    43 <g id="edge29" class="edge">
   -1    44 <title>rn&#45;&gt;jn</title>
   -1    45 <path fill="none" stroke="black" d="M195,-1009.83C186.39,-999.76 175.75,-985.89 169,-972 154.54,-942.23 154.26,-932.82 150,-900 147.94,-884.13 144.92,-879.17 150,-864 153.76,-852.79 160.93,-842.05 168.17,-833.21"/>
   -1    46 <polygon fill="black" stroke="black" points="170.82,-835.5 174.75,-825.66 165.54,-830.9 170.82,-835.5"/>
   -1    47 </g>
   -1    48 <!-- bk -->
   -1    49 <g id="node31" class="node">
   -1    50 <title>bk</title>
   -1    51 <ellipse fill="none" stroke="black" cx="209" cy="-954" rx="30.59" ry="18"/>
   -1    52 <text text-anchor="middle" x="209" y="-950.3" font-family="Times,serif" font-size="14.00">%bk</text>
   -1    53 </g>
   -1    54 <!-- rn&#45;&gt;bk -->
   -1    55 <g id="edge28" class="edge">
   -1    56 <title>rn&#45;&gt;bk</title>
   -1    57 <path fill="none" stroke="black" d="M209,-1007.7C209,-999.98 209,-990.71 209,-982.11"/>
   -1    58 <polygon fill="black" stroke="black" points="212.5,-982.1 209,-972.1 205.5,-982.1 212.5,-982.1"/>
   -1    59 </g>
   -1    60 <!-- hm -->
   -1    61 <g id="node18" class="node">
   -1    62 <title>hm</title>
   -1    63 <ellipse fill="none" stroke="black" cx="160" cy="-378" rx="34.39" ry="18"/>
   -1    64 <text text-anchor="middle" x="160" y="-374.3" font-family="Times,serif" font-size="14.00">%hm</text>
   -1    65 </g>
   -1    66 <!-- jn&#45;&gt;hm -->
   -1    67 <g id="edge76" class="edge">
   -1    68 <title>jn&#45;&gt;hm</title>
   -1    69 <path fill="none" stroke="black" d="M193.45,-791.82C202.09,-748.15 224,-633.65 224,-595 224,-595 224,-595 224,-521 224,-476.54 197.6,-430.62 178.71,-403.45"/>
   -1    70 <polygon fill="black" stroke="black" points="181.32,-401.07 172.64,-394.98 175.63,-405.15 181.32,-401.07"/>
   -1    71 </g>
   -1    72 <!-- ql -->
   -1    73 <g id="node19" class="node">
   -1    74 <title>ql</title>
   -1    75 <ellipse fill="none" stroke="black" cx="160" cy="-306" rx="28.7" ry="18"/>
   -1    76 <text text-anchor="middle" x="160" y="-302.3" font-family="Times,serif" font-size="14.00">%ql</text>
   -1    77 </g>
   -1    78 <!-- jn&#45;&gt;ql -->
   -1    79 <g id="edge78" class="edge">
   -1    80 <title>jn&#45;&gt;ql</title>
   -1    81 <path fill="none" stroke="black" d="M163.37,-804.14C133.63,-797.58 85.44,-783.4 53,-756 17.83,-726.29 0,-713.04 0,-667 0,-667 0,-667 0,-449 0,-382.08 79.26,-339.02 126.21,-319.38"/>
   -1    82 <polygon fill="black" stroke="black" points="127.74,-322.54 135.7,-315.54 125.12,-316.05 127.74,-322.54"/>
   -1    83 </g>
   -1    84 <!-- hs -->
   -1    85 <g id="node24" class="node">
   -1    86 <title>hs</title>
   -1    87 <ellipse fill="none" stroke="black" cx="304" cy="-234" rx="30.59" ry="18"/>
   -1    88 <text text-anchor="middle" x="304" y="-230.3" font-family="Times,serif" font-size="14.00">%hs</text>
   -1    89 </g>
   -1    90 <!-- jn&#45;&gt;hs -->
   -1    91 <g id="edge74" class="edge">
   -1    92 <title>jn&#45;&gt;hs</title>
   -1    93 <path fill="none" stroke="black" d="M215,-801.61C236.85,-793.82 267.72,-779.4 285,-756 309.03,-723.46 304,-707.45 304,-667 304,-667 304,-667 304,-377 304,-337 304,-290.65 304,-262.08"/>
   -1    94 <polygon fill="black" stroke="black" points="307.5,-262.05 304,-252.05 300.5,-262.05 307.5,-262.05"/>
   -1    95 </g>
   -1    96 <!-- lp -->
   -1    97 <g id="node32" class="node">
   -1    98 <title>lp</title>
   -1    99 <ellipse fill="none" stroke="black" cx="114" cy="-450" rx="28.7" ry="18"/>
   -1   100 <text text-anchor="middle" x="114" y="-446.3" font-family="Times,serif" font-size="14.00">%lp</text>
   -1   101 </g>
   -1   102 <!-- jn&#45;&gt;lp -->
   -1   103 <g id="edge75" class="edge">
   -1   104 <title>jn&#45;&gt;lp</title>
   -1   105 <path fill="none" stroke="black" d="M166.58,-799.96C123.95,-781.78 38,-736.52 38,-667 38,-667 38,-667 38,-593 38,-546.12 70.6,-499.74 93.09,-473.31"/>
   -1   106 <polygon fill="black" stroke="black" points="95.74,-475.6 99.7,-465.77 90.48,-470.98 95.74,-475.6"/>
   -1   107 </g>
   -1   108 <!-- ss -->
   -1   109 <g id="node34" class="node">
   -1   110 <title>ss</title>
   -1   111 <ellipse fill="none" stroke="black" cx="114" cy="-522" rx="29.5" ry="18"/>
   -1   112 <text text-anchor="middle" x="114" y="-518.3" font-family="Times,serif" font-size="14.00">%ss</text>
   -1   113 </g>
   -1   114 <!-- jn&#45;&gt;ss -->
   -1   115 <g id="edge80" class="edge">
   -1   116 <title>jn&#45;&gt;ss</title>
   -1   117 <path fill="none" stroke="black" d="M173.92,-795.12C163.27,-785.17 149.71,-770.94 141,-756 107.17,-697.95 105.35,-678.38 95,-612 92.54,-596.19 92.26,-591.76 95,-576 96.56,-567 99.52,-557.51 102.64,-549.09"/>
   -1   118 <polygon fill="black" stroke="black" points="105.9,-550.37 106.3,-539.78 99.38,-547.8 105.9,-550.37"/>
   -1   119 </g>
   -1   120 <!-- hn -->
   -1   121 <g id="node35" class="node">
   -1   122 <title>hn</title>
   -1   123 <ellipse fill="none" stroke="black" cx="743" cy="-738" rx="30.59" ry="18"/>
   -1   124 <text text-anchor="middle" x="743" y="-734.3" font-family="Times,serif" font-size="14.00">&amp;hn</text>
   -1   125 </g>
   -1   126 <!-- jn&#45;&gt;hn -->
   -1   127 <g id="edge77" class="edge">
   -1   128 <title>jn&#45;&gt;hn</title>
   -1   129 <path fill="none" stroke="black" d="M217.42,-805.53C307.91,-794.08 597.23,-757.45 703.43,-744.01"/>
   -1   130 <polygon fill="black" stroke="black" points="703.93,-747.47 713.41,-742.75 703.05,-740.53 703.93,-747.47"/>
   -1   131 </g>
   -1   132 <!-- xt -->
   -1   133 <g id="node46" class="node">
   -1   134 <title>xt</title>
   -1   135 <ellipse fill="none" stroke="black" cx="247" cy="-738" rx="28.7" ry="18"/>
   -1   136 <text text-anchor="middle" x="247" y="-734.3" font-family="Times,serif" font-size="14.00">%xt</text>
   -1   137 </g>
   -1   138 <!-- jn&#45;&gt;xt -->
   -1   139 <g id="edge79" class="edge">
   -1   140 <title>jn&#45;&gt;xt</title>
   -1   141 <path fill="none" stroke="black" d="M197.67,-792.41C204.39,-782.87 214.09,-770.79 223.19,-760.53"/>
   -1   142 <polygon fill="black" stroke="black" points="225.81,-762.85 229.97,-753.11 220.64,-758.13 225.81,-762.85"/>
   -1   143 </g>
   -1   144 <!-- fb -->
   -1   145 <g id="node4" class="node">
   -1   146 <title>fb</title>
   -1   147 <ellipse fill="none" stroke="black" cx="627" cy="-810" rx="28.7" ry="18"/>
   -1   148 <text text-anchor="middle" x="627" y="-806.3" font-family="Times,serif" font-size="14.00">&amp;fb</text>
   -1   149 </g>
   -1   150 <!-- hb -->
   -1   151 <g id="node5" class="node">
   -1   152 <title>hb</title>
   -1   153 <ellipse fill="none" stroke="black" cx="515" cy="-450" rx="31.4" ry="18"/>
   -1   154 <text text-anchor="middle" x="515" y="-446.3" font-family="Times,serif" font-size="14.00">%hb</text>
   -1   155 </g>
   -1   156 <!-- fb&#45;&gt;hb -->
   -1   157 <g id="edge3" class="edge">
   -1   158 <title>fb&#45;&gt;hb</title>
   -1   159 <path fill="none" stroke="black" d="M605.04,-798.35C567.26,-778.31 494,-731.18 494,-667 494,-667 494,-667 494,-593 494,-552.56 502.44,-506.33 508.62,-477.9"/>
   -1   160 <polygon fill="black" stroke="black" points="512.08,-478.45 510.85,-467.93 505.25,-476.92 512.08,-478.45"/>
   -1   161 </g>
   -1   162 <!-- vk -->
   -1   163 <g id="node6" class="node">
   -1   164 <title>vk</title>
   -1   165 <ellipse fill="none" stroke="black" cx="704" cy="-882" rx="30.59" ry="18"/>
   -1   166 <text text-anchor="middle" x="704" y="-878.3" font-family="Times,serif" font-size="14.00">%vk</text>
   -1   167 </g>
   -1   168 <!-- fb&#45;&gt;vk -->
   -1   169 <g id="edge4" class="edge">
   -1   170 <title>fb&#45;&gt;vk</title>
   -1   171 <path fill="none" stroke="black" d="M646.14,-823.56C658.06,-833.1 673.14,-846.48 685.01,-857.93"/>
   -1   172 <polygon fill="black" stroke="black" points="682.71,-860.58 692.29,-865.12 687.63,-855.6 682.71,-860.58"/>
   -1   173 </g>
   -1   174 <!-- fz -->
   -1   175 <g id="node7" class="node">
   -1   176 <title>fz</title>
   -1   177 <ellipse fill="none" stroke="black" cx="937" cy="-738" rx="27.1" ry="18"/>
   -1   178 <text text-anchor="middle" x="937" y="-734.3" font-family="Times,serif" font-size="14.00">&amp;fz</text>
   -1   179 </g>
   -1   180 <!-- fb&#45;&gt;fz -->
   -1   181 <g id="edge5" class="edge">
   -1   182 <title>fb&#45;&gt;fz</title>
   -1   183 <path fill="none" stroke="black" d="M655.2,-805.91C705.53,-799.87 813.73,-784.54 901,-756 902.87,-755.39 904.77,-754.7 906.67,-753.96"/>
   -1   184 <polygon fill="black" stroke="black" points="908.21,-757.11 916.04,-749.97 905.47,-750.67 908.21,-757.11"/>
   -1   185 </g>
   -1   186 <!-- kl -->
   -1   187 <g id="node8" class="node">
   -1   188 <title>kl</title>
   -1   189 <ellipse fill="none" stroke="black" cx="626" cy="-666" rx="27.9" ry="18"/>
   -1   190 <text text-anchor="middle" x="626" y="-662.3" font-family="Times,serif" font-size="14.00">%kl</text>
   -1   191 </g>
   -1   192 <!-- fb&#45;&gt;kl -->
   -1   193 <g id="edge6" class="edge">
   -1   194 <title>fb&#45;&gt;kl</title>
   -1   195 <path fill="none" stroke="black" d="M626.88,-791.87C626.71,-767.67 626.4,-723.21 626.19,-694.39"/>
   -1   196 <polygon fill="black" stroke="black" points="629.69,-694.16 626.12,-684.19 622.69,-694.21 629.69,-694.16"/>
   -1   197 </g>
   -1   198 <!-- cg -->
   -1   199 <g id="node9" class="node">
   -1   200 <title>cg</title>
   -1   201 <ellipse fill="none" stroke="black" cx="861" cy="-738" rx="30.59" ry="18"/>
   -1   202 <text text-anchor="middle" x="861" y="-734.3" font-family="Times,serif" font-size="14.00">%cg</text>
   -1   203 </g>
   -1   204 <!-- fb&#45;&gt;cg -->
   -1   205 <g id="edge7" class="edge">
   -1   206 <title>fb&#45;&gt;cg</title>
   -1   207 <path fill="none" stroke="black" d="M653.2,-802.43C689.89,-793.05 758.53,-774.87 816,-756 819.54,-754.84 823.21,-753.56 826.87,-752.25"/>
   -1   208 <polygon fill="black" stroke="black" points="828.21,-755.49 836.38,-748.75 825.79,-748.92 828.21,-755.49"/>
   -1   209 </g>
   -1   210 <!-- pd -->
   -1   211 <g id="node54" class="node">
   -1   212 <title>pd</title>
   -1   213 <ellipse fill="none" stroke="black" cx="496" cy="-378" rx="31.4" ry="18"/>
   -1   214 <text text-anchor="middle" x="496" y="-374.3" font-family="Times,serif" font-size="14.00">%pd</text>
   -1   215 </g>
   -1   216 <!-- hb&#45;&gt;pd -->
   -1   217 <g id="edge66" class="edge">
   -1   218 <title>hb&#45;&gt;pd</title>
   -1   219 <path fill="none" stroke="black" d="M510.4,-432.05C508.29,-424.26 505.72,-414.82 503.35,-406.08"/>
   -1   220 <polygon fill="black" stroke="black" points="506.69,-405.01 500.69,-396.28 499.93,-406.84 506.69,-405.01"/>
   -1   221 </g>
   -1   222 <!-- vk&#45;&gt;fb -->
   -1   223 <g id="edge68" class="edge">
   -1   224 <title>vk&#45;&gt;fb</title>
   -1   225 <path fill="none" stroke="black" d="M684.11,-867.83C672.15,-858.22 657.23,-844.94 645.54,-833.64"/>
   -1   226 <polygon fill="black" stroke="black" points="647.95,-831.1 638.38,-826.55 643.03,-836.07 647.95,-831.1"/>
   -1   227 </g>
   -1   228 <!-- vk&#45;&gt;cg -->
   -1   229 <g id="edge67" class="edge">
   -1   230 <title>vk&#45;&gt;cg</title>
   -1   231 <path fill="none" stroke="black" d="M719.92,-866.6C747.66,-841.51 804.99,-789.66 837.38,-760.37"/>
   -1   232 <polygon fill="black" stroke="black" points="839.97,-762.74 845.04,-753.44 835.28,-757.55 839.97,-762.74"/>
   -1   233 </g>
   -1   234 <!-- xn -->
   -1   235 <g id="node36" class="node">
   -1   236 <title>xn</title>
   -1   237 <ellipse fill="none" stroke="black" cx="972" cy="-666" rx="30.59" ry="18"/>
   -1   238 <text text-anchor="middle" x="972" y="-662.3" font-family="Times,serif" font-size="14.00">&amp;xn</text>
   -1   239 </g>
   -1   240 <!-- fz&#45;&gt;xn -->
   -1   241 <g id="edge109" class="edge">
   -1   242 <title>fz&#45;&gt;xn</title>
   -1   243 <path fill="none" stroke="black" d="M945.12,-720.76C949.3,-712.4 954.49,-702.02 959.2,-692.61"/>
   -1   244 <polygon fill="black" stroke="black" points="962.34,-694.14 963.68,-683.63 956.08,-691.01 962.34,-694.14"/>
   -1   245 </g>
   -1   246 <!-- rs -->
   -1   247 <g id="node55" class="node">
   -1   248 <title>rs</title>
   -1   249 <ellipse fill="none" stroke="black" cx="589" cy="-594" rx="28.7" ry="18"/>
   -1   250 <text text-anchor="middle" x="589" y="-590.3" font-family="Times,serif" font-size="14.00">%rs</text>
   -1   251 </g>
   -1   252 <!-- kl&#45;&gt;rs -->
   -1   253 <g id="edge69" class="edge">
   -1   254 <title>kl&#45;&gt;rs</title>
   -1   255 <path fill="none" stroke="black" d="M617.42,-648.76C613,-640.4 607.51,-630.02 602.53,-620.61"/>
   -1   256 <polygon fill="black" stroke="black" points="605.56,-618.84 597.79,-611.63 599.37,-622.11 605.56,-618.84"/>
   -1   257 </g>
   -1   258 <!-- cg&#45;&gt;kl -->
   -1   259 <g id="edge19" class="edge">
   -1   260 <title>cg&#45;&gt;kl</title>
   -1   261 <path fill="none" stroke="black" d="M834.04,-728.97C791.25,-716.22 707.8,-691.37 660.63,-677.32"/>
   -1   262 <polygon fill="black" stroke="black" points="661.45,-673.91 650.87,-674.41 659.45,-680.62 661.45,-673.91"/>
   -1   263 </g>
   -1   264 <!-- rr -->
   -1   265 <g id="node10" class="node">
   -1   266 <title>rr</title>
   -1   267 <ellipse fill="none" stroke="black" cx="1144" cy="-306" rx="28.7" ry="18"/>
   -1   268 <text text-anchor="middle" x="1144" y="-302.3" font-family="Times,serif" font-size="14.00">%rr</text>
   -1   269 </g>
   -1   270 <!-- vm -->
   -1   271 <g id="node11" class="node">
   -1   272 <title>vm</title>
   -1   273 <ellipse fill="none" stroke="black" cx="1144" cy="-234" rx="33.6" ry="18"/>
   -1   274 <text text-anchor="middle" x="1144" y="-230.3" font-family="Times,serif" font-size="14.00">%vm</text>
   -1   275 </g>
   -1   276 <!-- rr&#45;&gt;vm -->
   -1   277 <g id="edge8" class="edge">
   -1   278 <title>rr&#45;&gt;vm</title>
   -1   279 <path fill="none" stroke="black" d="M1144,-287.7C1144,-279.98 1144,-270.71 1144,-262.11"/>
   -1   280 <polygon fill="black" stroke="black" points="1147.5,-262.1 1144,-252.1 1140.5,-262.1 1147.5,-262.1"/>
   -1   281 </g>
   -1   282 <!-- gp -->
   -1   283 <g id="node12" class="node">
   -1   284 <title>gp</title>
   -1   285 <ellipse fill="none" stroke="black" cx="1237" cy="-810" rx="30.59" ry="18"/>
   -1   286 <text text-anchor="middle" x="1237" y="-806.3" font-family="Times,serif" font-size="14.00">&amp;gp</text>
   -1   287 </g>
   -1   288 <!-- rr&#45;&gt;gp -->
   -1   289 <g id="edge9" class="edge">
   -1   290 <title>rr&#45;&gt;gp</title>
   -1   291 <path fill="none" stroke="black" d="M1136.1,-323.62C1124.44,-349.71 1104,-402.13 1104,-449 1104,-667 1104,-667 1104,-667 1104,-725.95 1165.8,-770.51 1205.15,-792.91"/>
   -1   292 <polygon fill="black" stroke="black" points="1203.69,-796.1 1214.14,-797.87 1207.07,-789.97 1203.69,-796.1"/>
   -1   293 </g>
   -1   294 <!-- bf -->
   -1   295 <g id="node51" class="node">
   -1   296 <title>bf</title>
   -1   297 <ellipse fill="none" stroke="black" cx="1355" cy="-162" rx="28.7" ry="18"/>
   -1   298 <text text-anchor="middle" x="1355" y="-158.3" font-family="Times,serif" font-size="14.00">%bf</text>
   -1   299 </g>
   -1   300 <!-- vm&#45;&gt;bf -->
   -1   301 <g id="edge62" class="edge">
   -1   302 <title>vm&#45;&gt;bf</title>
   -1   303 <path fill="none" stroke="black" d="M1172.02,-223.7C1210.34,-210.99 1279.05,-188.2 1320.49,-174.45"/>
   -1   304 <polygon fill="black" stroke="black" points="1321.76,-177.71 1330.15,-171.24 1319.56,-171.07 1321.76,-177.71"/>
   -1   305 </g>
   -1   306 <!-- gp&#45;&gt;vm -->
   -1   307 <g id="edge10" class="edge">
   -1   308 <title>gp&#45;&gt;vm</title>
   -1   309 <path fill="none" stroke="black" d="M1209.52,-801.88C1183.74,-794.08 1145.32,-779.46 1119,-756 1084.63,-725.37 1066,-713.04 1066,-667 1066,-667 1066,-667 1066,-377 1066,-330.35 1098.74,-284.55 1121.79,-258.07"/>
   -1   310 <polygon fill="black" stroke="black" points="1124.52,-260.28 1128.59,-250.5 1119.31,-255.6 1124.52,-260.28"/>
   -1   311 </g>
   -1   312 <!-- cb -->
   -1   313 <g id="node13" class="node">
   -1   314 <title>cb</title>
   -1   315 <ellipse fill="none" stroke="black" cx="1509" cy="-738" rx="30.59" ry="18"/>
   -1   316 <text text-anchor="middle" x="1509" y="-734.3" font-family="Times,serif" font-size="14.00">%cb</text>
   -1   317 </g>
   -1   318 <!-- gp&#45;&gt;cb -->
   -1   319 <g id="edge11" class="edge">
   -1   320 <title>gp&#45;&gt;cb</title>
   -1   321 <path fill="none" stroke="black" d="M1265.63,-803.58C1309,-795.08 1393.73,-777.38 1464,-756 1467.57,-754.92 1471.26,-753.69 1474.92,-752.41"/>
   -1   322 <polygon fill="black" stroke="black" points="1476.24,-755.65 1484.44,-748.95 1473.85,-749.08 1476.24,-755.65"/>
   -1   323 </g>
   -1   324 <!-- bd -->
   -1   325 <g id="node14" class="node">
   -1   326 <title>bd</title>
   -1   327 <ellipse fill="none" stroke="black" cx="1315" cy="-666" rx="31.4" ry="18"/>
   -1   328 <text text-anchor="middle" x="1315" y="-662.3" font-family="Times,serif" font-size="14.00">%bd</text>
   -1   329 </g>
   -1   330 <!-- gp&#45;&gt;bd -->
   -1   331 <g id="edge12" class="edge">
   -1   332 <title>gp&#45;&gt;bd</title>
   -1   333 <path fill="none" stroke="black" d="M1247.49,-792.99C1254.17,-782.59 1262.88,-768.66 1270,-756 1281.75,-735.12 1293.94,-710.81 1302.67,-692.88"/>
   -1   334 <polygon fill="black" stroke="black" points="1305.94,-694.16 1307.14,-683.63 1299.63,-691.11 1305.94,-694.16"/>
   -1   335 </g>
   -1   336 <!-- qm -->
   -1   337 <g id="node15" class="node">
   -1   338 <title>qm</title>
   -1   339 <ellipse fill="none" stroke="black" cx="1166" cy="-378" rx="34.39" ry="18"/>
   -1   340 <text text-anchor="middle" x="1166" y="-374.3" font-family="Times,serif" font-size="14.00">%qm</text>
   -1   341 </g>
   -1   342 <!-- gp&#45;&gt;qm -->
   -1   343 <g id="edge13" class="edge">
   -1   344 <title>gp&#45;&gt;qm</title>
   -1   345 <path fill="none" stroke="black" d="M1219.13,-794.95C1191.61,-771.59 1142,-721.87 1142,-667 1142,-667 1142,-667 1142,-521 1142,-480.43 1151.64,-434.24 1158.7,-405.85"/>
   -1   346 <polygon fill="black" stroke="black" points="1162.16,-406.45 1161.26,-395.89 1155.38,-404.71 1162.16,-406.45"/>
   -1   347 </g>
   -1   348 <!-- xf -->
   -1   349 <g id="node16" class="node">
   -1   350 <title>xf</title>
   -1   351 <ellipse fill="none" stroke="black" cx="1010" cy="-738" rx="27.9" ry="18"/>
   -1   352 <text text-anchor="middle" x="1010" y="-734.3" font-family="Times,serif" font-size="14.00">&amp;xf</text>
   -1   353 </g>
   -1   354 <!-- gp&#45;&gt;xf -->
   -1   355 <g id="edge14" class="edge">
   -1   356 <title>gp&#45;&gt;xf</title>
   -1   357 <path fill="none" stroke="black" d="M1209.45,-802.08C1173.05,-792.72 1107.12,-774.99 1052,-756 1048.88,-754.92 1045.65,-753.74 1042.43,-752.52"/>
   -1   358 <polygon fill="black" stroke="black" points="1043.53,-749.19 1032.94,-748.8 1040.97,-755.71 1043.53,-749.19"/>
   -1   359 </g>
   -1   360 <!-- pk -->
   -1   361 <g id="node17" class="node">
   -1   362 <title>pk</title>
   -1   363 <ellipse fill="none" stroke="black" cx="1237" cy="-882" rx="30.59" ry="18"/>
   -1   364 <text text-anchor="middle" x="1237" y="-878.3" font-family="Times,serif" font-size="14.00">%pk</text>
   -1   365 </g>
   -1   366 <!-- gp&#45;&gt;pk -->
   -1   367 <g id="edge15" class="edge">
   -1   368 <title>gp&#45;&gt;pk</title>
   -1   369 <path fill="none" stroke="black" d="M1242.86,-827.79C1243.7,-835.59 1243.94,-845.07 1243.6,-853.85"/>
   -1   370 <polygon fill="black" stroke="black" points="1240.09,-853.83 1242.88,-864.05 1247.07,-854.33 1240.09,-853.83"/>
   -1   371 </g>
   -1   372 <!-- cb&#45;&gt;bd -->
   -1   373 <g id="edge50" class="edge">
   -1   374 <title>cb&#45;&gt;bd</title>
   -1   375 <path fill="none" stroke="black" d="M1483.64,-727.85C1449.6,-715.57 1388.98,-693.69 1350.44,-679.79"/>
   -1   376 <polygon fill="black" stroke="black" points="1351.27,-676.37 1340.68,-676.26 1348.9,-682.95 1351.27,-676.37"/>
   -1   377 </g>
   -1   378 <!-- dt -->
   -1   379 <g id="node25" class="node">
   -1   380 <title>dt</title>
   -1   381 <ellipse fill="none" stroke="black" cx="1275" cy="-594" rx="29.5" ry="18"/>
   -1   382 <text text-anchor="middle" x="1275" y="-590.3" font-family="Times,serif" font-size="14.00">%dt</text>
   -1   383 </g>
   -1   384 <!-- bd&#45;&gt;dt -->
   -1   385 <g id="edge23" class="edge">
   -1   386 <title>bd&#45;&gt;dt</title>
   -1   387 <path fill="none" stroke="black" d="M1305.72,-648.76C1300.83,-640.19 1294.71,-629.49 1289.23,-619.9"/>
   -1   388 <polygon fill="black" stroke="black" points="1292.23,-618.09 1284.23,-611.15 1286.15,-621.57 1292.23,-618.09"/>
   -1   389 </g>
   -1   390 <!-- qm&#45;&gt;rr -->
   -1   391 <g id="edge88" class="edge">
   -1   392 <title>qm&#45;&gt;rr</title>
   -1   393 <path fill="none" stroke="black" d="M1160.67,-360.05C1158.16,-352.06 1155.1,-342.33 1152.3,-333.4"/>
   -1   394 <polygon fill="black" stroke="black" points="1155.61,-332.28 1149.28,-323.79 1148.94,-334.38 1155.61,-332.28"/>
   -1   395 </g>
   -1   396 <!-- xf&#45;&gt;xn -->
   -1   397 <g id="edge104" class="edge">
   -1   398 <title>xf&#45;&gt;xn</title>
   -1   399 <path fill="none" stroke="black" d="M1001.19,-720.76C996.65,-712.4 991.01,-702.02 985.9,-692.61"/>
   -1   400 <polygon fill="black" stroke="black" points="988.88,-690.75 981.03,-683.63 982.72,-694.09 988.88,-690.75"/>
   -1   401 </g>
   -1   402 <!-- pk&#45;&gt;gp -->
   -1   403 <g id="edge70" class="edge">
   -1   404 <title>pk&#45;&gt;gp</title>
   -1   405 <path fill="none" stroke="black" d="M1231.12,-864.05C1230.29,-856.23 1230.05,-846.75 1230.41,-837.98"/>
   -1   406 <polygon fill="black" stroke="black" points="1233.92,-838.01 1231.14,-827.79 1226.93,-837.51 1233.92,-838.01"/>
   -1   407 </g>
   -1   408 <!-- pk&#45;&gt;cb -->
   -1   409 <g id="edge71" class="edge">
   -1   410 <title>pk&#45;&gt;cb</title>
   -1   411 <path fill="none" stroke="black" d="M1259.26,-869.38C1307.59,-844.15 1422.27,-784.28 1477.8,-755.29"/>
   -1   412 <polygon fill="black" stroke="black" points="1479.57,-758.31 1486.82,-750.58 1476.33,-752.11 1479.57,-758.31"/>
   -1   413 </g>
   -1   414 <!-- hm&#45;&gt;ql -->
   -1   415 <g id="edge16" class="edge">
   -1   416 <title>hm&#45;&gt;ql</title>
   -1   417 <path fill="none" stroke="black" d="M160,-359.7C160,-351.98 160,-342.71 160,-334.11"/>
   -1   418 <polygon fill="black" stroke="black" points="163.5,-334.1 160,-324.1 156.5,-334.1 163.5,-334.1"/>
   -1   419 </g>
   -1   420 <!-- ql&#45;&gt;hs -->
   -1   421 <g id="edge96" class="edge">
   -1   422 <title>ql&#45;&gt;hs</title>
   -1   423 <path fill="none" stroke="black" d="M181.87,-294.37C205.8,-282.74 244.4,-263.97 271.79,-250.66"/>
   -1   424 <polygon fill="black" stroke="black" points="273.51,-253.72 280.97,-246.2 270.44,-247.42 273.51,-253.72"/>
   -1   425 </g>
   -1   426 <!-- cf -->
   -1   427 <g id="node20" class="node">
   -1   428 <title>cf</title>
   -1   429 <ellipse fill="none" stroke="black" cx="496" cy="-306" rx="27.9" ry="18"/>
   -1   430 <text text-anchor="middle" x="496" y="-302.3" font-family="Times,serif" font-size="14.00">%cf</text>
   -1   431 </g>
   -1   432 <!-- cf&#45;&gt;fb -->
   -1   433 <g id="edge18" class="edge">
   -1   434 <title>cf&#45;&gt;fb</title>
   -1   435 <path fill="none" stroke="black" d="M521.47,-313.51C572.41,-328.23 682,-369.17 682,-449 682,-595 682,-595 682,-595 682,-664.69 654.3,-743.25 638.21,-782.99"/>
   -1   436 <polygon fill="black" stroke="black" points="634.89,-781.87 634.3,-792.45 641.36,-784.55 634.89,-781.87"/>
   -1   437 </g>
   -1   438 <!-- dx -->
   -1   439 <g id="node21" class="node">
   -1   440 <title>dx</title>
   -1   441 <ellipse fill="none" stroke="black" cx="458" cy="-234" rx="30.59" ry="18"/>
   -1   442 <text text-anchor="middle" x="458" y="-230.3" font-family="Times,serif" font-size="14.00">%dx</text>
   -1   443 </g>
   -1   444 <!-- cf&#45;&gt;dx -->
   -1   445 <g id="edge17" class="edge">
   -1   446 <title>cf&#45;&gt;dx</title>
   -1   447 <path fill="none" stroke="black" d="M487.19,-288.76C482.65,-280.4 477.01,-270.02 471.9,-260.61"/>
   -1   448 <polygon fill="black" stroke="black" points="474.88,-258.75 467.03,-251.63 468.72,-262.09 474.88,-258.75"/>
   -1   449 </g>
   -1   450 <!-- dx&#45;&gt;fb -->
   -1   451 <g id="edge31" class="edge">
   -1   452 <title>dx&#45;&gt;fb</title>
   -1   453 <path fill="none" stroke="black" d="M450.1,-251.62C438.44,-277.71 418,-330.13 418,-377 418,-667 418,-667 418,-667 418,-712.15 432.28,-727.13 467,-756 501.97,-785.08 553.45,-798.38 588.51,-804.35"/>
   -1   454 <polygon fill="black" stroke="black" points="588.4,-807.88 598.82,-805.98 589.49,-800.96 588.4,-807.88"/>
   -1   455 </g>
   -1   456 <!-- jm -->
   -1   457 <g id="node33" class="node">
   -1   458 <title>jm</title>
   -1   459 <ellipse fill="none" stroke="black" cx="458" cy="-162" rx="31.4" ry="18"/>
   -1   460 <text text-anchor="middle" x="458" y="-158.3" font-family="Times,serif" font-size="14.00">%jm</text>
   -1   461 </g>
   -1   462 <!-- dx&#45;&gt;jm -->
   -1   463 <g id="edge32" class="edge">
   -1   464 <title>dx&#45;&gt;jm</title>
   -1   465 <path fill="none" stroke="black" d="M458,-215.7C458,-207.98 458,-198.71 458,-190.11"/>
   -1   466 <polygon fill="black" stroke="black" points="461.5,-190.1 458,-180.1 454.5,-190.1 461.5,-190.1"/>
   -1   467 </g>
   -1   468 <!-- hv -->
   -1   469 <g id="node22" class="node">
   -1   470 <title>hv</title>
   -1   471 <ellipse fill="none" stroke="black" cx="720" cy="-90" rx="30.59" ry="18"/>
   -1   472 <text text-anchor="middle" x="720" y="-86.3" font-family="Times,serif" font-size="14.00">%hv</text>
   -1   473 </g>
   -1   474 <!-- hv&#45;&gt;fb -->
   -1   475 <g id="edge21" class="edge">
   -1   476 <title>hv&#45;&gt;fb</title>
   -1   477 <path fill="none" stroke="black" d="M720,-108.05C720,-134.71 720,-187.89 720,-233 720,-595 720,-595 720,-595 720,-670.2 703.08,-689.49 668,-756 662.43,-766.56 654.74,-777.16 647.52,-786.09"/>
   -1   478 <polygon fill="black" stroke="black" points="644.84,-783.84 641.1,-793.76 650.21,-788.33 644.84,-783.84"/>
   -1   479 </g>
   -1   480 <!-- kg -->
   -1   481 <g id="node23" class="node">
   -1   482 <title>kg</title>
   -1   483 <ellipse fill="none" stroke="black" cx="761" cy="-18" rx="30.59" ry="18"/>
   -1   484 <text text-anchor="middle" x="761" y="-14.3" font-family="Times,serif" font-size="14.00">%kg</text>
   -1   485 </g>
   -1   486 <!-- hv&#45;&gt;kg -->
   -1   487 <g id="edge20" class="edge">
   -1   488 <title>hv&#45;&gt;kg</title>
   -1   489 <path fill="none" stroke="black" d="M729.51,-72.76C734.53,-64.19 740.8,-53.49 746.42,-43.9"/>
   -1   490 <polygon fill="black" stroke="black" points="749.51,-45.55 751.54,-35.15 743.47,-42.01 749.51,-45.55"/>
   -1   491 </g>
   -1   492 <!-- kg&#45;&gt;fb -->
   -1   493 <g id="edge53" class="edge">
   -1   494 <title>kg&#45;&gt;fb</title>
   -1   495 <path fill="none" stroke="black" d="M769.1,-35.6C781.05,-61.66 802,-114.04 802,-161 802,-667 802,-667 802,-667 802,-707.45 809.88,-725.77 783,-756 753.16,-789.56 701.25,-801.89 665.56,-806.41"/>
   -1   496 <polygon fill="black" stroke="black" points="665.05,-802.94 655.5,-807.53 665.83,-809.9 665.05,-802.94"/>
   -1   497 </g>
   -1   498 <!-- hs&#45;&gt;jv -->
   -1   499 <g id="edge22" class="edge">
   -1   500 <title>hs&#45;&gt;jv</title>
   -1   501 <path fill="none" stroke="black" d="M311.51,-251.66C322.58,-277.8 342,-330.3 342,-377 342,-739 342,-739 342,-739 342,-863.91 308.89,-1010.51 294.05,-1069.94"/>
   -1   502 <polygon fill="black" stroke="black" points="290.56,-1069.45 291.5,-1080 297.35,-1071.17 290.56,-1069.45"/>
   -1   503 </g>
   -1   504 <!-- dt&#45;&gt;gp -->
   -1   505 <g id="edge102" class="edge">
   -1   506 <title>dt&#45;&gt;gp</title>
   -1   507 <path fill="none" stroke="black" d="M1271.99,-611.94C1265.42,-648.92 1249.75,-737.2 1241.8,-781.97"/>
   -1   508 <polygon fill="black" stroke="black" points="1238.35,-781.39 1240.05,-791.85 1245.24,-782.62 1238.35,-781.39"/>
   -1   509 </g>
   -1   510 <!-- xv -->
   -1   511 <g id="node26" class="node">
   -1   512 <title>xv</title>
   -1   513 <ellipse fill="none" stroke="black" cx="1239" cy="-522" rx="30.59" ry="18"/>
   -1   514 <text text-anchor="middle" x="1239" y="-518.3" font-family="Times,serif" font-size="14.00">%xv</text>
   -1   515 </g>
   -1   516 <!-- dt&#45;&gt;xv -->
   -1   517 <g id="edge101" class="edge">
   -1   518 <title>dt&#45;&gt;xv</title>
   -1   519 <path fill="none" stroke="black" d="M1266.47,-576.41C1262.16,-568.04 1256.85,-557.71 1252.05,-548.37"/>
   -1   520 <polygon fill="black" stroke="black" points="1255.16,-546.76 1247.47,-539.47 1248.93,-549.96 1255.16,-546.76"/>
   -1   521 </g>
   -1   522 <!-- xv&#45;&gt;gp -->
   -1   523 <g id="edge25" class="edge">
   -1   524 <title>xv&#45;&gt;gp</title>
   -1   525 <path fill="none" stroke="black" d="M1238.19,-540.18C1237.74,-550.55 1237.23,-564.03 1237,-576 1235.6,-650.38 1236.21,-738.15 1236.67,-781.67"/>
   -1   526 <polygon fill="black" stroke="black" points="1233.17,-781.79 1236.78,-791.75 1240.17,-781.71 1233.17,-781.79"/>
   -1   527 </g>
   -1   528 <!-- mv -->
   -1   529 <g id="node27" class="node">
   -1   530 <title>mv</title>
   -1   531 <ellipse fill="none" stroke="black" cx="1204" cy="-450" rx="33.6" ry="18"/>
   -1   532 <text text-anchor="middle" x="1204" y="-446.3" font-family="Times,serif" font-size="14.00">%mv</text>
   -1   533 </g>
   -1   534 <!-- xv&#45;&gt;mv -->
   -1   535 <g id="edge24" class="edge">
   -1   536 <title>xv&#45;&gt;mv</title>
   -1   537 <path fill="none" stroke="black" d="M1230.71,-504.41C1226.56,-496.13 1221.46,-485.92 1216.83,-476.66"/>
   -1   538 <polygon fill="black" stroke="black" points="1219.84,-474.85 1212.23,-467.47 1213.58,-477.98 1219.84,-474.85"/>
   -1   539 </g>
   -1   540 <!-- mv&#45;&gt;gp -->
   -1   541 <g id="edge39" class="edge">
   -1   542 <title>mv&#45;&gt;gp</title>
   -1   543 <path fill="none" stroke="black" d="M1199.26,-467.89C1192.26,-494.34 1180,-547.25 1180,-593 1180,-667 1180,-667 1180,-667 1180,-710.68 1203.51,-756.82 1220.33,-784.25"/>
   -1   544 <polygon fill="black" stroke="black" points="1217.44,-786.22 1225.74,-792.8 1223.36,-782.48 1217.44,-786.22"/>
   -1   545 </g>
   -1   546 <!-- mv&#45;&gt;qm -->
   -1   547 <g id="edge40" class="edge">
   -1   548 <title>mv&#45;&gt;qm</title>
   -1   549 <path fill="none" stroke="black" d="M1194.99,-432.41C1190.45,-424.04 1184.84,-413.71 1179.77,-404.37"/>
   -1   550 <polygon fill="black" stroke="black" points="1182.79,-402.59 1174.94,-395.47 1176.64,-405.93 1182.79,-402.59"/>
   -1   551 </g>
   -1   552 <!-- js -->
   -1   553 <g id="node28" class="node">
   -1   554 <title>js</title>
   -1   555 <ellipse fill="none" stroke="black" cx="1860" cy="-450" rx="27.1" ry="18"/>
   -1   556 <text text-anchor="middle" x="1860" y="-446.3" font-family="Times,serif" font-size="14.00">%js</text>
   -1   557 </g>
   -1   558 <!-- zb -->
   -1   559 <g id="node29" class="node">
   -1   560 <title>zb</title>
   -1   561 <ellipse fill="none" stroke="black" cx="1826" cy="-378" rx="30.59" ry="18"/>
   -1   562 <text text-anchor="middle" x="1826" y="-374.3" font-family="Times,serif" font-size="14.00">%zb</text>
   -1   563 </g>
   -1   564 <!-- js&#45;&gt;zb -->
   -1   565 <g id="edge26" class="edge">
   -1   566 <title>js&#45;&gt;zb</title>
   -1   567 <path fill="none" stroke="black" d="M1852.11,-432.76C1848.1,-424.49 1843.11,-414.23 1838.58,-404.9"/>
   -1   568 <polygon fill="black" stroke="black" points="1841.6,-403.1 1834.08,-395.63 1835.3,-406.16 1841.6,-403.1"/>
   -1   569 </g>
   -1   570 <!-- jl -->
   -1   571 <g id="node30" class="node">
   -1   572 <title>jl</title>
   -1   573 <ellipse fill="none" stroke="black" cx="1824" cy="-810" rx="27" ry="18"/>
   -1   574 <text text-anchor="middle" x="1824" y="-806.3" font-family="Times,serif" font-size="14.00">&amp;jl</text>
   -1   575 </g>
   -1   576 <!-- js&#45;&gt;jl -->
   -1   577 <g id="edge27" class="edge">
   -1   578 <title>js&#45;&gt;jl</title>
   -1   579 <path fill="none" stroke="black" d="M1856.64,-467.97C1851.69,-494.52 1843,-547.56 1843,-593 1843,-667 1843,-667 1843,-667 1843,-707.36 1835.37,-753.61 1829.78,-782.06"/>
   -1   580 <polygon fill="black" stroke="black" points="1826.31,-781.55 1827.75,-792.05 1833.17,-782.94 1826.31,-781.55"/>
   -1   581 </g>
   -1   582 <!-- lr -->
   -1   583 <g id="node42" class="node">
   -1   584 <title>lr</title>
   -1   585 <ellipse fill="none" stroke="black" cx="1784" cy="-306" rx="27" ry="18"/>
   -1   586 <text text-anchor="middle" x="1784" y="-302.3" font-family="Times,serif" font-size="14.00">%lr</text>
   -1   587 </g>
   -1   588 <!-- zb&#45;&gt;lr -->
   -1   589 <g id="edge98" class="edge">
   -1   590 <title>zb&#45;&gt;lr</title>
   -1   591 <path fill="none" stroke="black" d="M1816.26,-360.76C1811.12,-352.19 1804.7,-341.49 1798.94,-331.9"/>
   -1   592 <polygon fill="black" stroke="black" points="1801.83,-329.92 1793.69,-323.15 1795.83,-333.52 1801.83,-329.92"/>
   -1   593 </g>
   -1   594 <!-- jl&#45;&gt;zb -->
   -1   595 <g id="edge46" class="edge">
   -1   596 <title>jl&#45;&gt;zb</title>
   -1   597 <path fill="none" stroke="black" d="M1820.25,-792.05C1814.71,-765.52 1805,-712.52 1805,-667 1805,-667 1805,-667 1805,-521 1805,-480.56 1813.44,-434.33 1819.62,-405.9"/>
   -1   598 <polygon fill="black" stroke="black" points="1823.08,-406.45 1821.85,-395.93 1816.25,-404.92 1823.08,-406.45"/>
   -1   599 </g>
   -1   600 <!-- ms -->
   -1   601 <g id="node38" class="node">
   -1   602 <title>ms</title>
   -1   603 <ellipse fill="none" stroke="black" cx="1942" cy="-594" rx="33.29" ry="18"/>
   -1   604 <text text-anchor="middle" x="1942" y="-590.3" font-family="Times,serif" font-size="14.00">%ms</text>
   -1   605 </g>
   -1   606 <!-- jl&#45;&gt;ms -->
   -1   607 <g id="edge43" class="edge">
   -1   608 <title>jl&#45;&gt;ms</title>
   -1   609 <path fill="none" stroke="black" d="M1844.97,-798.27C1860.9,-789.09 1882.19,-774.45 1895,-756 1923.62,-714.77 1935,-656.09 1939.39,-622.13"/>
   -1   610 <polygon fill="black" stroke="black" points="1942.89,-622.37 1940.58,-612.03 1935.94,-621.55 1942.89,-622.37"/>
   -1   611 </g>
   -1   612 <!-- km -->
   -1   613 <g id="node39" class="node">
   -1   614 <title>km</title>
   -1   615 <ellipse fill="none" stroke="black" cx="1824" cy="-882" rx="33.6" ry="18"/>
   -1   616 <text text-anchor="middle" x="1824" y="-878.3" font-family="Times,serif" font-size="14.00">%km</text>
   -1   617 </g>
   -1   618 <!-- jl&#45;&gt;km -->
   -1   619 <g id="edge41" class="edge">
   -1   620 <title>jl&#45;&gt;km</title>
   -1   621 <path fill="none" stroke="black" d="M1829.86,-827.79C1830.7,-835.59 1830.94,-845.07 1830.6,-853.85"/>
   -1   622 <polygon fill="black" stroke="black" points="1827.09,-853.83 1829.88,-864.05 1834.07,-854.33 1827.09,-853.83"/>
   -1   623 </g>
   -1   624 <!-- lm -->
   -1   625 <g id="node40" class="node">
   -1   626 <title>lm</title>
   -1   627 <ellipse fill="none" stroke="black" cx="2016" cy="-738" rx="31.4" ry="18"/>
   -1   628 <text text-anchor="middle" x="2016" y="-734.3" font-family="Times,serif" font-size="14.00">%lm</text>
   -1   629 </g>
   -1   630 <!-- jl&#45;&gt;lm -->
   -1   631 <g id="edge42" class="edge">
   -1   632 <title>jl&#45;&gt;lm</title>
   -1   633 <path fill="none" stroke="black" d="M1847.21,-800.75C1876.21,-790.42 1927.35,-772.11 1971,-756 1974.23,-754.81 1977.59,-753.56 1980.95,-752.3"/>
   -1   634 <polygon fill="black" stroke="black" points="1982.2,-755.57 1990.32,-748.78 1979.73,-749.02 1982.2,-755.57"/>
   -1   635 </g>
   -1   636 <!-- mp -->
   -1   637 <g id="node41" class="node">
   -1   638 <title>mp</title>
   -1   639 <ellipse fill="none" stroke="black" cx="1591" cy="-738" rx="33.6" ry="18"/>
   -1   640 <text text-anchor="middle" x="1591" y="-734.3" font-family="Times,serif" font-size="14.00">&amp;mp</text>
   -1   641 </g>
   -1   642 <!-- jl&#45;&gt;mp -->
   -1   643 <g id="edge44" class="edge">
   -1   644 <title>jl&#45;&gt;mp</title>
   -1   645 <path fill="none" stroke="black" d="M1799.32,-802.45C1763.71,-792.88 1695.96,-774.23 1639,-756 1635.27,-754.81 1631.39,-753.52 1627.53,-752.2"/>
   -1   646 <polygon fill="black" stroke="black" points="1628.66,-748.89 1618.06,-748.91 1626.36,-755.5 1628.66,-748.89"/>
   -1   647 </g>
   -1   648 <!-- jl&#45;&gt;lr -->
   -1   649 <g id="edge45" class="edge">
   -1   650 <title>jl&#45;&gt;lr</title>
   -1   651 <path fill="none" stroke="black" d="M1813.01,-793.22C1796.45,-767.85 1767,-715.88 1767,-667 1767,-667 1767,-667 1767,-449 1767,-408.71 1773.83,-362.44 1778.83,-333.96"/>
   -1   652 <polygon fill="black" stroke="black" points="1782.3,-334.43 1780.64,-323.97 1775.42,-333.19 1782.3,-334.43"/>
   -1   653 </g>
   -1   654 <!-- bg -->
   -1   655 <g id="node43" class="node">
   -1   656 <title>bg</title>
   -1   657 <ellipse fill="none" stroke="black" cx="1902" cy="-522" rx="31.4" ry="18"/>
   -1   658 <text text-anchor="middle" x="1902" y="-518.3" font-family="Times,serif" font-size="14.00">%bg</text>
   -1   659 </g>
   -1   660 <!-- jl&#45;&gt;bg -->
   -1   661 <g id="edge47" class="edge">
   -1   662 <title>jl&#45;&gt;bg</title>
   -1   663 <path fill="none" stroke="black" d="M1835.73,-793.57C1842.9,-783.41 1851.7,-769.52 1857,-756 1884.87,-684.96 1895.97,-594.74 1899.97,-550.29"/>
   -1   664 <polygon fill="black" stroke="black" points="1903.47,-550.52 1900.83,-540.26 1896.49,-549.93 1903.47,-550.52"/>
   -1   665 </g>
   -1   666 <!-- bk&#45;&gt;jn -->
   -1   667 <g id="edge87" class="edge">
   -1   668 <title>bk&#45;&gt;jn</title>
   -1   669 <path fill="none" stroke="black" d="M218.23,-936.67C227.19,-918.63 238.32,-888.84 230,-864 226.24,-852.79 219.07,-842.05 211.83,-833.21"/>
   -1   670 <polygon fill="black" stroke="black" points="214.46,-830.9 205.25,-825.66 209.18,-835.5 214.46,-830.9"/>
   -1   671 </g>
   -1   672 <!-- dg -->
   -1   673 <g id="node48" class="node">
   -1   674 <title>dg</title>
   -1   675 <ellipse fill="none" stroke="black" cx="190" cy="-882" rx="31.4" ry="18"/>
   -1   676 <text text-anchor="middle" x="190" y="-878.3" font-family="Times,serif" font-size="14.00">%dg</text>
   -1   677 </g>
   -1   678 <!-- bk&#45;&gt;dg -->
   -1   679 <g id="edge86" class="edge">
   -1   680 <title>bk&#45;&gt;dg</title>
   -1   681 <path fill="none" stroke="black" d="M204.4,-936.05C202.29,-928.26 199.72,-918.82 197.35,-910.08"/>
   -1   682 <polygon fill="black" stroke="black" points="200.69,-909.01 194.69,-900.28 193.93,-910.84 200.69,-909.01"/>
   -1   683 </g>
   -1   684 <!-- lp&#45;&gt;hm -->
   -1   685 <g id="edge30" class="edge">
   -1   686 <title>lp&#45;&gt;hm</title>
   -1   687 <path fill="none" stroke="black" d="M124.44,-433.12C130.12,-424.47 137.28,-413.58 143.68,-403.83"/>
   -1   688 <polygon fill="black" stroke="black" points="146.72,-405.59 149.28,-395.31 140.87,-401.74 146.72,-405.59"/>
   -1   689 </g>
   -1   690 <!-- jm&#45;&gt;fb -->
   -1   691 <g id="edge95" class="edge">
   -1   692 <title>jm&#45;&gt;fb</title>
   -1   693 <path fill="none" stroke="black" d="M442.96,-178.1C420.29,-202.53 380,-253.25 380,-305 380,-667 380,-667 380,-667 380,-711.73 391.99,-728.15 427,-756 473.88,-793.29 544.54,-804.49 588.12,-807.76"/>
   -1   694 <polygon fill="black" stroke="black" points="588.11,-811.27 598.31,-808.42 588.56,-804.28 588.11,-811.27"/>
   -1   695 </g>
   -1   696 <!-- jm&#45;&gt;hv -->
   -1   697 <g id="edge94" class="edge">
   -1   698 <title>jm&#45;&gt;hv</title>
   -1   699 <path fill="none" stroke="black" d="M486.04,-153.51C533.54,-140.82 629.82,-115.09 682.86,-100.92"/>
   -1   700 <polygon fill="black" stroke="black" points="683.8,-104.29 692.56,-98.33 681.99,-97.53 683.8,-104.29"/>
   -1   701 </g>
   -1   702 <!-- ss&#45;&gt;lp -->
   -1   703 <g id="edge33" class="edge">
   -1   704 <title>ss&#45;&gt;lp</title>
   -1   705 <path fill="none" stroke="black" d="M114,-503.7C114,-495.98 114,-486.71 114,-478.11"/>
   -1   706 <polygon fill="black" stroke="black" points="117.5,-478.1 114,-468.1 110.5,-478.1 117.5,-478.1"/>
   -1   707 </g>
   -1   708 <!-- hn&#45;&gt;xn -->
   -1   709 <g id="edge34" class="edge">
   -1   710 <title>hn&#45;&gt;xn</title>
   -1   711 <path fill="none" stroke="black" d="M769.72,-728.83C810.83,-716.27 889.67,-692.17 935.84,-678.05"/>
   -1   712 <polygon fill="black" stroke="black" points="936.91,-681.39 945.45,-675.11 934.87,-674.69 936.91,-681.39"/>
   -1   713 </g>
   -1   714 <!-- rx -->
   -1   715 <g id="node59" class="node">
   -1   716 <title>rx</title>
   -1   717 <ellipse fill="none" stroke="black" cx="972" cy="-594" rx="27" ry="18"/>
   -1   718 <text text-anchor="middle" x="972" y="-590.3" font-family="Times,serif" font-size="14.00">rx</text>
   -1   719 </g>
   -1   720 <!-- xn&#45;&gt;rx -->
   -1   721 <g id="edge108" class="edge">
   -1   722 <title>xn&#45;&gt;rx</title>
   -1   723 <path fill="none" stroke="black" d="M972,-647.7C972,-639.98 972,-630.71 972,-622.11"/>
   -1   724 <polygon fill="black" stroke="black" points="975.5,-622.1 972,-612.1 968.5,-622.1 975.5,-622.1"/>
   -1   725 </g>
   -1   726 <!-- bh -->
   -1   727 <g id="node37" class="node">
   -1   728 <title>bh</title>
   -1   729 <ellipse fill="none" stroke="black" cx="1978" cy="-666" rx="31.4" ry="18"/>
   -1   730 <text text-anchor="middle" x="1978" y="-662.3" font-family="Times,serif" font-size="14.00">%bh</text>
   -1   731 </g>
   -1   732 <!-- bh&#45;&gt;jl -->
   -1   733 <g id="edge35" class="edge">
   -1   734 <title>bh&#45;&gt;jl</title>
   -1   735 <path fill="none" stroke="black" d="M1973.05,-684.09C1966.63,-703.64 1953.73,-735.59 1933,-756 1912.01,-776.67 1881.38,-790.58 1857.93,-798.95"/>
   -1   736 <polygon fill="black" stroke="black" points="1856.71,-795.66 1848.37,-802.2 1858.96,-802.29 1856.71,-795.66"/>
   -1   737 </g>
   -1   738 <!-- bh&#45;&gt;ms -->
   -1   739 <g id="edge36" class="edge">
   -1   740 <title>bh&#45;&gt;ms</title>
   -1   741 <path fill="none" stroke="black" d="M1969.47,-648.41C1965.16,-640.04 1959.85,-629.71 1955.05,-620.37"/>
   -1   742 <polygon fill="black" stroke="black" points="1958.16,-618.76 1950.47,-611.47 1951.93,-621.96 1958.16,-618.76"/>
   -1   743 </g>
   -1   744 <!-- ms&#45;&gt;bg -->
   -1   745 <g id="edge97" class="edge">
   -1   746 <title>ms&#45;&gt;bg</title>
   -1   747 <path fill="none" stroke="black" d="M1932.52,-576.41C1927.74,-568.04 1921.83,-557.71 1916.5,-548.37"/>
   -1   748 <polygon fill="black" stroke="black" points="1919.41,-546.42 1911.41,-539.47 1913.33,-549.89 1919.41,-546.42"/>
   -1   749 </g>
   -1   750 <!-- km&#45;&gt;jl -->
   -1   751 <g id="edge37" class="edge">
   -1   752 <title>km&#45;&gt;jl</title>
   -1   753 <path fill="none" stroke="black" d="M1818.12,-864.05C1817.29,-856.23 1817.05,-846.75 1817.41,-837.98"/>
   -1   754 <polygon fill="black" stroke="black" points="1820.92,-838.01 1818.14,-827.79 1813.93,-837.51 1820.92,-838.01"/>
   -1   755 </g>
   -1   756 <!-- km&#45;&gt;lm -->
   -1   757 <g id="edge38" class="edge">
   -1   758 <title>km&#45;&gt;lm</title>
   -1   759 <path fill="none" stroke="black" d="M1843.11,-866.87C1877.5,-841.43 1949.89,-787.9 1989.21,-758.82"/>
   -1   760 <polygon fill="black" stroke="black" points="1991.57,-761.42 1997.53,-752.66 1987.41,-755.79 1991.57,-761.42"/>
   -1   761 </g>
   -1   762 <!-- lm&#45;&gt;bh -->
   -1   763 <g id="edge103" class="edge">
   -1   764 <title>lm&#45;&gt;bh</title>
   -1   765 <path fill="none" stroke="black" d="M2006.99,-720.41C2002.45,-712.04 1996.84,-701.71 1991.77,-692.37"/>
   -1   766 <polygon fill="black" stroke="black" points="1994.79,-690.59 1986.94,-683.47 1988.64,-693.93 1994.79,-690.59"/>
   -1   767 </g>
   -1   768 <!-- mp&#45;&gt;xn -->
   -1   769 <g id="edge65" class="edge">
   -1   770 <title>mp&#45;&gt;xn</title>
   -1   771 <path fill="none" stroke="black" d="M1566.08,-725.52C1560.55,-723.37 1554.66,-721.37 1549,-720 1446.74,-695.18 1126.24,-675.53 1012.52,-669.18"/>
   -1   772 <polygon fill="black" stroke="black" points="1012.66,-665.68 1002.48,-668.62 1012.28,-672.67 1012.66,-665.68"/>
   -1   773 </g>
   -1   774 <!-- pt -->
   -1   775 <g id="node44" class="node">
   -1   776 <title>pt</title>
   -1   777 <ellipse fill="none" stroke="black" cx="1748" cy="-234" rx="29.5" ry="18"/>
   -1   778 <text text-anchor="middle" x="1748" y="-230.3" font-family="Times,serif" font-size="14.00">%pt</text>
   -1   779 </g>
   -1   780 <!-- lr&#45;&gt;pt -->
   -1   781 <g id="edge61" class="edge">
   -1   782 <title>lr&#45;&gt;pt</title>
   -1   783 <path fill="none" stroke="black" d="M1775.65,-288.76C1771.35,-280.4 1766.01,-270.02 1761.17,-260.61"/>
   -1   784 <polygon fill="black" stroke="black" points="1764.24,-258.93 1756.55,-251.63 1758.02,-262.13 1764.24,-258.93"/>
   -1   785 </g>
   -1   786 <!-- bg&#45;&gt;js -->
   -1   787 <g id="edge81" class="edge">
   -1   788 <title>bg&#45;&gt;js</title>
   -1   789 <path fill="none" stroke="black" d="M1892.26,-504.76C1887.12,-496.19 1880.7,-485.49 1874.94,-475.9"/>
   -1   790 <polygon fill="black" stroke="black" points="1877.83,-473.92 1869.69,-467.15 1871.83,-477.52 1877.83,-473.92"/>
   -1   791 </g>
   -1   792 <!-- pt&#45;&gt;jl -->
   -1   793 <g id="edge49" class="edge">
   -1   794 <title>pt&#45;&gt;jl</title>
   -1   795 <path fill="none" stroke="black" d="M1744.25,-251.95C1738.71,-278.48 1729,-331.48 1729,-377 1729,-667 1729,-667 1729,-667 1729,-717.48 1770.99,-763.61 1799.14,-788.85"/>
   -1   796 <polygon fill="black" stroke="black" points="1797.17,-791.78 1807.02,-795.7 1801.77,-786.5 1797.17,-791.78"/>
   -1   797 </g>
   -1   798 <!-- jt -->
   -1   799 <g id="node45" class="node">
   -1   800 <title>jt</title>
   -1   801 <ellipse fill="none" stroke="black" cx="1728" cy="-162" rx="27" ry="18"/>
   -1   802 <text text-anchor="middle" x="1728" y="-158.3" font-family="Times,serif" font-size="14.00">%jt</text>
   -1   803 </g>
   -1   804 <!-- pt&#45;&gt;jt -->
   -1   805 <g id="edge48" class="edge">
   -1   806 <title>pt&#45;&gt;jt</title>
   -1   807 <path fill="none" stroke="black" d="M1743.16,-216.05C1740.9,-208.14 1738.15,-198.54 1735.63,-189.69"/>
   -1   808 <polygon fill="black" stroke="black" points="1738.91,-188.44 1732.8,-179.79 1732.18,-190.37 1738.91,-188.44"/>
   -1   809 </g>
   -1   810 <!-- jt&#45;&gt;jl -->
   -1   811 <g id="edge73" class="edge">
   -1   812 <title>jt&#45;&gt;jl</title>
   -1   813 <path fill="none" stroke="black" d="M1720.69,-179.68C1709.91,-205.85 1691,-258.38 1691,-305 1691,-667 1691,-667 1691,-667 1691,-726.73 1754.45,-771.69 1793.7,-793.79"/>
   -1   814 <polygon fill="black" stroke="black" points="1792.18,-796.95 1802.63,-798.66 1795.53,-790.8 1792.18,-796.95"/>
   -1   815 </g>
   -1   816 <!-- hx -->
   -1   817 <g id="node52" class="node">
   -1   818 <title>hx</title>
   -1   819 <ellipse fill="none" stroke="black" cx="1728" cy="-90" rx="30.59" ry="18"/>
   -1   820 <text text-anchor="middle" x="1728" y="-86.3" font-family="Times,serif" font-size="14.00">%hx</text>
   -1   821 </g>
   -1   822 <!-- jt&#45;&gt;hx -->
   -1   823 <g id="edge72" class="edge">
   -1   824 <title>jt&#45;&gt;hx</title>
   -1   825 <path fill="none" stroke="black" d="M1728,-143.7C1728,-135.98 1728,-126.71 1728,-118.11"/>
   -1   826 <polygon fill="black" stroke="black" points="1731.5,-118.1 1728,-108.1 1724.5,-118.1 1731.5,-118.1"/>
   -1   827 </g>
   -1   828 <!-- xt&#45;&gt;jn -->
   -1   829 <g id="edge51" class="edge">
   -1   830 <title>xt&#45;&gt;jn</title>
   -1   831 <path fill="none" stroke="black" d="M239.39,-755.51C232.61,-765.13 222.79,-777.37 213.61,-787.71"/>
   -1   832 <polygon fill="black" stroke="black" points="210.94,-785.43 206.77,-795.17 216.1,-790.16 210.94,-785.43"/>
   -1   833 </g>
   -1   834 <!-- jf -->
   -1   835 <g id="node47" class="node">
   -1   836 <title>jf</title>
   -1   837 <ellipse fill="none" stroke="black" cx="169" cy="-666" rx="27" ry="18"/>
   -1   838 <text text-anchor="middle" x="169" y="-662.3" font-family="Times,serif" font-size="14.00">%jf</text>
   -1   839 </g>
   -1   840 <!-- xt&#45;&gt;jf -->
   -1   841 <g id="edge52" class="edge">
   -1   842 <title>xt&#45;&gt;jf</title>
   -1   843 <path fill="none" stroke="black" d="M231.22,-722.83C219.94,-712.71 204.58,-698.93 191.95,-687.59"/>
   -1   844 <polygon fill="black" stroke="black" points="194.27,-684.98 184.49,-680.91 189.6,-690.19 194.27,-684.98"/>
   -1   845 </g>
   -1   846 <!-- jf&#45;&gt;jn -->
   -1   847 <g id="edge92" class="edge">
   -1   848 <title>jf&#45;&gt;jn</title>
   -1   849 <path fill="none" stroke="black" d="M169.44,-684.17C170.11,-702.18 171.79,-731.25 176,-756 177.47,-764.67 179.71,-773.99 181.96,-782.36"/>
   -1   850 <polygon fill="black" stroke="black" points="178.59,-783.31 184.67,-791.99 185.33,-781.41 178.59,-783.31"/>
   -1   851 </g>
   -1   852 <!-- kz -->
   -1   853 <g id="node56" class="node">
   -1   854 <title>kz</title>
   -1   855 <ellipse fill="none" stroke="black" cx="134" cy="-594" rx="29.8" ry="18"/>
   -1   856 <text text-anchor="middle" x="134" y="-590.3" font-family="Times,serif" font-size="14.00">%kz</text>
   -1   857 </g>
   -1   858 <!-- jf&#45;&gt;kz -->
   -1   859 <g id="edge93" class="edge">
   -1   860 <title>jf&#45;&gt;kz</title>
   -1   861 <path fill="none" stroke="black" d="M160.88,-648.76C156.7,-640.4 151.51,-630.02 146.8,-620.61"/>
   -1   862 <polygon fill="black" stroke="black" points="149.92,-619.01 142.32,-611.63 143.66,-622.14 149.92,-619.01"/>
   -1   863 </g>
   -1   864 <!-- dg&#45;&gt;jn -->
   -1   865 <g id="edge54" class="edge">
   -1   866 <title>dg&#45;&gt;jn</title>
   -1   867 <path fill="none" stroke="black" d="M190,-863.7C190,-855.98 190,-846.71 190,-838.11"/>
   -1   868 <polygon fill="black" stroke="black" points="193.5,-838.1 190,-828.1 186.5,-838.1 193.5,-838.1"/>
   -1   869 </g>
   -1   870 <!-- rt -->
   -1   871 <g id="node49" class="node">
   -1   872 <title>rt</title>
   -1   873 <ellipse fill="none" stroke="black" cx="550" cy="-522" rx="27.9" ry="18"/>
   -1   874 <text text-anchor="middle" x="550" y="-518.3" font-family="Times,serif" font-size="14.00">%rt</text>
   -1   875 </g>
   -1   876 <!-- rt&#45;&gt;fb -->
   -1   877 <g id="edge55" class="edge">
   -1   878 <title>rt&#45;&gt;fb</title>
   -1   879 <path fill="none" stroke="black" d="M548.85,-540.17C547.96,-558.17 547.4,-587.23 551,-612 560.57,-677.85 564.23,-695.53 592,-756 596.62,-766.07 603.01,-776.4 609.07,-785.24"/>
   -1   880 <polygon fill="black" stroke="black" points="606.29,-787.38 614.93,-793.51 612,-783.33 606.29,-787.38"/>
   -1   881 </g>
   -1   882 <!-- rt&#45;&gt;hb -->
   -1   883 <g id="edge56" class="edge">
   -1   884 <title>rt&#45;&gt;hb</title>
   -1   885 <path fill="none" stroke="black" d="M541.88,-504.76C537.7,-496.4 532.51,-486.02 527.8,-476.61"/>
   -1   886 <polygon fill="black" stroke="black" points="530.92,-475.01 523.32,-467.63 524.66,-478.14 530.92,-475.01"/>
   -1   887 </g>
   -1   888 <!-- broadcaster -->
   -1   889 <g id="node50" class="node">
   -1   890 <title>broadcaster</title>
   -1   891 <ellipse fill="none" stroke="black" cx="1009" cy="-954" rx="66.09" ry="18"/>
   -1   892 <text text-anchor="middle" x="1009" y="-950.3" font-family="Times,serif" font-size="14.00">broadcaster</text>
   -1   893 </g>
   -1   894 <!-- broadcaster&#45;&gt;vk -->
   -1   895 <g id="edge60" class="edge">
   -1   896 <title>broadcaster&#45;&gt;vk</title>
   -1   897 <path fill="none" stroke="black" d="M960,-941.75C899.25,-927.81 797.02,-904.35 741.92,-891.7"/>
   -1   898 <polygon fill="black" stroke="black" points="742.4,-888.22 731.88,-889.4 740.84,-895.05 742.4,-888.22"/>
   -1   899 </g>
   -1   900 <!-- broadcaster&#45;&gt;pk -->
   -1   901 <g id="edge59" class="edge">
   -1   902 <title>broadcaster&#45;&gt;pk</title>
   -1   903 <path fill="none" stroke="black" d="M1051.08,-940.08C1094.02,-926.9 1159.97,-906.65 1200.69,-894.15"/>
   -1   904 <polygon fill="black" stroke="black" points="1201.94,-897.43 1210.47,-891.14 1199.88,-890.73 1201.94,-897.43"/>
   -1   905 </g>
   -1   906 <!-- broadcaster&#45;&gt;km -->
   -1   907 <g id="edge57" class="edge">
   -1   908 <title>broadcaster&#45;&gt;km</title>
   -1   909 <path fill="none" stroke="black" d="M1071.26,-947.65C1229.74,-934.04 1645.43,-898.34 1780.75,-886.71"/>
   -1   910 <polygon fill="black" stroke="black" points="1781.08,-890.2 1790.74,-885.86 1780.48,-883.23 1781.08,-890.2"/>
   -1   911 </g>
   -1   912 <!-- broadcaster&#45;&gt;xt -->
   -1   913 <g id="edge58" class="edge">
   -1   914 <title>broadcaster&#45;&gt;xt</title>
   -1   915 <path fill="none" stroke="black" d="M946.79,-947.53C877.06,-940.45 761.05,-925.86 664,-900 515.7,-860.48 347.66,-785.93 278.89,-754.06"/>
   -1   916 <polygon fill="black" stroke="black" points="280.02,-750.73 269.48,-749.68 277.06,-757.08 280.02,-750.73"/>
   -1   917 </g>
   -1   918 <!-- bf&#45;&gt;gp -->
   -1   919 <g id="edge85" class="edge">
   -1   920 <title>bf&#45;&gt;gp</title>
   -1   921 <path fill="none" stroke="black" d="M1358.75,-179.95C1364.29,-206.48 1374,-259.48 1374,-305 1374,-667 1374,-667 1374,-667 1374,-727.07 1309.73,-771.47 1269.23,-793.48"/>
   -1   922 <polygon fill="black" stroke="black" points="1267.46,-790.46 1260.24,-798.22 1270.72,-796.65 1267.46,-790.46"/>
   -1   923 </g>
   -1   924 <!-- fx -->
   -1   925 <g id="node57" class="node">
   -1   926 <title>fx</title>
   -1   927 <ellipse fill="none" stroke="black" cx="1393" cy="-90" rx="28.7" ry="18"/>
   -1   928 <text text-anchor="middle" x="1393" y="-86.3" font-family="Times,serif" font-size="14.00">%fx</text>
   -1   929 </g>
   -1   930 <!-- bf&#45;&gt;fx -->
   -1   931 <g id="edge84" class="edge">
   -1   932 <title>bf&#45;&gt;fx</title>
   -1   933 <path fill="none" stroke="black" d="M1363.81,-144.76C1368.42,-136.28 1374.16,-125.71 1379.32,-116.2"/>
   -1   934 <polygon fill="black" stroke="black" points="1382.54,-117.61 1384.23,-107.15 1376.39,-114.27 1382.54,-117.61"/>
   -1   935 </g>
   -1   936 <!-- hx&#45;&gt;jl -->
   -1   937 <g id="edge64" class="edge">
   -1   938 <title>hx&#45;&gt;jl</title>
   -1   939 <path fill="none" stroke="black" d="M1713.54,-106.21C1691.75,-130.79 1653,-181.7 1653,-233 1653,-667 1653,-667 1653,-667 1653,-713.04 1671.63,-725.37 1706,-756 1729.98,-777.37 1763.99,-791.4 1789.35,-799.63"/>
   -1   940 <polygon fill="black" stroke="black" points="1788.35,-802.99 1798.94,-802.6 1790.42,-796.3 1788.35,-802.99"/>
   -1   941 </g>
   -1   942 <!-- qd -->
   -1   943 <g id="node53" class="node">
   -1   944 <title>qd</title>
   -1   945 <ellipse fill="none" stroke="black" cx="1901" cy="-18" rx="31.4" ry="18"/>
   -1   946 <text text-anchor="middle" x="1901" y="-14.3" font-family="Times,serif" font-size="14.00">%qd</text>
   -1   947 </g>
   -1   948 <!-- hx&#45;&gt;qd -->
   -1   949 <g id="edge63" class="edge">
   -1   950 <title>hx&#45;&gt;qd</title>
   -1   951 <path fill="none" stroke="black" d="M1752.42,-79.12C1782.26,-67.05 1832.93,-46.54 1866.68,-32.89"/>
   -1   952 <polygon fill="black" stroke="black" points="1868.19,-36.05 1876.14,-29.06 1865.56,-29.56 1868.19,-36.05"/>
   -1   953 </g>
   -1   954 <!-- qd&#45;&gt;jl -->
   -1   955 <g id="edge107" class="edge">
   -1   956 <title>qd&#45;&gt;jl</title>
   -1   957 <path fill="none" stroke="black" d="M1928.19,-27.15C1977.12,-43.69 2075,-86.14 2075,-161 2075,-667 2075,-667 2075,-667 2075,-707.45 2084.4,-727.2 2056,-756 2029.1,-783.28 1919.42,-798.85 1861.01,-805.36"/>
   -1   958 <polygon fill="black" stroke="black" points="1860.3,-801.92 1850.74,-806.47 1861.05,-808.88 1860.3,-801.92"/>
   -1   959 </g>
   -1   960 <!-- pd&#45;&gt;fb -->
   -1   961 <g id="edge106" class="edge">
   -1   962 <title>pd&#45;&gt;fb</title>
   -1   963 <path fill="none" stroke="black" d="M488.1,-395.62C476.44,-421.71 456,-474.13 456,-521 456,-667 456,-667 456,-667 456,-713.04 474.63,-725.37 509,-756 532.68,-777.1 566.15,-791.06 591.4,-799.32"/>
   -1   964 <polygon fill="black" stroke="black" points="590.39,-802.67 600.98,-802.32 592.48,-795.99 590.39,-802.67"/>
   -1   965 </g>
   -1   966 <!-- pd&#45;&gt;cf -->
   -1   967 <g id="edge105" class="edge">
   -1   968 <title>pd&#45;&gt;cf</title>
   -1   969 <path fill="none" stroke="black" d="M496,-359.7C496,-351.98 496,-342.71 496,-334.11"/>
   -1   970 <polygon fill="black" stroke="black" points="499.5,-334.1 496,-324.1 492.5,-334.1 499.5,-334.1"/>
   -1   971 </g>
   -1   972 <!-- rs&#45;&gt;fb -->
   -1   973 <g id="edge99" class="edge">
   -1   974 <title>rs&#45;&gt;fb</title>
   -1   975 <path fill="none" stroke="black" d="M587.51,-612.17C586.3,-630.18 585.32,-659.24 589,-684 594.22,-719.1 607.25,-757.98 616.6,-782.92"/>
   -1   976 <polygon fill="black" stroke="black" points="613.38,-784.29 620.22,-792.38 619.91,-781.79 613.38,-784.29"/>
   -1   977 </g>
   -1   978 <!-- rs&#45;&gt;rt -->
   -1   979 <g id="edge100" class="edge">
   -1   980 <title>rs&#45;&gt;rt</title>
   -1   981 <path fill="none" stroke="black" d="M579.95,-576.76C575.18,-568.19 569.22,-557.49 563.87,-547.9"/>
   -1   982 <polygon fill="black" stroke="black" points="566.92,-546.18 559,-539.15 560.81,-549.59 566.92,-546.18"/>
   -1   983 </g>
   -1   984 <!-- kz&#45;&gt;jn -->
   -1   985 <g id="edge83" class="edge">
   -1   986 <title>kz&#45;&gt;jn</title>
   -1   987 <path fill="none" stroke="black" d="M131.58,-611.96C129.52,-630.04 127.65,-659.39 133,-684 140.96,-720.63 160.62,-759.39 174.62,-783.86"/>
   -1   988 <polygon fill="black" stroke="black" points="171.79,-785.95 179.86,-792.81 177.83,-782.41 171.79,-785.95"/>
   -1   989 </g>
   -1   990 <!-- kz&#45;&gt;ss -->
   -1   991 <g id="edge82" class="edge">
   -1   992 <title>kz&#45;&gt;ss</title>
   -1   993 <path fill="none" stroke="black" d="M129.16,-576.05C126.9,-568.14 124.15,-558.54 121.63,-549.69"/>
   -1   994 <polygon fill="black" stroke="black" points="124.91,-548.44 118.8,-539.79 118.18,-550.37 124.91,-548.44"/>
   -1   995 </g>
   -1   996 <!-- fx&#45;&gt;gp -->
   -1   997 <g id="edge89" class="edge">
   -1   998 <title>fx&#45;&gt;gp</title>
   -1   999 <path fill="none" stroke="black" d="M1396.75,-107.95C1402.29,-134.48 1412,-187.48 1412,-233 1412,-667 1412,-667 1412,-667 1412,-737.61 1325.03,-779.23 1273.71,-797.65"/>
   -1  1000 <polygon fill="black" stroke="black" points="1272.27,-794.45 1263.96,-801.03 1274.56,-801.06 1272.27,-794.45"/>
   -1  1001 </g>
   -1  1002 <!-- dp -->
   -1  1003 <g id="node58" class="node">
   -1  1004 <title>dp</title>
   -1  1005 <ellipse fill="none" stroke="black" cx="1422" cy="-18" rx="31.4" ry="18"/>
   -1  1006 <text text-anchor="middle" x="1422" y="-14.3" font-family="Times,serif" font-size="14.00">%dp</text>
   -1  1007 </g>
   -1  1008 <!-- fx&#45;&gt;dp -->
   -1  1009 <g id="edge90" class="edge">
   -1  1010 <title>fx&#45;&gt;dp</title>
   -1  1011 <path fill="none" stroke="black" d="M1399.87,-72.41C1403.22,-64.34 1407.32,-54.43 1411.08,-45.35"/>
   -1  1012 <polygon fill="black" stroke="black" points="1414.38,-46.53 1414.98,-35.96 1407.91,-43.86 1414.38,-46.53"/>
   -1  1013 </g>
   -1  1014 <!-- dp&#45;&gt;gp -->
   -1  1015 <g id="edge91" class="edge">
   -1  1016 <title>dp&#45;&gt;gp</title>
   -1  1017 <path fill="none" stroke="black" d="M1427.53,-35.84C1435.69,-62.21 1450,-115.02 1450,-161 1450,-667 1450,-667 1450,-667 1450,-749.77 1337.28,-787.26 1275.84,-801.55"/>
   -1  1018 <polygon fill="black" stroke="black" points="1274.73,-798.21 1265.73,-803.8 1276.25,-805.04 1274.73,-798.21"/>
   -1  1019 </g>
   -1  1020 </g>
   -1  1021 </svg>

diff --git a/2023/20/input.txt b/2023/20/input.txt

@@ -0,0 +1,58 @@
   -1     1 %jv -> rn, jn
   -1     2 &fb -> hb, vk, fz, kl, cg
   -1     3 %rr -> vm, gp
   -1     4 &gp -> vm, cb, bd, qm, xf, pk
   -1     5 %hm -> ql
   -1     6 %cf -> dx, fb
   -1     7 %cg -> kl
   -1     8 %hv -> kg, fb
   -1     9 %hs -> jv
   -1    10 %bd -> dt
   -1    11 %xv -> mv, gp
   -1    12 %js -> zb, jl
   -1    13 %rn -> bk, jn
   -1    14 %lp -> hm
   -1    15 %dx -> fb, jm
   -1    16 %ss -> lp
   -1    17 &hn -> xn
   -1    18 %bh -> jl, ms
   -1    19 %km -> jl, lm
   -1    20 %mv -> gp, qm
   -1    21 &jl -> km, lm, ms, mp, lr, zb, bg
   -1    22 %pt -> jt, jl
   -1    23 %cb -> bd
   -1    24 %xt -> jn, jf
   -1    25 %kg -> fb
   -1    26 %dg -> jn
   -1    27 %rt -> fb, hb
   -1    28 broadcaster -> km, xt, pk, vk
   -1    29 %lr -> pt
   -1    30 %vm -> bf
   -1    31 %hx -> qd, jl
   -1    32 &mp -> xn
   -1    33 %hb -> pd
   -1    34 %vk -> cg, fb
   -1    35 %kl -> rs
   -1    36 %pk -> gp, cb
   -1    37 %jt -> hx, jl
   -1    38 &jn -> hs, lp, hm, hn, ql, xt, ss
   -1    39 %bg -> js
   -1    40 %kz -> ss, jn
   -1    41 %bf -> fx, gp
   -1    42 %bk -> dg, jn
   -1    43 %qm -> rr
   -1    44 %fx -> gp, dp
   -1    45 %dp -> gp
   -1    46 %jf -> jn, kz
   -1    47 %jm -> hv, fb
   -1    48 %ql -> hs
   -1    49 %ms -> bg
   -1    50 %zb -> lr
   -1    51 %rs -> fb, rt
   -1    52 %dt -> xv, gp
   -1    53 %lm -> bh
   -1    54 &xf -> xn
   -1    55 %pd -> cf, fb
   -1    56 %qd -> jl
   -1    57 &xn -> rx
   -1    58 &fz -> xn

diff --git a/2023/20/solution.rs b/2023/20/solution.rs

@@ -0,0 +1,171 @@
   -1     1 use std::collections::VecDeque;
   -1     2 
   -1     3 #[path = "../lib.rs"]
   -1     4 mod lib;
   -1     5 
   -1     6 const LOW: bool = false;
   -1     7 const HIGH: bool = true;
   -1     8 
   -1     9 #[derive(Clone, Copy, Debug)]
   -1    10 enum Module {
   -1    11     Broadcaster,
   -1    12     FlipFlop,
   -1    13     Conjunction,
   -1    14 }
   -1    15 
   -1    16 fn parse_input() -> Vec<(String, Module, Vec<usize>)> {
   -1    17     let mut modules = vec![];
   -1    18     let mut names = vec![
   -1    19         "broadcaster".to_string(),
   -1    20         "sink".to_string(),
   -1    21         "hn".to_string(),
   -1    22         "fz".to_string(),
   -1    23         "xf".to_string(),
   -1    24         "mp".to_string(),
   -1    25         "xn".to_string(),
   -1    26     ];
   -1    27     for _ in names.iter() {
   -1    28         modules.push((Module::Broadcaster, vec![]));
   -1    29     }
   -1    30     for line in lib::iter_input() {
   -1    31         let (head, tail) = line.split_once(" -> ").unwrap();
   -1    32         let (name, module) = match head.bytes().next().unwrap() {
   -1    33             b'b' => (head.to_string(), Module::Broadcaster),
   -1    34             b'%' => (head[1..].to_string(), Module::FlipFlop),
   -1    35             b'&' => (head[1..].to_string(), Module::Conjunction),
   -1    36             _ => unreachable!(),
   -1    37         };
   -1    38         let target_names = tail.split(", ").map(|s| s.to_string()).collect();
   -1    39         if let Some(i) = names.iter().position(|n| *n == name) {
   -1    40             modules[i] = (module, target_names);
   -1    41         } else {
   -1    42             names.push(name);
   -1    43             modules.push((module, target_names));
   -1    44         }
   -1    45     }
   -1    46 
   -1    47     return modules
   -1    48         .iter()
   -1    49         .enumerate()
   -1    50         .map(|(i, (module, target_names))| {
   -1    51             let targets = target_names
   -1    52                 .iter()
   -1    53                 .map(|name| match names.iter().position(|n| n == name) {
   -1    54                     Some(i) => i,
   -1    55                     None => 1,
   -1    56                 })
   -1    57                 .collect();
   -1    58             return (names[i].clone(), *module, targets);
   -1    59         })
   -1    60         .collect();
   -1    61 }
   -1    62 
   -1    63 fn push_the_button(
   -1    64     modules: &Vec<(String, Module, Vec<usize>)>,
   -1    65     state: &mut Vec<(bool, bool)>,
   -1    66 ) -> (usize, usize, [bool; 4]) {
   -1    67     let mut queue = VecDeque::new();
   -1    68     let mut lows = 0;
   -1    69     let mut highs = 0;
   -1    70     let mut part2 = [false; 4];
   -1    71 
   -1    72     queue.push_back((0, LOW));
   -1    73 
   -1    74     while let Some((cur, pulse)) = queue.pop_front() {
   -1    75         if pulse == HIGH {
   -1    76             highs += 1;
   -1    77         } else {
   -1    78             lows += 1;
   -1    79         }
   -1    80         match &modules[cur] {
   -1    81             (_name, Module::Broadcaster, targets) => {
   -1    82                 state[cur].1 = pulse;
   -1    83                 for next in targets.iter() {
   -1    84                     queue.push_back((*next, pulse));
   -1    85                 }
   -1    86             }
   -1    87             (_name, Module::FlipFlop, targets) => {
   -1    88                 if pulse == LOW {
   -1    89                     let p;
   -1    90                     if state[cur].0 {
   -1    91                         state[cur].0 = false;
   -1    92                         p = LOW;
   -1    93                     } else {
   -1    94                         state[cur].0 = true;
   -1    95                         p = HIGH;
   -1    96                     }
   -1    97                     state[cur].1 = p;
   -1    98                     for next in targets.iter() {
   -1    99                         queue.push_back((*next, p));
   -1   100                     }
   -1   101                 }
   -1   102             }
   -1   103             (_name, Module::Conjunction, targets) => {
   -1   104                 let all =
   -1   105                     (0..modules.len()).all(|i| state[i].1 == HIGH || !modules[i].2.contains(&cur));
   -1   106                 let p = if all { LOW } else { HIGH };
   -1   107                 state[cur].1 = p;
   -1   108                 match (cur, p) {
   -1   109                     (2, true) => part2[0] = true,
   -1   110                     (3, true) => part2[1] = true,
   -1   111                     (4, true) => part2[2] = true,
   -1   112                     (5, true) => part2[3] = true,
   -1   113                     _ => {}
   -1   114                 };
   -1   115                 for next in targets.iter() {
   -1   116                     queue.push_back((*next, p));
   -1   117                 }
   -1   118             }
   -1   119         }
   -1   120     }
   -1   121 
   -1   122     return (highs, lows, part2);
   -1   123 }
   -1   124 
   -1   125 fn gcd(a: usize, b: usize) -> usize {
   -1   126     let mut x = a.max(b);
   -1   127     let mut y = a.min(b);
   -1   128     while y > 0 {
   -1   129         (x, y) = (y, x % y);
   -1   130     }
   -1   131     return x;
   -1   132 }
   -1   133 
   -1   134 fn lcm(a: usize, b: usize) -> usize {
   -1   135     return a * b / gcd(a, b);
   -1   136 }
   -1   137 
   -1   138 fn main() {
   -1   139     let modules = parse_input();
   -1   140     let mut state = vec![(false, LOW); modules.len()];
   -1   141     let mut highs = 0;
   -1   142     let mut lows = 0;
   -1   143     let mut part2 = [0; 4];
   -1   144 
   -1   145     for i in 1.. {
   -1   146         let (h, l, p2) = push_the_button(&modules, &mut state);
   -1   147         if i <= 1000 {
   -1   148             highs += h;
   -1   149             lows += l;
   -1   150         }
   -1   151         for j in 0..4 {
   -1   152             if part2[j] == 0 && p2[j] {
   -1   153                 part2[j] = i;
   -1   154             }
   -1   155         }
   -1   156         if i > 1000 && part2.iter().all(|&x| x != 0) {
   -1   157             break;
   -1   158         }
   -1   159     }
   -1   160 
   -1   161     println!("part1: {}", lows * highs);
   -1   162 
   -1   163     // part 2 is a bit shaky. I looked at the graph of nodes and
   -1   164     // realized that there are 4 subgraphs that each feed into &xn.
   -1   165     // I was not sure if they reset to the initial state after that,
   -1   166     // but simply calculating their lcm gave the correct answer.
   -1   167     println!(
   -1   168         "part2: {}",
   -1   169         lcm(lcm(part2[0], part2[1]), lcm(part2[2], part2[3]))
   -1   170     );
   -1   171 }

diff --git a/2023/20/test1.txt b/2023/20/test1.txt

@@ -0,0 +1,5 @@
   -1     1 broadcaster -> a, b, c
   -1     2 %a -> b
   -1     3 %b -> c
   -1     4 %c -> inv
   -1     5 &inv -> a

diff --git a/2023/20/test2.txt b/2023/20/test2.txt

@@ -0,0 +1,5 @@
   -1     1 broadcaster -> a
   -1     2 %a -> inv, con
   -1     3 &inv -> b
   -1     4 %b -> con
   -1     5 &con -> output