Distributed and Concurrent Algorithms