NOVA: state assignment of finite-state machines for optimal two-level logic implementations