public void wideReveal(int row, int col){
    if(! isValidCell(row, col) ){
      throw new IllegalArgumentException("Out of game bounds.");
    }
    if(! gameCell[row][col].isRevealed()){
      return;
    }
    // wideReveal only executes if there's exactly N flags in 3x3 grid
    // when it executes,
    // reveal any unflagged Cell (doing the guess)
    // ignore the flagged Cell (will be counted as false)
    
    // counting number of flags
    // assumption here is any revealed Cell is never flagged
    int countFlag = 0;    
    List<Cell> neighborList = getNeighborCells(row, col);
    for(Cell neighbor : neighborList){
      if(neighbor.isFlagged()){
        countFlag++;
      }
    }      
    if(countFlag == gameCell[row][col].getMinesCount()){
      for(Cell neighbor : neighborList){
        if(!neighbor.isRevealed() && !neighbor.isFlagged()){
          neighbor.reveal();
        }
      }
    }
  }