private void findSolutions(int row,
                                int col,
                                RuzzleSolution current,
                                ArrayList<RuzzleSolution> currentSolutions)
    {
        if(row < 0 || row >= RuzzleBoard.NUM_ROWS) return;
        if(col < 0 || col >= RuzzleBoard.NUM_COLS) return;
        if(current.used[row][col]) return;
        current.word += board.get(row, col).letter;
        current.points += board.get(row, col).points;
        // length bonus
        if(current.word.length() > 4) current.points += 5;
        current.used[row][col] = true;
        if(dictionary.isWord(current.word))
        {
            currentSolutions.add(new RuzzleSolution(current));
        }
        if(dictionary.isPrefix(current.word))
        {
            findSolutions(row-1, col-1, new RuzzleSolution(current), currentSolutions);
            findSolutions(row-1, col, new RuzzleSolution(current), currentSolutions);
            findSolutions(row-1, col+1, new RuzzleSolution(current), currentSolutions);
            findSolutions(row, col-1, new RuzzleSolution(current), currentSolutions);
            findSolutions(row, col+1, new RuzzleSolution(current), currentSolutions);
            findSolutions(row+1, col-1, new RuzzleSolution(current), currentSolutions);
            findSolutions(row+1, col, new RuzzleSolution(current), currentSolutions);
            findSolutions(row+1, col+1, new RuzzleSolution(current), currentSolutions);
        }
    }