1. (10pts) process p[i : 0..n-1] inp N : set {g| p[g] is a neighbor of p[i]} var ready : boolean, {init. true} j : N par g : N begin ready -> ready, j := false, any; send rqst to p[j] [] rcv rply from p[j] -> ready := true [] rcv rqst from p[g] -> send rply to p[g] end 2. (10pts) process p const n var ready : array[0..n-1] of boolean {init. true} i : 0..n-1 par j : 0..n-1 begin ready[j] -> ready[j] := false; send rqst(j) to q [] rcv rply(i) from q -> ready[i] := true [] rcv error from q -> skip [] timeout ~ready[j] ^ rqst(j)#ch.p.q=0 ^ rply(j)#ch.q.p=0 -> ready[j] := true end