Added proper argument parser, along with option to read input from a file