public void helper(BoggleBoard board, int r, int c, ArrayList<BoardCell> list,
			StringBuilder searchWord, ILexicon lex) {
		if(r < 0 || r>= board.size() || c < 0 || c >= board.size()) {
			return;
		}
		BoardCell init = new BoardCell(r,c);
		if(list.contains(init)) {
			return;
		}
		
		String letterHere = board.getFace(r, c);
		searchWord.append(letterHere);
		
		if(lex.wordStatus(searchWord)!= LexStatus.NOT_WORD) {
			list.add(init);
			if(lex.wordStatus(searchWord) == LexStatus.WORD) {
				add(searchWord.toString()); // here add is referring to the AbstractPlayer
				//not the list of boardcells
			}
			int[] rdelta = {-1,-1,-1, 0, 0, 1, 1, 1};
			int[] cdelta = {-1, 0, 1,-1, 1,-1, 0, 1};
			//If the string is either a word or the prefix of a word in the lexicon then the search is
			//continued by calling the helper method for each adjacent cube with the string built so far.
			for(int k=0; k < rdelta.length; k++){
				  helper(board, r+rdelta[k], c+cdelta[k], list, searchWord, lex); 
			}
			//If the string is not a prefix (or a word) then the 
			//search is cut-off at this point and the recursion will unwind/backtrack 
			list.remove(init);
		}
		//since you're backtracking, be sure to undo the marking of a board cell both in the string being 
		//built and in the structure storing which board cells contributed to the string
		for(int pl = 0; pl < letterHere.length(); pl++) {
			searchWord.deleteCharAt(searchWord.length() - 1);
		}
		return;
	}