anchor.diff:      }
   
       void union(Point a, Point b){
  +        int group = findGroup(a);
           Point aRoot = find(a);
           Point bRoot = find(b);
  -        aRoot.parent = bRoot;
  +        parents[bRoot] = aRoot;
       }
   
   }
   
   List<Point> validNeighbors(Point current, List<List<Cell>> board){
       List<Point> valids = current.neighbors4.where((neighbor) =>
  -        neighbor.x >= 0 && neighbor.x < board[current.y].length &&
  -        neighbor.y >= 0 && neighbor.y < 6
  +        neighbor.y >= 0 && neighbor.y < 6 &&
  +        neighbor.x >= 0 && neighbor.x < board[neighbor.y].length
       ).toList();
       return valids;
   }
  
positive.code:                     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]);
                  }
              }
          }
  
negative.code:                     matchesWest = true;
                  }
                  if(!matchesNorth && !matchesWest){
                      //new group discovered
                      // stderr.writeln("Creating blob group $groupIndex");
                      blobs[groupIndex] = new Set.from([cp]);
                      equivs[groupIndex] = new Set.from([groupIndex]);
                      groups[cp] = groupIndex;
  