parameterize selection, crossover and mutation
return original code when invalid shift