Describir: A Course in Formal Languages, Automata and Groups