anchor.diff:  Map<int, Set<Point>> connectedColors(List<List<Cell>> board){
       Map<int, Set<Point>> blobs = new Map<int, Set<Point>>();
       Map<int, Set<int>> equivs = new Map<int, Set<int>>();
  -    DisJointPoints labels = new DisJointPoints();
  -    int labelIndex = 0;
  +    DisJointPoints groups = new DisJointPoints();
  +    int groupIndex = 0;
       //TODO scan map, build blob and equivalency list
       //first pass
       for(int row = 0; row < 6; row++){
  
positive.code:     }
  
      int findGroup(Point point){
          return set[find(point)];
      }
  
      void union(Point a, Point b){
  
negative.code:                     matchesWest = true;
                  }
                  if(!matchesNorth && !matchesWest){
                      blobs[groupIndex] = new Set.from([cp]);
                      equivs[groupIndex] = new Set.from([groupIndex]);
                      groups[cp] = groupIndex;
                      //increment the label index
                      groupIndex++;
                  } else if (matchesNorth && !matchesWest){
                      int group = groups[northPoint];
                      blobs[group].add(cp);
                      groups[cp] = group;
                  } else if (!matchesNorth && matchesWest) {
                      int group = groups[westPoint];
                      blobs[group].add(cp);
                      groups[cp] = group;
                  } else if (matchesNorth && matchesWest && groups[northPoint] == groups[westPoint]) {
                      //current point matches north and west and they're already the same label
                      // p p
                      // p X
                      int group = groups[westPoint];
                      blobs[group].add(cp);
                      groups[cp] = group;
                  } else {
                      //current point matches north and west, but they are different labels
                      // b p
                      // p X
  
                      //add to lowest label
                      int northGroup = groups[northPoint];
                      int westGroup = groups[westPoint];
                      int minGroup = min(northGroup, westGroup);
                      blobs[minGroup].add(cp);
                      groups[cp] = minGroup;
  
                      //update equivs
                      // union both sets of labels together
                      // for each group in labels, set equivs[group] to unioned list
                      equivs[northGroup].union(equivs[westGroup]);
                      equivs[westGroup].union(equivs[northGroup]);
                  }
              }
          }
  