read GuessRat: U:=proc(a) local n,i,j,lu:option remember: n:=nops(a): if n=1 then RETURN({[]}) : elif n=2 then RETURN({seq([i],i=a[1]..a[2])}) : else lu:=U([op(1..n-1,a)]): {seq(seq([op(lu[i]),j],j=max(lu[i][n-2]+1,a[n-1])..a[n]), i=1..nops(lu))}: fi: end: F:=proc(a) local gu,i: option remember: if nops(a)=1 then 1 else gu:=U(a): add(F(gu[i]),i=1..nops(gu)):fi:end: An:=proc(n) local i: F([seq(i,i=1..n)]):end: Ank:=proc(n,k) local i: F([seq(i,i=1..k-1),seq(i,i=k+1..n)]):end: Bnk:=proc(n,k): Ank(n,k)/Ank(n,k+1):end: GuessASM:=proc(n,k,d) local x,y: subs({y=k, x=n-k}, GuessRat((x,y)->Bnk(x+y,y),[x,y],d,1)): end: