Design and Analysis of Distributed Algorithms by Nicola Santoro