solving algebraic equations