A 3-SAT algorithm