See EgolessProgramming.