coursera programming assignment, please follow Coursera Honor Code... DO NOT COPY..