non-deterministic finite automaton