use common::sense; use less 'CPU'; $\ = "\n"; <>; my @covers = <>; chomp @covers; $_ -- foreach(@covers); my @vertices = map +{ covers => $covers[$_], deg => 0, idx => $_ }, (0..$#covers); $vertices[$_]->{deg} ++ foreach(@covers); my @zeroes = grep !$_->{deg}, @vertices; my @all = @vertices; while(my $uncovered = shift @zeroes // shift @all) { next if $uncovered->{used}; my $covered = $vertices[$uncovered->{covers}]; next if $covered->{used}; print $covered->{idx} + 1; $uncovered->{used} = $covered->{used} = 1; my $next = $vertices[$covered->{covers}]; push @zeroes, $next unless -- $next->{deg}; }