public static List<Position> getAdjucentPositionsBack(Position box, State currentState) {
 
        // the row and column of this box
        int row = box.getRow();
        int col = box.getCol();
 
        // the list to be returned with the valid adjucent positions
        List<Position> adjucent = new ArrayList<>();
 
        // for each possible adjucent position to the box
        for (int i = 0; i < Main.MOVES.length; i++) {
 
            // the adjacent cell to this box (U D L R)
            Position pos = new Position(row + Main.MOVE_Y[i], col + Main.MOVE_X[i]);
            // the adjacent cell to this first cell
            Position pos2 = new Position(row + Main.MOVE_Y[i]*2, col + Main.MOVE_X[i]*2);
 
            // check if this spot is empty or not
            if (Main.isEmptyPosition(pos) && !currentState.getBoxes().contains(pos)) {
                if (Main.isEmptyPosition(pos2) && !currentState.getBoxes().contains(pos2)) {
                // add it to the list
                 adjucent.add(pos);
                }
            }
        } // end adding positions
 
        return adjucent;
    }