Finite Automata and Formal languages