#!/usr/bin/perl -l # http://perlmonks.org/?node_id=1174320 use strict; use warnings; my @answers; my @queue = [[], [qw(2 6 5 7 4 3 9)]]; while( my $state = shift @queue ) { my @have = $state->[0]->@*; my @more = $state->[1]->@*; if( @more ) { @have == 0 || $have[-1] < $more[0] and push @queue, [[@have, $more[0]], [@more[1..$#more]]]; push @queue, [[@have], [@more[1..$#more]]]; } elsif( @have >= $#answers ) { push @{$answers[@have]}, "@have"; } } print for $answers[-1]->@*;