public double simulateHandWithSharedCards(ArrayList<Card> holeCards, ArrayList<Card> sharedCards, int players) throws Exception {
		if (sharedCards.size() < 3) {
			throw new Exception("Less then 3 shared cards");
		}
		
		Deck deck = new Deck();
		deck.removeCards(holeCards);
		deck.removeCards(sharedCards);
		ArrayList<Card> sharedAndHoleCards = new ArrayList<Card>();
		sharedAndHoleCards.addAll(holeCards);
		sharedAndHoleCards.addAll(sharedCards);
		
		CardPower power = new PowerRanking().calcCardPower(sharedAndHoleCards);
		
		ArrayList<ArrayList<Card>> holeCardsCombinations = deck.holeCardsCombinations();
		
		int wins = 0;
		int ties = 0;
		int losses = 0;
		for (ArrayList<Card>  opponentHoleCards: holeCardsCombinations) {
			
			ArrayList<Card> opponentSharedAndHoleCards = new ArrayList<Card>();
			opponentSharedAndHoleCards.addAll(opponentHoleCards);
			opponentSharedAndHoleCards.addAll(sharedCards);
			CardPower opponentPower = new PowerRanking().calcCardPower(opponentSharedAndHoleCards);
			if (opponentPower.compareTo(power) == 0) { // tie
				ties++; 
			} else if(opponentPower.compareTo(power) > 0) { // loss
				losses++; 
			} else { // win
				wins++;
			}
		}
		return Math.pow((wins + 0.5 * ties) / ( wins + ties + losses), players);
	}