print(`FO(F,n,xvars,N,Dvars,Aux)`): GP:=proc(a,xvars,Deg1) local gu,i,mu,coe,lu,lu1,j,Deg,cou,n:with(combinat): n:=nops(xvars): gu:=0: coe:={}: cou:=0:for Deg from 0 to Deg1 do mu:=composition(Deg+n,n):for i from 1 to nops(mu) do cou:=cou+1: lu1:=mu[i]: lu:=1:for j from 1 to n do lu:=lu*xvars[j]^(lu1[j]-1): od: gu:=gu+a[cou]*lu:coe:=coe union {a[cou]}:od:od:gu,coe:end: E11:=proc(f1,x) local gu,i,mu,f:gu:={}:f:=collect(f1,x): for i from ldegree(f,x) to degree(f,x) do mu:=coeff(f,x,i): if mu<>0 then gu:=gu union {mu}: fi: od:gu:end: E1:=proc(f,xvar) local gu,mu,m,i:m:=nops(xvar):if m=1 then RETURN(E11(f,xvar[1])):fi:mu:=E1(f,[op(1..m-1,xvar)]):gu:={}: for i from 1 to nops(mu) do gu:=gu union E11(mu[i],xvar[m]):od:gu:end: BiTa:=proc(SolSet) local gu,i,mu: gu:={}: for i from 1 to nops(SolSet) do mu:=op(i,SolSet): if lhs(mu)=rhs(mu) then gu:=gu union {lhs(mu)}:fi:od:gu:end: yafe:=proc(ope,N) local gu,i: gu:=0:for i from 0 to degree(ope,N) do gu:=gu+factor(coeff(ope,N,i))*N^i:od:gu:end: ADO:=proc(P,F,xt,Dt) local gu,i,xn,Dn,n,xt1,Dt1,P1,mu:n:=nops(xt): if n=0 then RETURN(P*F): fi:xn:=op(n,xt):Dn:=op(n,Dt): xt1:=[op(1..n-1,xt)]:Dt1:=[op(1..n-1,Dt)]: P1:=coeff(expand(P),Dn,0):mu:=ADO(P1,F,xt1,Dt1):gu:=mu: for i from 1 to degree(expand(P),Dn) do P1:=coeff(expand(P),Dn,i): mu:=ADO(P1,diff(F,xn$i),xt1,Dt1):gu:=gu+ mu:od:gu:end: AO:=proc(P,F,xt,Dt,nt,Nt) local gu,i,nk,Nk,nt1,Nt1,P1,mu,k:k:=nops(nt): if k=0 then RETURN(ADO(P,F,xt,Dt) ):fi:nk:=op(k,nt):Nk:=op(k,Nt): nt1:=[op(1..k-1,nt)]:Nt1:=[op(1..k-1,Nt)]:gu:=0:for i from 0 to degree(P,Nk) do P1:=coeff(expand(P),Nk,i):mu:=AO(P1,subs(nk=nk+i,F),xt,Dt,nt1,Nt1): gu:=gu+ mu:od:gu:end: h0:=proc(f,x) local g,i:g:=f:for i from 1 to nops(x) do g:=subs(x[i]=0,g):od: g:end: FOSp:=proc(F,n,xvars,N,Dvars,Ord,Aux) local a,P,eq,var,gu,var1,bt,P0,j,eq0,Pa, i,var01:P:=GP(a,[op(Dvars),N],Ord):var:=P[2]:P:=P[1]: gu:=AO(P,F,xvars,Dvars,[n],[N]):gu:=simplify(gu/F):gu:=normal(gu): gu:=numer(gu):eq:=E1(gu,xvars):eq0:=subs(n=1/2,eq): for i from 1 to nops(Aux) do eq0:=subs(Aux[i]=i/3,eq0): od: var01:=solve(eq0,var): Pa:=expand(subs(var01,P)): if Pa=0 then RETURN(0): fi:var1:=solve(eq,var):P:=expand(subs(var1,P)): if P=0 then RETURN(0):fi:bt:=BiTa(var1): for j from 1 to nops(bt) do P:=coeff(P,bt[j],1): P0:=expand(h0(P,Dvars)):P0:=yafe(P0,N): if P0<>0 then RETURN(P0,P-P0):fi:od:0:end: FO:=proc(F,n,xvars,N,Dvars,Aux) local gu,Ord: gu:=FOSp(F,n,xvars,N,Dvars,0,Aux): for Ord from 1 while gu=0 do gu:=FOSp(F,n,xvars,N,Dvars,Ord,Aux):od:gu:end: