Parallel and Distributed Algorithms