HKU2021-2022-sem2-COMP3322-Assignment2 see https://github.com/Isrothy/HKU2021-2022-sem2-COMP3322-Assignment2/blob/master/COMP3322B_a2_s2022.pdf