sub merge { my @allparts = @_; my @complete = @{shift(@allparts)}; ALLPARTS: while(@allparts) { for(0 .. $#allparts) { my @thispart = @{$allparts[$_]}; if($thispart[0] == $complete[$#complete]) { shift(@thispart); # remove part, so we don't double points @complete = (@complete,@thispart); splice(@allparts,$_,1); next ALLPARTS; } if($complete[0] == $thispart[$#thispart]) { shift(@complete); # remove part @complete = (@thispart,@complete); splice(@allparts,$_,1); next ALLPARTS; } } die "Found pieces that don't fit!\n".Dumper(@allparts); } return @complete; }