Finite automata minimization algorithms