http://folk.uio.no/peterol/INF3230V10/Oppgaver/final2008.pdf