--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.42;
+
+my %g = map { my @x = /\w+/g; shift(@x) => [ @x ] } <>;
+my $sum;
+my @q = 'you';
+while (my $p = shift @q) {
+ if ($p eq 'out') {
+ $sum++;
+ next;
+ }
+ push @q, $_ for $g{$p}->@*;
+}
+say $sum;
--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.42;
+
+my %g = map { my @x = /\w+/g; shift(@x) => [ @x ] } <>;
+
+my @paths;
+for my $node (keys %g) {
+ $paths[0]{$node}{$_} = 1 for $g{$node}->@*;
+}
+
+for my $i (1 .. keys %g) {
+ for my $node (keys %g) {
+ for my $next ($g{$node}->@*) {
+ $paths[$i]{$node}{$_} += $paths[$i-1]{$next}{$_}
+ for keys $paths[$i-1]{$next}->%*;
+ }
+ }
+}
+
+my %all;
+for my $p (@paths) {
+ for my $node (keys %$p) {
+ $all{$node}{$_} += $p->{$node}{$_}
+ for keys $p->{$node}->%*;
+ }
+}
+
+no warnings 'uninitialized'; # only one direction between dac and fft exists
+say $all{svr}{fft} * $all{fft}{dac} * $all{dac}{out}
+ + $all{svr}{dac} * $all{dac}{fft} * $all{fft}{out};