Source: https://www.cs.cmu.edu/~fp/courses/15122-f15/lectures/09-stackqueue.pdf