Conflict-Driven Clause Learning for the Boolean Satisfiability Problem