public Action compute( Percept percept ){
    if( cmd.size() == 0 ){
      NaiveSudokuBoardState initial_state = new NaiveSudokuBoardState((SudokuPercept)percept);
      int depth = initial_state.board.emptyPlaces();
      DepthFirstSearch search = new DepthFirstSearch(depth);
      cmd = search.apply( initial_state, new NaiveSudokuSearchSpace(),
                          new NaiveSudokuGoalTest(), new ConstantCost() );
      if( cmd == null ){ cmd = new Vector<Action>(); }
    }
    if( cmd.size() > 0 ){
      Action action = cmd.get(0);
      cmd.remove(0);
      return action;
    }
    return null;
  }