1. Design a simple finite state machine.
2. Extend the design to allow deterministic or non-deterministic variants.
File:StateMachine