my($min) = my($n) = shift; my(@vals, @arr, @res, %sums); map { my($rt)=sqrt($_); push(@vals, $_) if ( $rt == int($rt) ) } ( reverse(1..$n) ); sub quadSum { if ( ($_[0] >= 0) && (! @arr || ($_[0] <= $arr[-1])) && (@arr <= $min) ) { if ( ! $_[0] ) { push(@{$res[$min=@arr]}, join('+', sort { $b <=> $a } @arr) . "\n"); } else { map { push(@arr, $_); quadSum($_[0]-$_); pop(@arr) } @vals } } } quadSum($n); map { print } @{$res[$min]};