Inductive Program Synthesis from Input-Output Examples