public boolean exist(char[][] board, String word) {
        int m = board.length;
        int n = board[0].length;

        if( word.length() == 0 ) return false;
        if( m * n < word.length() ) return false;

        for ( int i = 0; i < m; i++ ) {
            for ( int j = 0; j < n; j++ ) {
                if( board[i][j] == word.charAt(0) ) {
                    if( dfs( board, i, j, word, 0, null ) ) return true;
                }
            }
        }
        return false;
    }