- $dest = $dest->{prev_num} while $num_seen{$dest->{num}};
- # print " dest: ", $dest->{num}, "\n";
- $cur->{next} = $cup;
- my $end = $dest->{next};
- $dest->{next} = $pickup[0];
- $pickup[-1]->{next} = $end;
-
- $cur = $cur->{next};
- # $end = $cur;
+ my $dest = $cur;
+ while ($num_seen{$dest}) {
+ $dest--;
+ $dest = $max-1 if $dest < 0;
+ }
+ # print " dest: ", $dest + 1, "\n";
+ $next_cup[$cur] = $cup;
+ my $end = $next_cup[$dest];
+ $next_cup[$dest] = $pickup[0];
+ $next_cup[$pickup[-1]] = $end;
+
+ $cur = $next_cup[$cur];
+ $end = $cur;