public void cleanVariantsAround(Square square) {
        Integer value = square.getValue();

        // System.out.println("clean row variants");
        for (int c = 0; c < SQUARE_SIDE; c += 1) {
            if (squares[square.point.row][c] == null)
                break;
            squares[square.point.row][c].removeVariant(value);
        }

        // System.out.println("clean col variants");
        for (int r = 0; r < SQUARE_SIDE; r += 1) {
            if (squares[r][square.point.col] == null)
                break;
            squares[r][square.point.col].removeVariant(value);
        }

        // System.out.println("clean house variants");
        int startRow = getHouseStart(square.point.row);
        int endRow = startRow + HOUSE_SIDE;
        int startCol = getHouseStart(square.point.col);
        int endCol = startCol + HOUSE_SIDE;
        outerloop: for (int r = startRow; r < endRow; r += 1) {
            for (int c = startCol; c < endCol; c += 1) {
                if (squares[r][c] == null)
                    break outerloop;
                squares[r][c].removeVariant(value);
            }
        }
    }