use strict; use warnings; use feature qw( say ); sub A { my ($m, $n) = @_; # $A[$m] holds A($m, $n[$m]) my (@n, @A); for my $mi (0..$m) { $n[$mi] = -1; $A[$mi] = 1; } for (;;) { ++$n[0]; $A[0] = $n[0] + 1; for my $mi (1..$m) { last if $A[$mi] != $n[$mi-1]; $A[$mi] = $A[$mi-1]; ++$n[$mi]; } return $A[$m] if $n[$m] == $n; } } say A(@ARGV);