private int alphabeta(NeutronBoard nb, int depth,int alpha, int beta)
    {
	NeutronBoard n_copy;

       if ((depth==0) || (nb.isGameOver()!=NeutronBoard.NOPLAYER)) {
	 return NeutronUtil.evaluation(nb);
       }
       for (String AMove : nb.uniqueMoves()) {
          n_copy=new NeutronBoard(nb);
	  try {
	    n_copy.makeMove(AMove);
	  }
	  catch (IllegalMoveException e) { 
	      e.printStackTrace();
	      throw new RuntimeException("(033) This should never happen.");
	  }
	  if (nb.whoToMove()==NeutronBoard.WHITE) { // The max player
	       alpha=Math.max(alpha,alphabeta(n_copy,depth-1,alpha,beta));
	       if (beta<=alpha) break; // beta cut-off
	  }
          else { // The min-player
	       beta=Math.min(beta,alphabeta(n_copy,depth-1,alpha,beta));
	       if (beta<=alpha) break; // alpha cut-off
	  }
       } 
       if (nb.whoToMove()==NeutronBoard.WHITE) return alpha;
       return beta;
    }