Algebraic Automata Theory