finished C2_1 minus IO and testing :D