main program begin