Source: https://ocw.mit.edu/courses/6-045j-automata-computability-and-complexity-spring-2011/a58157daa3e96833038e8169b8978393_MIT6_045JS11_rsa.pdf