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:     }
  
      Point find(Point point){
          if(point.parent == point){
              return point;
          } else {
              return find(point.parent);
          }
      }
  
  
negative.code: 
  class DisJointPoints {
      Map<Point, int> map = new Map<Point, int>();
      Map<Point, Point> parents = new Map<Point, Point>();
  
      void operator[]=(Point key, int value){
          if(map.containsKey(key)){
              map[find(key)] = value;
          } else {
              //add new key
              parents[key] = key;
              map[key] = value;
          }
      }
  