prerequisites:
MA1, CS1, CS2,
NM1
,
NM2