this is the main program