http://www.cs.ru.nl/~paubel/assignment5-start.html