Source: https://cs.wellesley.edu/~cs235/lectures/19_MappingReducibility