Problem Solving in Automata, Languages, and Complexity