Source: http://syllabus.euc.ac.cy/en/CSE213.pdf