--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.40;
+
+my %rules;
+while (<>) {
+ chomp;
+ last if /^\s*$/;
+ my ($src, $dst) = /\d+/g;
+ $rules{$src}->{$dst}++;
+}
+
+my $sum;
+
+UPDATE:
+while (<>) {
+ chomp;
+ my @upd = /\d+/g;
+ for my ($i, $u1) (indexed @upd[0 .. $#upd-1]) {
+ for my ($j, $u2) (indexed @upd[$i+1 .. $#upd]) {
+ next UPDATE if $rules{$u2}->{$u1};
+ }
+ }
+ $sum += $upd[@upd/2];
+}
+
+say $sum;
--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.40;
+
+my %rules;
+while (<>) {
+ chomp;
+ last if /^\s*$/;
+ my ($src, $dst) = /\d+/g;
+ $rules{$src}{$dst}++;
+}
+
+my $sum;
+
+while (<>) {
+ chomp;
+ my @upd = /\d+/g;
+ for my ($i, $u1) (indexed @upd[0 .. $#upd-1]) {
+ for my ($j, $u2) (indexed @upd[$i+1 .. $#upd]) {
+ goto INCORR if $rules{$u2}{$u1};
+ }
+ }
+ next;
+INCORR:
+ @upd = sort { $rules{$a}{$b} ? -1 : 1 } @upd;
+ $sum += $upd[@upd/2];
+}
+
+say $sum;