@Override
 public GobanModel getNextState() {
   GobanModel gobanModel;
   gobanModel = new GobanModel(gameStates.get(gameStates.size() - 1));
   Move move = getNextMove();
   if (move != null) {
     gobanModel.putStone(move);
     gameStates.add(gobanModel);
     return gameStates.get(gameStates.size() - 1);
   }
   return null;
 }
  @Override
  public void putMove(Move move) {
    Node newNode;
    GobanModel gobanModel = gameStates.get(gameStates.size() - 1);

    if (gobanModel.isEmpty(move)) {
      if (null != actual) {
        newNode = new Node(actual, move);
        actual.addChild(newNode);
      } else {
        newNode = new Node(null, move);
        root = newNode;
      }
      gobanModel.putStone(move);
      gameStates.add(gobanModel);
      actual = newNode;
      moveNo++;
    }
  }