4.16.23 f(x)(y(x)a1)(y(x)a2)(y(x)a3)(y(x)a4)+y(x)2=0

ODE
f(x)(y(x)a1)(y(x)a2)(y(x)a3)(y(x)a4)+y(x)2=0 ODE Classification

[[_1st_order, `_with_symmetry_[F(x),G(x)*y+H(x)]`]]

Book solution method
Binomial equation (y)m+F(x)G(y)=0

Mathematica
cpu = 2.85498 (sec), leaf count = 413

{{y(x)InverseFunction[2a2#1a4#1(#1a3)(a1a2)(#1a1)(a3a2)F(sin1((a1a4)(#1a2)(a2a4)(#1a1))|(a1a3)(a2a4)(a2a3)(a1a4))a1#1a3#1(a2a4)(a2#1)(#1a4)(a1a2)(a1a4)(a1#1)2(a2a4)2&][c1+1xif(K[1])dK[1]]},{y(x)InverseFunction[2a2#1a4#1(#1a3)(a1a2)(#1a1)(a3a2)F(sin1((a1a4)(#1a2)(a2a4)(#1a1))|(a1a3)(a2a4)(a2a3)(a1a4))a1#1a3#1(a2a4)(a2#1)(#1a4)(a1a2)(a1a4)(a1#1)2(a2a4)2&][c1+1xif(K[2])dK[2]]}}

Maple
cpu = 0.242 (sec), leaf count = 190

{y(x)1(_a+a4)(_a+a3)(_a+a2)(_a+a1)d_a+x1f(_a)(a4y(x))(a3y(x))(a2y(x))(a1y(x))1(a4y(x))(a3y(x))(a2y(x))(a1y(x))d_a+_C1=0,y(x)1(_a+a4)(_a+a3)(_a+a2)(_a+a1)d_a+x1f(_a)(a4y(x))(a3y(x))(a2y(x))(a1y(x))1(a4y(x))(a3y(x))(a2y(x))(a1y(x))d_a+_C1=0} Mathematica raw input

DSolve[f[x]*(-a1 + y[x])*(-a2 + y[x])*(-a3 + y[x])*(-a4 + y[x]) + y'[x]^2 == 0,y[x],x]

Mathematica raw output

{{y[x] -> InverseFunction[(2*EllipticF[ArcSin[Sqrt[((a1 - a4)*(-a2 + #1))/((a2 -
 a4)*(-a1 + #1))]], ((a1 - a3)*(a2 - a4))/((a2 - a3)*(a1 - a4))]*Sqrt[a2 - #1]*S
qrt[a4 - #1]*Sqrt[((a1 - a2)*(-a3 + #1))/((-a2 + a3)*(-a1 + #1))])/((a2 - a4)*Sq
rt[a1 - #1]*Sqrt[a3 - #1]*Sqrt[((a1 - a2)*(a1 - a4)*(a2 - #1)*(-a4 + #1))/((a2 -
 a4)^2*(a1 - #1)^2)]) & ][C[1] + Integrate[(-I)*Sqrt[f[K[1]]], {K[1], 1, x}]]}, 
{y[x] -> InverseFunction[(2*EllipticF[ArcSin[Sqrt[((a1 - a4)*(-a2 + #1))/((a2 - 
a4)*(-a1 + #1))]], ((a1 - a3)*(a2 - a4))/((a2 - a3)*(a1 - a4))]*Sqrt[a2 - #1]*Sq
rt[a4 - #1]*Sqrt[((a1 - a2)*(-a3 + #1))/((-a2 + a3)*(-a1 + #1))])/((a2 - a4)*Sqr
t[a1 - #1]*Sqrt[a3 - #1]*Sqrt[((a1 - a2)*(a1 - a4)*(a2 - #1)*(-a4 + #1))/((a2 - 
a4)^2*(a1 - #1)^2)]) & ][C[1] + Integrate[I*Sqrt[f[K[2]]], {K[2], 1, x}]]}}

Maple raw input

dsolve(diff(y(x),x)^2+f(x)*(y(x)-a1)*(y(x)-a2)*(y(x)-a3)*(y(x)-a4) = 0, y(x),'implicit')

Maple raw output

Intat(1/((-_a+a4)*(-_a+a3)*(-_a+a2)*(-_a+a1))^(1/2),_a = y(x))+Intat(-(-f(_a)*(a
4-y(x))*(a3-y(x))*(a2-y(x))*(a1-y(x)))^(1/2)/((a4-y(x))*(a3-y(x))*(a2-y(x))*(a1-
y(x)))^(1/2),_a = x)+_C1 = 0, Intat(1/((-_a+a4)*(-_a+a3)*(-_a+a2)*(-_a+a1))^(1/2
),_a = y(x))+Intat((-f(_a)*(a4-y(x))*(a3-y(x))*(a2-y(x))*(a1-y(x)))^(1/2)/((a4-y
(x))*(a3-y(x))*(a2-y(x))*(a1-y(x)))^(1/2),_a = x)+_C1 = 0