use Integer;
print solve(1,1,5,-4,1);
# 1/a_1+..+1/a_n=q/r, a_1+...a_n=s*n+t
# n=0 only if q=0 t=0
# let m=min a_i, then m<=k where k=s-1 for t<0, k=s+t for t>=0
# no solution if 1/k>q/r <=> r>(k*q)
sub solve($$$$$) {
my ($q,$r,$s,$t,$pmin) = @_;
return () if ($q<0);
return ("") if (($q==0)&&($t==0));
return () if (($q==0)&&($t!=0));
my $k = ($t<0)?($s-1):($s+$t);
return () if ($r>$k*$q);
my @st;
for (my $i=$pmin;$i<=$k;$i++) {
my @rs = solve($q*$i-$r,$r*$i,$s,$t+$s-$i,$i);
push @st, map { "(1/$i)".(($_ eq "")?"=1\n":"+$_"); } @rs;
}
return @st;
}