Implement a constraint satisfaction system as follows: Define a datatype for CSPs with finite, discrete domains. You will need to find a way to represent domains and constraints. Implement operators that assign values to variables, where the variables are assigned in a fixed order at each level of the tree. Implement a goal test that checks a complete state for satisfaction of all the constraints. Implement backtrackingby modifying DEPTH-FIRST-SEARCH. Add forward checking to your backtracking algorithm. Run the three algorithms on some sample problems and compare their performance.