Develop a program that helps solving hidatos. The program must generate correct hidatos with constraints decided by the user: board shape, number of cells, number of cells already full, degree of difficulty, etc. The user can then solve the hidato under the machine’s guidance. Alternatively, the user can propose a hidato that the machine must validate and possibly solve.