Human beings solve problems in many different ways. Problem solving in artificial intelligence (AI) is inspired from these diverse approaches. AI problem solvers may be based on search, on memory, or on knowledge representation and reasoning. An approach to problem solving is to pose problems as constraint satisfaction problems (CSP), and employ general methods to solve them. The task of a user then is only to pose a problem as a CSP, and then call an off-the-shelf solver. CSPs are amenable to combining search based methods with reasoning. In this 2 credit course we will look at general approaches to solving finite domain CSPs, and explore how search can be combined with constraint propagation to find solutions.