public static double[] evaluateWinningOdds(Cards[] hands, Cards board, Cards other) {
        int numhands = hands.length;
        double[] odds = new double[numhands];
        int[] wins = new int[numhands];
        int[] ties = new int[numhands];
        int total = 0;

        // Get a fresh deck
        Cards remaining = new Deck().getCards();

        // Remove the known cards from the deck
        for (Cards hand : hands) {
            for (Card card : hand) {
                remaining.remove(card);
            }
        }
        for (Card card : board) {
            remaining.remove(card);
        }
        for (Card card : other) {
            remaining.remove(card);
        }

        // To what depth are we going to have to search
        if (board.size() == 0) {
            // Need to search 5 cards
            total = search5(hands, board, numhands, wins, ties, remaining);
        } else if (board.size() == 3) {
            // Need to search 2 cards
            total = search2(hands, board, numhands, wins, ties, remaining);
        } else if (board.size() == 4) {
            // Need to search 1 card
            total = search1(hands, board, numhands, wins, ties, remaining);
        } else if (board.size() == 5) {
            // Game is determined
            total = rankHands(hands, board, numhands, wins, ties, total);
        }

        int i = 0;
        for (int win : wins) {
            odds[i++] = ((double) win) / total;
        }


        //System.out.println(total);
        return odds;
    }