private Integer negaScout(Board board, Color current, Integer depth, Integer alpha, Integer beta) {
      if ( depth > 0 ) {
         Integer best = beta;
         for ( Move m :  board.getPossibleMoves(current) ) {
            board.apply(m);
            Integer score = - negaScout(board, current.other(), depth - 1, -best, -alpha);
            if ( alpha < score && score < beta )
               score = - negaScout(board, current.other(), depth - 1, -beta, -alpha);
            alpha = Math.max(alpha, score);
            if ( alpha >= beta )
               return alpha;
            best = alpha + 1;
            board.revert(m);
         }
         return best;
      } else {
          return ( ( current == selfColor ) ? 1 : -1 ) * this.evaluateBoard(board, current);
      }
   }