Automata, Languages and Programming