Source: https://dsacl3-2019.github.io/slides/fst.pdf