1. A famous mathematical problem is: given a graph, find out whether it is possible to color its vertices using 3 colors (say R,G,B) so that no 2 adjacent vertices have the same color. Design a **iterative brute-force** algorithm to solve this problem based on the given definition. What is the run-time complexity of your algorihm? You may use the following pseudo-code constructs: for each combinatorial object (permutations, tuples, etc assume you have bool CheckColors() - returns true if assigned colors satisfy the constraint. 2. Solve the above problem using a **backtracking** algorithm (recursive brute-force). 3. Your game uses sprites (2-D images), for simplicity it is just one color. Here is an example ”car” sprite ********* ********** ******************** ******************** *** *** your graphics can display either 1x1 or 3x3 squares in one time unit. Problem - write a backtracking algorithm that accepts a sprite and represents it in the smallest number of 1x1 and 3x3 squares to optimize the time needed to display the sprite. 3x3 squares MAY overlap - overlapping does not change the color, so for example *** **** **** *** is 2 3x3 squares 111 111* 111* *** and *** *222 *222 222 Remember - it should be a high-level pseudo code. Anything longer than 10 lines will go into unnecessary low-level details and will probably be incorrect. 4. based on your solution of the previous problem: Explain how to design branch-and-bound optimization. Make sure to specify how to calculate the bound, whether it is an upper or lower bound and how branch termination condition works. 5. See problems in big-O notes. 6. What is minimal change ordering and how one can use it to optimize backtracking algorithms? Explain how it can be applied to N-queen problem.