first version
more compact evolve() version based on module operator