Adaptive Branching for Constraint Satisfaction Problems