the main program