Distributed Computing by Pierre Fraigniaud