Fix the mutation process

use recursive top to bottom copying
add a Main