Distributed Algorithms and Architectures