Worked on this about a year ago. Spent a week and gave up after failing. This took me 1.5 hours.
Don't use this for homework...... Unless you want to.