Introduction to computer science : a structured approach