anchor.diff:  
   loop({Next, Messages} = State) ->
       receive
  -	{send_message, Message} ->
  +	{send_message, Message, _from} ->
   	    Next ! {new_message, {Message, self()}},
   	    loop(State);
   	{new_message, {Message, Node}} when Node == self() ->
  
positive.code: send_message(M, M, _Node, _Message) ->
      {ok, noreply};
  send_message(M, I, Node, Message) ->
      Node ! {send_message, Message},
      send_message(M, I + 1, Node, Message).
  
  setup_ring(N) ->
      Nodes = spawn_nodes(N, 0, []),
      Last = hd(Nodes),
      Reversed = [H|_] = lists:reverse(Nodes),
      set_next(H, Last),
      {Last, Reversed}.
  
negative.code:     Node ! quit,
      {ok, noreply}.
  
  fetch_message(Node) ->
      Node ! {fetch_message, self()},
      receive
  	{reply, Message} ->
  	    Message
      end.
  
  setup_ring(N) ->
      Nodes = spawn_nodes(N, 0, []),
      Last = hd(Nodes),
      Reversed = [H|_] = lists:reverse(Nodes),
      H ! {set_next, Last},
      {Last, Reversed}.
  
  spawn_nodes(0, 0, Nodes) ->
      Nodes;
  spawn_nodes(N, I, []) ->
      Node = spawn(?MODULE, init, [undefined]),
      spawn_nodes(N - 1, I, [Node]);
  spawn_nodes(N, I, Nodes = [H|_T]) ->
      Next = spawn(?MODULE, init, [H]),
      spawn_nodes(N - 1, I, [Next|Nodes]).
  
  init(undefined) ->
      loop({undefined, []});
  