This homework is meant to solve the N-Queens problem. I want you to formulate the problem such that a random start state gives you a single queen in each column, but may give you several queens on the same row. There is an optimization step here that you can use to further "help" the computer find solutions quickly, but I want you to use this formulation. You should use the eval function posted on the website. You may adapt it if you use slightly different data structures, but this is the one I would like you to use. If it returns 0 then that means you have your goal. Your solution should work for general N. Read in N as the only input of the program. Solve the N-Queens problem using the following methods: a) hill-climbing - after n^3 iterations you may conclude that you will not find the solution. Thus for a 4x4 board, you must successfully choose 64 successors before giving up. b) hill-climbing with random restarts - after n^2 iterations, perform a restart. After n restarts, you may conclude that you will not find a solution. c) local beam search with k = 3. You may give up after n^3/3 iterations. So for a 4x4 board, you must only perform 64/3 = ~21 iterations before giving up. Analysis: Each uses the same number of iterations before giving up (n^3). For each, choose a new random start state and run for N=10, 10,000 times. How many times does each find a solution? Extra Credit: Implement one of the other algorithms and report your findings (and settings).