anchor.diff:  
     // Assumes the edge is not already present. An edge is added in the
     // adjacency lists of both nodes since the graph is undirected.
  -  void addEdge(num i, num j, num cost) {
  +  void _addEdge(num i, num j, num cost) {
       _edges[i] = _edges[i].cons(new Edge(_nodes[j], cost));
       _edges[j] = _edges[j].cons(new Edge(_nodes[i], cost));
     }
  
positive.code:   }
  
    // Assumes i different from j. Writes the cost into the matrix.
    void addEdge(num i, num j, num cost) {
      var minI = min(i, j);
      var maxI = max(i, j);
      _edges[_offset(maxI) + minI] = cost;
  
negative.code:   Node get end => _nodes[_nodes.length - 1];
  
    // Edge related interface
    void _addEdge(int i, int j, num cost);
    PList<Edge> adjacent(Node n);
  
    // Some predefined graphs
    factory Graph.AU() {
      return new GraphList(7)
          .._addEdge(0, 1, 500)
          .._addEdge(0, 2, 400)
          .._addEdge(1, 3, 200)
          .._addEdge(1, 5, 400)
          .._addEdge(2, 3, 100)
          .._addEdge(2, 4, 150)
          .._addEdge(3, 4, 100)
          .._addEdge(4, 5, 150)
          .._addEdge(5, 6, 100);
    }
  }
  
  