Updated crossover function and added mutations