Concurrent and Distributed Computing