Fix the mutation process
use recursive top to bottom copying
add a Main