prerequisites:

MA1, CS1, CS2, NM1, NM2