Finished and Commented with solutions