boolean dfs(char[][]board, String word, int i, int j, int l, Trie.Node node) {
		int m=board.length, n=board[0].length;
		if (l==word.length()) return Trie.isWord(node);
		if (i<0||i>=m||j<0||j>=n||!Trie.isPrefix(board[i][j], node)) return false;
		++l;node=Trie.nextNode(board[i][j], node);
		return dfs(board, word, i+1, j, l,node)||dfs(board, word, i-1, j, l, node)
				||dfs(board, word, i, j+1, l, node)||dfs(board, word, i, j-1, l, node);
	}