M. S. Krishnamoorthy (RPI) proofread this book as it was being written and suggested many invaluable improvements. I thank him for his perseverance in reading several versions of the manuscript.
Nelson Beebee provided useful tips on preparing the index using LaTeX. The figures in this book were drawn using Pstricks, a graphics package by Timothy van Zandt that makes the power of the PostScript imaging model accessible from LaTeX. This helps me draw figures reliably in an eyes-free environment for which I am deeply indebted to the author of Pstricks. Sebastian Rahtz helped me further harness the power of Pstricks by providing me online access to the Graphics Companion ---his excellent book on creating graphics in LaTeX. I would also like to thank Frank Mittelbach for providing me online access to the LaTeX Companion.
Terry Winograd (Stanford) increased my appreciation for good software design by providing me online access to his book on this subject; Jim King (Adobe Systems) helped increase my appreciation for good quality Computer Science over the last 18 months. The positive effects of both are seen clearly in the work described in this book.
Above all, I would like to thank my adviser David Gries (Cornell) for teaching me to think and write clearly. He proofread this book with great care and helped me improve my writing while correcting specific problems with the manuscript.
Last but not least, I thank my family for their love and support throughout.