Exponential time algorithms